Skip to main content

hackmd_api_client_rs/
types.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
5#[serde(rename_all = "lowercase")]
6pub enum TeamVisibilityType {
7    Public,
8    Private,
9}
10
11#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
12#[serde(rename_all = "lowercase")]
13pub enum NotePublishType {
14    Edit,
15    View,
16    Slide,
17    Book,
18}
19
20#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
21#[serde(rename_all = "snake_case")]
22pub enum CommentPermissionType {
23    Disabled,
24    Forbidden,
25    Owners,
26    SignedInUsers,
27    Everyone,
28}
29
30#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
31#[serde(rename_all = "snake_case")]
32pub enum SuggestEditPermissionType {
33    Disabled,
34    Forbidden,
35    Owners,
36    SignedInUsers,
37}
38
39#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
40#[serde(rename_all = "snake_case")]
41pub enum NotePermissionRole {
42    Owner,
43    SignedIn,
44    Guest,
45}
46
47#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
48#[serde(rename_all = "camelCase")]
49pub struct FolderPath {
50    pub id: String,
51    pub name: String,
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub icon: Option<String>,
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub color: Option<String>,
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub parent_id: Option<String>,
58    pub client_id: String,
59}
60
61#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)]
62#[serde(rename_all = "camelCase")]
63pub struct CreateNoteOptions {
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub title: Option<String>,
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub content: Option<String>,
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub description: Option<String>,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub tags: Option<Vec<String>>,
72    #[serde(skip_serializing_if = "Option::is_none")]
73    pub read_permission: Option<NotePermissionRole>,
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub write_permission: Option<NotePermissionRole>,
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub comment_permission: Option<CommentPermissionType>,
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub suggest_edit_permission: Option<SuggestEditPermissionType>,
80    #[serde(skip_serializing_if = "Option::is_none")]
81    pub permalink: Option<String>,
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub parent_folder_id: Option<String>,
84    #[serde(skip_serializing_if = "Option::is_none")]
85    pub origin: Option<String>,
86}
87
88#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
89pub struct NoteImageUploadData {
90    pub link: String,
91}
92
93#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
94pub struct NoteImageUploadResponse {
95    pub data: NoteImageUploadData,
96}
97
98#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
99#[serde(rename_all = "camelCase")]
100pub struct Team {
101    pub id: String,
102    pub owner_id: String,
103    pub name: String,
104    pub logo: String,
105    pub path: String,
106    pub description: Option<String>,
107    pub visibility: TeamVisibilityType,
108    #[serde(with = "chrono::serde::ts_milliseconds")]
109    pub created_at: DateTime<Utc>,
110    pub upgraded: bool,
111}
112
113#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
114#[serde(rename_all = "camelCase")]
115pub struct User {
116    pub id: String,
117    pub email: Option<String>,
118    pub name: String,
119    pub user_path: String,
120    pub photo: String,
121    pub teams: Vec<Team>,
122    pub upgraded: bool,
123}
124
125#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
126#[serde(rename_all = "camelCase")]
127pub struct SimpleUserProfile {
128    pub name: String,
129    pub user_path: String,
130    pub photo: String,
131    pub biography: Option<String>,
132}
133
134#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
135#[serde(rename_all = "camelCase")]
136pub struct Note {
137    pub id: String,
138    pub title: String,
139    #[serde(default)]
140    pub description: String,
141    pub tags: Vec<String>,
142    #[serde(with = "chrono::serde::ts_milliseconds")]
143    pub last_changed_at: DateTime<Utc>,
144    #[serde(with = "chrono::serde::ts_milliseconds")]
145    pub created_at: DateTime<Utc>,
146    #[serde(with = "chrono::serde::ts_milliseconds_option")]
147    pub title_updated_at: Option<DateTime<Utc>>,
148    #[serde(with = "chrono::serde::ts_milliseconds_option")]
149    pub tags_updated_at: Option<DateTime<Utc>>,
150    pub last_change_user: Option<SimpleUserProfile>,
151    pub publish_type: NotePublishType,
152    #[serde(with = "chrono::serde::ts_milliseconds_option")]
153    pub published_at: Option<DateTime<Utc>>,
154    pub user_path: Option<String>,
155    pub team_path: Option<String>,
156    pub permalink: Option<String>,
157    pub short_id: String,
158    pub publish_link: String,
159    #[serde(default)]
160    pub folder_paths: Vec<FolderPath>,
161    pub read_permission: NotePermissionRole,
162    pub write_permission: NotePermissionRole,
163}
164
165#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
166#[serde(rename_all = "camelCase")]
167pub struct SingleNote {
168    pub content: String,
169    #[serde(flatten)]
170    pub note: Note,
171}
172
173#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)]
174#[serde(rename_all = "camelCase")]
175pub struct UpdateNoteOptions {
176    #[serde(skip_serializing_if = "Option::is_none")]
177    pub title: Option<String>,
178    #[serde(skip_serializing_if = "Option::is_none")]
179    pub content: Option<String>,
180    #[serde(skip_serializing_if = "Option::is_none")]
181    pub description: Option<String>,
182    #[serde(skip_serializing_if = "Option::is_none")]
183    pub tags: Option<Vec<String>>,
184    #[serde(skip_serializing_if = "Option::is_none")]
185    pub read_permission: Option<NotePermissionRole>,
186    #[serde(skip_serializing_if = "Option::is_none")]
187    pub write_permission: Option<NotePermissionRole>,
188    #[serde(skip_serializing_if = "Option::is_none")]
189    pub permalink: Option<String>,
190    #[serde(skip_serializing_if = "Option::is_none")]
191    pub parent_folder_id: Option<String>,
192}