1use crate::Error;
4use serde::{Deserialize, Serialize};
5
6use std::fmt;
7use std::str::FromStr;
8
9const NOOP: u16 = 0;
11const CREATE_ACCOUNT: u16 = 1;
13const DELETE_ACCOUNT: u16 = 2;
15const LIST_VAULTS: u16 = 3;
17const CREATE_VAULT: u16 = 4;
19const READ_VAULT: u16 = 5;
21const UPDATE_VAULT: u16 = 6;
23const DELETE_VAULT: u16 = 7;
25const GET_VAULT_NAME: u16 = 8;
27const SET_VAULT_NAME: u16 = 9;
29const SET_VAULT_META: u16 = 10;
31const CREATE_SECRET: u16 = 11;
33const READ_SECRET: u16 = 12;
35const UPDATE_SECRET: u16 = 13;
37const DELETE_SECRET: u16 = 14;
39const MOVE_SECRET: u16 = 15;
41const READ_EVENT_LOG: u16 = 16;
43const EXPORT_VAULT: u16 = 17;
45const EXPORT_BACKUP_ARCHIVE: u16 = 18;
47const IMPORT_BACKUP_ARCHIVE: u16 = 19;
49const EXPORT_UNSAFE: u16 = 20;
51const IMPORT_UNSAFE: u16 = 21;
53const EXPORT_CONTACTS: u16 = 22;
55const IMPORT_CONTACTS: u16 = 23;
57const CREATE_FILE: u16 = 24;
59const MOVE_FILE: u16 = 25;
61const DELETE_FILE: u16 = 26;
63const COMPACT_VAULT: u16 = 27;
65const CHANGE_PASSWORD: u16 = 28;
67const TRUST_DEVICE: u16 = 29;
69const REVOKE_DEVICE: u16 = 30;
71const UPDATE_IDENTITY: u16 = 31;
73const RENAME_ACCOUNT: u16 = 32;
75const SET_VAULT_FLAGS: u16 = 33;
77const DOWNLOAD_FILE: u16 = 34;
79
80#[derive(Debug, Serialize, Deserialize, Copy, Clone, Eq, PartialEq)]
83pub enum EventKind {
84 Noop,
86 CreateAccount,
88 DeleteAccount,
90 ListVaults,
92 CreateVault,
94 ReadVault,
96 UpdateVault,
98 GetVaultName,
100 SetVaultName,
102 SetVaultFlags,
104 SetVaultMeta,
106 DeleteVault,
108 CreateSecret,
110 ReadSecret,
112 UpdateSecret,
114 DeleteSecret,
116 MoveSecret,
118 ReadEventLog,
120 ExportVault,
122 ExportBackupArchive,
124 ImportBackupArchive,
126 ExportUnsafe,
128 ImportUnsafe,
130 ExportContacts,
132 ImportContacts,
134 CreateFile,
136 MoveFile,
138 DeleteFile,
140 CompactVault,
142 ChangePassword,
144 TrustDevice,
146 RevokeDevice,
148 UpdateIdentity,
150 RenameAccount,
152 DownloadFile,
154}
155
156impl Default for EventKind {
157 fn default() -> Self {
158 Self::Noop
159 }
160}
161
162impl TryFrom<u16> for EventKind {
163 type Error = Error;
164 fn try_from(value: u16) -> std::result::Result<Self, Self::Error> {
165 Ok(match value {
166 NOOP => EventKind::Noop,
167 CREATE_ACCOUNT => EventKind::CreateAccount,
168 DELETE_ACCOUNT => EventKind::DeleteAccount,
169 LIST_VAULTS => EventKind::ListVaults,
170 CREATE_VAULT => EventKind::CreateVault,
171 READ_VAULT => EventKind::ReadVault,
172 UPDATE_VAULT => EventKind::UpdateVault,
173 DELETE_VAULT => EventKind::DeleteVault,
174 GET_VAULT_NAME => EventKind::GetVaultName,
175 SET_VAULT_NAME => EventKind::SetVaultName,
176 SET_VAULT_FLAGS => EventKind::SetVaultFlags,
177 SET_VAULT_META => EventKind::SetVaultMeta,
178 CREATE_SECRET => EventKind::CreateSecret,
179 READ_SECRET => EventKind::ReadSecret,
180 UPDATE_SECRET => EventKind::UpdateSecret,
181 DELETE_SECRET => EventKind::DeleteSecret,
182 MOVE_SECRET => EventKind::MoveSecret,
183 READ_EVENT_LOG => EventKind::ReadEventLog,
184 EXPORT_VAULT => EventKind::ExportVault,
185 EXPORT_BACKUP_ARCHIVE => EventKind::ExportBackupArchive,
186 IMPORT_BACKUP_ARCHIVE => EventKind::ImportBackupArchive,
187 EXPORT_UNSAFE => EventKind::ExportUnsafe,
188 IMPORT_UNSAFE => EventKind::ImportUnsafe,
189 EXPORT_CONTACTS => EventKind::ExportContacts,
190 IMPORT_CONTACTS => EventKind::ImportContacts,
191 CREATE_FILE => EventKind::CreateFile,
192 MOVE_FILE => EventKind::MoveFile,
193 DELETE_FILE => EventKind::DeleteFile,
194 COMPACT_VAULT => EventKind::CompactVault,
195 CHANGE_PASSWORD => EventKind::ChangePassword,
196 TRUST_DEVICE => EventKind::TrustDevice,
197 REVOKE_DEVICE => EventKind::RevokeDevice,
198 UPDATE_IDENTITY => EventKind::UpdateIdentity,
199 RENAME_ACCOUNT => EventKind::RenameAccount,
200 DOWNLOAD_FILE => EventKind::DownloadFile,
201 _ => return Err(Error::UnknownEventKind(value)),
202 })
203 }
204}
205
206impl From<&EventKind> for u16 {
207 fn from(value: &EventKind) -> Self {
208 match value {
209 EventKind::Noop => NOOP,
210 EventKind::CreateAccount => CREATE_ACCOUNT,
211 EventKind::DeleteAccount => DELETE_ACCOUNT,
212 EventKind::ListVaults => LIST_VAULTS,
213 EventKind::CreateVault => CREATE_VAULT,
214 EventKind::ReadVault => READ_VAULT,
215 EventKind::UpdateVault => UPDATE_VAULT,
216 EventKind::DeleteVault => DELETE_VAULT,
217 EventKind::GetVaultName => GET_VAULT_NAME,
218 EventKind::SetVaultName => SET_VAULT_NAME,
219 EventKind::SetVaultFlags => SET_VAULT_FLAGS,
220 EventKind::SetVaultMeta => SET_VAULT_META,
221 EventKind::CreateSecret => CREATE_SECRET,
222 EventKind::ReadSecret => READ_SECRET,
223 EventKind::UpdateSecret => UPDATE_SECRET,
224 EventKind::DeleteSecret => DELETE_SECRET,
225 EventKind::MoveSecret => MOVE_SECRET,
226 EventKind::ReadEventLog => READ_EVENT_LOG,
227 EventKind::ExportVault => EXPORT_VAULT,
228 EventKind::ExportBackupArchive => EXPORT_BACKUP_ARCHIVE,
229 EventKind::ImportBackupArchive => IMPORT_BACKUP_ARCHIVE,
230 EventKind::ExportUnsafe => EXPORT_UNSAFE,
231 EventKind::ImportUnsafe => IMPORT_UNSAFE,
232 EventKind::ExportContacts => EXPORT_CONTACTS,
233 EventKind::ImportContacts => IMPORT_CONTACTS,
234 EventKind::CreateFile => CREATE_FILE,
235 EventKind::MoveFile => MOVE_FILE,
236 EventKind::DeleteFile => DELETE_FILE,
237 EventKind::CompactVault => COMPACT_VAULT,
238 EventKind::ChangePassword => CHANGE_PASSWORD,
239 EventKind::TrustDevice => TRUST_DEVICE,
240 EventKind::RevokeDevice => REVOKE_DEVICE,
241 EventKind::UpdateIdentity => UPDATE_IDENTITY,
242 EventKind::RenameAccount => RENAME_ACCOUNT,
243 EventKind::DownloadFile => DOWNLOAD_FILE,
244 }
245 }
246}
247
248impl From<EventKind> for u16 {
249 fn from(value: EventKind) -> Self {
250 (&value).into()
251 }
252}
253
254impl fmt::Display for EventKind {
255 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
256 write!(f, "{}", {
257 match self {
258 EventKind::Noop => "NOOP",
259 EventKind::CreateAccount => "CREATE_ACCOUNT",
260 EventKind::DeleteAccount => "DELETE_ACCOUNT",
261 EventKind::ListVaults => "LIST_FOLDERS",
262 EventKind::CreateVault => "CREATE_FOLDER",
263 EventKind::ReadVault => "READ_FOLDER",
264 EventKind::UpdateVault => "UPDATE_FOLDER",
265 EventKind::DeleteVault => "DELETE_FOLDER",
266 EventKind::GetVaultName => "GET_FOLDER_NAME",
267 EventKind::SetVaultName => "SET_FOLDER_NAME",
268 EventKind::SetVaultFlags => "SET_FOLDER_FLAGS",
269 EventKind::SetVaultMeta => "SET_FOLDER_META",
270 EventKind::CreateSecret => "CREATE_SECRET",
271 EventKind::ReadSecret => "READ_SECRET",
272 EventKind::UpdateSecret => "UPDATE_SECRET",
273 EventKind::DeleteSecret => "DELETE_SECRET",
274 EventKind::MoveSecret => "MOVE_SECRET",
275 EventKind::ReadEventLog => "READ_EVENT_LOG",
276 EventKind::ExportVault => "EXPORT_FOLDER",
277 EventKind::ExportBackupArchive => "EXPORT_BACKUP_ARCHIVE",
278 EventKind::ImportBackupArchive => "IMPORT_BACKUP_ARCHIVE",
279 EventKind::ExportUnsafe => "EXPORT_UNSAFE",
280 EventKind::ImportUnsafe => "IMPORT_UNSAFE",
281 EventKind::ExportContacts => "EXPORT_CONTACTS",
282 EventKind::ImportContacts => "IMPORT_CONTACTS",
283 EventKind::CreateFile => "CREATE_FILE",
284 EventKind::MoveFile => "MOVE_FILE",
285 EventKind::DeleteFile => "DELETE_FILE",
286 EventKind::CompactVault => "COMPACT_FOLDER",
287 EventKind::ChangePassword => "CHANGE_PASSWORD",
288 EventKind::TrustDevice => "TRUST_DEVICE",
289 EventKind::RevokeDevice => "REVOKE_DEVICE",
290 EventKind::UpdateIdentity => "UPDATE_IDENTITY",
291 EventKind::RenameAccount => "RENAME_ACCOUNT",
292 EventKind::DownloadFile => "DOWNLOAD_FILE",
293 }
294 })
295 }
296}
297
298impl FromStr for EventKind {
299 type Err = Error;
300
301 fn from_str(s: &str) -> Result<Self, Self::Err> {
302 match s {
303 "NOOP" => Ok(EventKind::Noop),
304 "CREATE_ACCOUNT" => Ok(EventKind::CreateAccount),
305 "DELETE_ACCOUNT" => Ok(EventKind::DeleteAccount),
306 "LIST_FOLDERS" => Ok(EventKind::ListVaults),
307 "CREATE_FOLDER" => Ok(EventKind::CreateVault),
308 "READ_FOLDER" => Ok(EventKind::ReadVault),
309 "UPDATE_FOLDER" => Ok(EventKind::UpdateVault),
310 "DELETE_FOLDER" => Ok(EventKind::DeleteVault),
311 "GET_FOLDER_NAME" => Ok(EventKind::GetVaultName),
312 "SET_FOLDER_NAME" => Ok(EventKind::SetVaultName),
313 "SET_FOLDER_FLAGS" => Ok(EventKind::SetVaultFlags),
314 "SET_FOLDER_META" => Ok(EventKind::SetVaultMeta),
315 "CREATE_SECRET" => Ok(EventKind::CreateSecret),
316 "READ_SECRET" => Ok(EventKind::ReadSecret),
317 "UPDATE_SECRET" => Ok(EventKind::UpdateSecret),
318 "DELETE_SECRET" => Ok(EventKind::DeleteSecret),
319 "MOVE_SECRET" => Ok(EventKind::MoveSecret),
320 "READ_EVENT_LOG" => Ok(EventKind::ReadEventLog),
321 "EXPORT_FOLDER" => Ok(EventKind::ExportVault),
322 "EXPORT_BACKUP_ARCHIVE" => Ok(EventKind::ExportBackupArchive),
323 "IMPORT_BACKUP_ARCHIVE" => Ok(EventKind::ImportBackupArchive),
324 "EXPORT_UNSAFE" => Ok(EventKind::ExportUnsafe),
325 "IMPORT_UNSAFE" => Ok(EventKind::ImportUnsafe),
326 "EXPORT_CONTACTS" => Ok(EventKind::ExportContacts),
327 "IMPORT_CONTACTS" => Ok(EventKind::ImportContacts),
328 "CREATE_FILE" => Ok(EventKind::CreateFile),
329 "MOVE_FILE" => Ok(EventKind::MoveFile),
330 "DELETE_FILE" => Ok(EventKind::DeleteFile),
331 "COMPACT_FOLDER" => Ok(EventKind::CompactVault),
332 "CHANGE_PASSWORD" => Ok(EventKind::ChangePassword),
333 "TRUST_DEVICE" => Ok(EventKind::TrustDevice),
334 "REVOKE_DEVICE" => Ok(EventKind::RevokeDevice),
335 "UPDATE_IDENTITY" => Ok(EventKind::UpdateIdentity),
336 "RENAME_ACCOUNT" => Ok(EventKind::RenameAccount),
337 "DOWNLOAD_FILE" => Ok(EventKind::DownloadFile),
338 _ => Err(Error::UnknownEventType(s.to_string())),
339 }
340 }
341}