hackmd_api_client_rs/
types.rs

1use chrono::NaiveDateTime;
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 NotePermissionRole {
33    Owner,
34    SignedIn,
35    Guest,
36}
37
38#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
39#[serde(rename_all = "camelCase")]
40pub struct CreateNoteOptions {
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub title: Option<String>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub content: Option<String>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub read_permission: Option<NotePermissionRole>,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub write_permission: Option<NotePermissionRole>,
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub comment_permission: Option<CommentPermissionType>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub permalink: Option<String>,
53}
54
55#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
56#[serde(rename_all = "camelCase")]
57pub struct Team {
58    pub id: String,
59    pub owner_id: String,
60    pub name: String,
61    pub logo: String,
62    pub path: String,
63    pub description: String,
64    pub hard_breaks: bool,
65    pub visibility: TeamVisibilityType,
66    pub created_at: NaiveDateTime,
67}
68
69#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
70#[serde(rename_all = "camelCase")]
71pub struct User {
72    pub id: String,
73    pub email: Option<String>,
74    pub name: String,
75    pub user_path: String,
76    pub photo: String,
77    pub teams: Vec<Team>,
78}
79
80#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
81#[serde(rename_all = "camelCase")]
82pub struct SimpleUserProfile {
83    pub name: String,
84    pub user_path: String,
85    pub photo: String,
86    pub biography: Option<String>,
87    pub created_at: NaiveDateTime,
88}
89
90#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
91#[serde(rename_all = "camelCase")]
92pub struct Note {
93    pub id: String,
94    pub title: String,
95    pub tags: Vec<String>,
96    pub last_changed_at: String,
97    pub created_at: String,
98    pub last_change_user: Option<SimpleUserProfile>,
99    pub publish_type: NotePublishType,
100    pub published_at: Option<String>,
101    pub user_path: Option<String>,
102    pub team_path: Option<String>,
103    pub permalink: Option<String>,
104    pub short_id: String,
105    pub publish_link: String,
106    pub read_permission: NotePermissionRole,
107    pub write_permission: NotePermissionRole,
108}
109
110#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
111#[serde(rename_all = "camelCase")]
112pub struct SingleNote {
113    pub content: String,
114    #[serde(flatten)]
115    pub note: Note,
116}
117
118#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
119#[serde(rename_all = "camelCase")]
120pub struct UpdateNoteOptions {
121    #[serde(skip_serializing_if = "Option::is_none")]
122    pub content: Option<String>,
123    #[serde(skip_serializing_if = "Option::is_none")]
124    pub read_permission: Option<NotePermissionRole>,
125    #[serde(skip_serializing_if = "Option::is_none")]
126    pub write_permission: Option<NotePermissionRole>,
127    #[serde(skip_serializing_if = "Option::is_none")]
128    pub permalink: Option<String>,
129}