sos_core/events/
account.rs

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