onepassword_cli/
output.rs

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, // this field is a serde_json::Value because its content would change depend on the queried item.
36}
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, // this field is a serde_json::Value because its content would change depend on the queried item.
87}
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, // this field is a serde_json::Value because its content would change depend on the queried item.
158}
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
170//this mod helped to deserialize json string to chrono::DateTime.
171//And it was copied from StackOverflow!
172mod 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}