1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//! Event for operations at the account level.
use super::{EventKind, LogEvent};
use crate::VaultId;
use serde::{Deserialize, Serialize};
/// Events generated in the context of an account.
#[derive(Default, Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum AccountEvent {
#[default]
#[doc(hidden)]
Noop,
/// Account was renamed.
RenameAccount(String),
/// Identity folder was updated.
///
/// This event happens when a the identity folder
/// cipher changed, the account password changed
/// or if the identity folder was compacted.
///
/// This event is destructive as it re-writes
/// the folder event log.
///
/// Buffer is a vault.
UpdateIdentity(#[serde(skip)] Vec<u8>),
/// Create folder.
///
/// Buffer is a head-only vault.
CreateFolder(VaultId, #[serde(skip)] Vec<u8>),
/// Rename a folder.
RenameFolder(VaultId, String),
/// Folder was updated.
///
/// This event happens when a folder is imported and
/// overwrites an existing folder.
///
/// This event is destructive as it re-writes
/// the folder event log.
///
/// Buffer is a vault.
UpdateFolder(VaultId, #[serde(skip)] Vec<u8>),
/// Folder events were compacted.
///
/// This event is destructive as it re-writes
/// the folder event log.
///
/// Buffer is a vault.
CompactFolder(VaultId, #[serde(skip)] Vec<u8>),
/// Change folder password.
///
/// This event is destructive as it re-writes
/// the folder event log.
///
/// Buffer is a vault.
ChangeFolderPassword(VaultId, #[serde(skip)] Vec<u8>),
/// Delete folder.
DeleteFolder(VaultId),
}
impl AccountEvent {
/// Folder identifier for the event.
pub fn folder_id(&self) -> Option<VaultId> {
match self {
AccountEvent::RenameAccount(_) => None,
AccountEvent::UpdateIdentity(_) => None,
AccountEvent::CreateFolder(vault_id, _)
| AccountEvent::UpdateFolder(vault_id, _)
| AccountEvent::CompactFolder(vault_id, _)
| AccountEvent::ChangeFolderPassword(vault_id, _) => {
Some(*vault_id)
}
AccountEvent::RenameFolder(vault_id, _) => Some(*vault_id),
AccountEvent::DeleteFolder(vault_id) => Some(*vault_id),
AccountEvent::Noop => None,
}
}
}
impl LogEvent for AccountEvent {
fn event_kind(&self) -> EventKind {
match self {
Self::Noop => EventKind::Noop,
Self::RenameAccount(_) => EventKind::RenameAccount,
Self::UpdateIdentity(_) => EventKind::UpdateIdentity,
Self::CreateFolder(_, _) => EventKind::CreateVault,
Self::RenameFolder(_, _) => EventKind::SetVaultName,
Self::CompactFolder(_, _) => EventKind::CompactVault,
Self::UpdateFolder(_, _) => EventKind::UpdateVault,
Self::ChangeFolderPassword(_, _) => EventKind::ChangePassword,
Self::DeleteFolder(_) => EventKind::DeleteVault,
}
}
}