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 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: Option<String>,
60    pub name: String,
61    pub logo: String,
62    pub path: String,
63    pub description: Option<String>,
64    pub hard_breaks: Option<bool>,
65    pub visibility: TeamVisibilityType,
66    #[serde(with = "chrono::serde::ts_milliseconds")]
67    pub created_at: DateTime<Utc>,
68    pub upgraded: bool,
69}
70
71#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
72#[serde(rename_all = "camelCase")]
73pub struct User {
74    pub id: String,
75    pub email: Option<String>,
76    pub name: String,
77    pub user_path: String,
78    pub photo: String,
79    pub teams: Vec<Team>,
80    pub upgraded: bool,
81}
82
83#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
84#[serde(rename_all = "camelCase")]
85pub struct SimpleUserProfile {
86    pub name: String,
87    pub user_path: String,
88    pub photo: String,
89    pub biography: Option<String>,
90}
91
92#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
93#[serde(rename_all = "camelCase")]
94pub struct Note {
95    pub id: String,
96    pub title: String,
97    pub tags: Vec<String>,
98    #[serde(with = "chrono::serde::ts_milliseconds")]
99    pub last_changed_at: DateTime<Utc>,
100    #[serde(with = "chrono::serde::ts_milliseconds")]
101    pub created_at: DateTime<Utc>,
102    pub last_change_user: Option<SimpleUserProfile>,
103    pub publish_type: NotePublishType,
104    #[serde(with = "chrono::serde::ts_milliseconds_option")]
105    pub published_at: Option<DateTime<Utc>>,
106    pub user_path: Option<String>,
107    pub team_path: Option<String>,
108    pub permalink: Option<String>,
109    pub short_id: String,
110    pub publish_link: String,
111    pub read_permission: NotePermissionRole,
112    pub write_permission: NotePermissionRole,
113}
114
115#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
116#[serde(rename_all = "camelCase")]
117pub struct SingleNote {
118    pub content: String,
119    #[serde(flatten)]
120    pub note: Note,
121}
122
123#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
124#[serde(rename_all = "camelCase")]
125pub struct UpdateNoteOptions {
126    #[serde(skip_serializing_if = "Option::is_none")]
127    pub content: Option<String>,
128    #[serde(skip_serializing_if = "Option::is_none")]
129    pub read_permission: Option<NotePermissionRole>,
130    #[serde(skip_serializing_if = "Option::is_none")]
131    pub write_permission: Option<NotePermissionRole>,
132    #[serde(skip_serializing_if = "Option::is_none")]
133    pub permalink: Option<String>,
134}