1use chrono::prelude::*;
2use serde::{Deserialize, Serialize};
3pub use serde_json::Value;
4
5pub type ListDocuments = Vec<ListDocument>;
6
7pub type ListItems = Vec<ListItem>;
8
9pub type ListUsers = Vec<ListUser>;
10#[derive(Serialize, Deserialize, Debug)]
11pub struct ItemLite {
12 pub website: String,
13 pub username: String,
14 pub password: String,
15}
16
17#[derive(Serialize, Deserialize, Debug)]
18pub struct GetItem {
19 pub uuid: String,
20 #[serde(alias = "templateUuid")]
21 pub template_uuid: String,
22 pub trashed: String,
23 #[serde(alias = "createdAt")]
24 #[serde(with = "date_format")]
25 pub create_at: DateTime<Local>,
26 #[serde(alias = "updatedAt")]
27 #[serde(with = "date_format")]
28 pub update_at: DateTime<Local>,
29 #[serde(alias = "changerUuid")]
30 pub changer_uuid: String,
31 #[serde(alias = "itemVersion")]
32 pub item_version: usize,
33 #[serde(alias = "vaultUuid")]
34 pub vault_uuid: String,
35 pub details: Value, }
37
38#[derive(Serialize, Deserialize, Debug)]
39pub struct Account {
40 pub uuid: String,
41 pub name: String,
42 #[serde(alias = "type")]
43 pub type_: String,
44 pub state: String,
45 pub avatar: String,
46 pub domain: String,
47 #[serde(alias = "attrVersion")]
48 pub attr_version: usize,
49 #[serde(alias = "createdAt")]
50 #[serde(with = "date_format")]
51 pub create_at: DateTime<Local>,
52 #[serde(alias = "baseAvatarURL")]
53 pub base_avatar_url: String,
54 #[serde(alias = "baseAttachmentURL")]
55 pub base_attachment_url: String,
56}
57
58#[derive(Serialize, Deserialize, Debug)]
59pub struct CreateDocument {
60 pub uuid: String,
61 #[serde(alias = "createdAt")]
62 #[serde(with = "date_format")]
63 pub create_at: DateTime<Local>,
64 #[serde(alias = "updatedAt")]
65 #[serde(with = "date_format")]
66 pub update_at: DateTime<Local>,
67 #[serde(alias = "vaultUuid")]
68 pub vault_uuid: String,
69}
70
71#[derive(Serialize, Deserialize, Debug)]
72pub struct ListDocument {
73 pub uuid: String,
74 #[serde(alias = "templateUuid")]
75 pub template_uuid: String,
76 #[serde(alias = "createdAt")]
77 #[serde(with = "date_format")]
78 pub create_at: DateTime<Local>,
79 #[serde(alias = "updatedAt")]
80 #[serde(with = "date_format")]
81 pub update_at: DateTime<Local>,
82 #[serde(alias = "itemVersion")]
83 pub item_version: usize,
84 #[serde(alias = "vaultUuid")]
85 pub vault_uuid: String,
86 pub overview: Value, }
88
89#[derive(Serialize, Deserialize, Debug)]
90pub struct ListUser {
91 pub uuid: String,
92 #[serde(alias = "firstName")]
93 pub first_name: String,
94 #[serde(alias = "lastName")]
95 pub last_name: String,
96 pub name: String,
97 pub email: String,
98 pub avatar: String,
99 pub state: String,
100 #[serde(alias = "type")]
101 pub type_: String,
102}
103
104#[derive(Serialize, Deserialize, Debug)]
105pub struct GetUser {
106 pub uuid: String,
107 #[serde(alias = "createdAt")]
108 #[serde(with = "date_format")]
109 pub create_at: DateTime<Local>,
110 #[serde(alias = "updatedAt")]
111 #[serde(with = "date_format")]
112 pub update_at: DateTime<Local>,
113 #[serde(alias = "lastAuthAt")]
114 #[serde(with = "date_format")]
115 pub last_auth_at: DateTime<Local>,
116 #[serde(alias = "firstName")]
117 pub first_name: String,
118 #[serde(alias = "lastName")]
119 pub last_name: String,
120 pub name: String,
121 pub email: String,
122 #[serde(alias = "attrVersion")]
123 pub attr_version: usize,
124 #[serde(alias = "keysetVersion")]
125 pub keyset_version: usize,
126 pub language: String,
127 #[serde(alias = "accountKeyFormat")]
128 pub account_key_format: String,
129 #[serde(alias = "accountKeyUuid")]
130 pub account_key_uuid: String,
131 #[serde(alias = "combinedPermissions")]
132 pub combined_permissions: usize,
133 pub avatar: String,
134 pub state: String,
135 #[serde(alias = "type")]
136 pub type_: String,
137}
138
139#[derive(Serialize, Deserialize, Debug)]
140pub struct ListItem {
141 pub uuid: String,
142 #[serde(alias = "templateUuid")]
143 pub template_uuid: String,
144 pub trashed: String,
145 #[serde(alias = "createdAt")]
146 #[serde(with = "date_format")]
147 pub create_at: DateTime<Local>,
148 #[serde(alias = "updatedAt")]
149 #[serde(with = "date_format")]
150 pub update_at: DateTime<Local>,
151 #[serde(alias = "changerUuid")]
152 pub changer_uuid: String,
153 #[serde(alias = "itemVersion")]
154 pub item_version: usize,
155 #[serde(alias = "vaultUuid")]
156 pub vault_uuid: String,
157 pub overview: Value, }
159
160#[derive(Serialize, Deserialize, Debug)]
161pub struct DeleteItem {
162 pub field: String,
163}
164
165#[derive(Serialize, Deserialize, Debug)]
166pub struct DeleteDocument {
167 pub field: String,
168}
169
170mod date_format {
173 use chrono::{DateTime, Local, TimeZone};
174 use serde::{self, Deserialize, Deserializer, Serializer};
175
176 const FORMAT: &'static str = "%Y-%m-%dT%H:%M:%S%.f%Z";
177
178 pub fn serialize<S>(date: &DateTime<Local>, serializer: S) -> Result<S::Ok, S::Error>
179 where
180 S: Serializer,
181 {
182 let s = format!("{}", date.format(FORMAT));
183 serializer.serialize_str(&s)
184 }
185
186 pub fn deserialize<'de, D>(deserializer: D) -> Result<DateTime<Local>, D::Error>
187 where
188 D: Deserializer<'de>,
189 {
190 let s = String::deserialize(deserializer)?;
191 Local
192 .datetime_from_str(&s, FORMAT)
193 .map_err(serde::de::Error::custom)
194 }
195}