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}