1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6use crate::api::endpoints::PathPart;
7
8pub mod user {
10 use crate::api::endpoints::PathPart;
11 use macros::make_path_parts;
12 use serde::{Deserialize, Serialize};
13
14 use super::PdfId;
15
16 make_path_parts!(UserPdfListPath => "/v1/user/me/pdf");
17
18 #[derive(Serialize, Deserialize, Debug)]
20 pub struct UserPdfListResponse {
21 pub pdf_files: Vec<UserPdfResponse>,
23 }
24
25 make_path_parts!(UserPdfGetPath => "/v1/user/me/pdf/{}" => PdfId);
26
27 #[derive(Serialize, Deserialize, Debug)]
29 pub struct UserPdfResponse {
30 pub metadata: UserPdf,
32 }
33
34 #[derive(Serialize, Deserialize, Debug)]
36 pub struct UserPdf {
37 pub id: PdfId,
39 }
41
42 make_path_parts!(UserPdfCreatePath => "/v1/user/me/pdf");
43
44 make_path_parts!(UserPdfUploadPath => "/v1/user/me/pdf/{}/raw" => PdfId);
45
46 #[derive(Serialize, Deserialize, Debug)]
48 pub struct UserPdfUploadRequest {
49 pub file_size: usize,
52 }
53
54 #[derive(Serialize, Deserialize, Debug)]
56 pub struct UserPdfUploadResponse {
57 pub session_uri: String,
59 }
60
61 make_path_parts!(UserPdfDeletePath => "/v1/user/me/pdf/{}" => PdfId);
62}
63
64wrap_uuid! {
65 pub struct PdfId
67}
68
69#[derive(Serialize, Deserialize, Debug)]
71pub struct PdfResponse {
72 pub metadata: PdfMetadata,
74}
75
76#[derive(Serialize, Deserialize, Debug)]
78pub struct PdfMetadata {
79 pub id: PdfId,
81
82 pub name: String,
84
85 pub description: String,
87
88 pub publish_at: Option<DateTime<Utc>>,
90
91 pub created_at: DateTime<Utc>,
93
94 pub updated_at: Option<DateTime<Utc>>,
96}