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}