sos_core/events/
write.rs

1//! Folder write operations.
2use super::{EventKind, LogEvent};
3use crate::SecretId;
4use crate::{crypto::AeadPack, VaultCommit, VaultFlags};
5use serde::{Deserialize, Serialize};
6
7/// Write operations.
8#[derive(Default, Serialize, Deserialize, Debug, Clone, Eq, PartialEq)]
9#[serde(rename_all = "camelCase")]
10pub enum WriteEvent {
11    /// Default variant, should never be used.
12    ///
13    /// We need a variant so we can implement the Default
14    /// trait which is required for decoding.
15    #[default]
16    #[doc(hidden)]
17    Noop,
18
19    /// Event used to indicate a vault was created.
20    ///
21    /// The buffer is the initial state of the vault,
22    /// if the vault contains secrets they should be
23    /// separated using an [FolderReducer::split]() beforehand
24    /// and appended to the event log as create secret events.
25    CreateVault(#[serde(skip)] Vec<u8>),
26
27    /// Event used to indicate the vault name was set.
28    SetVaultName(String),
29
30    /// Event used to indicate the vault flags were set.
31    SetVaultFlags(VaultFlags),
32
33    /// Event used to indicate the vault meta data was set.
34    SetVaultMeta(#[serde(skip)] AeadPack),
35
36    /// Event used to indicate a secret was created.
37    CreateSecret(SecretId, #[serde(skip)] VaultCommit),
38
39    /// Event used to indicate a secret was updated.
40    UpdateSecret(SecretId, #[serde(skip)] VaultCommit),
41
42    /// Event used to indicate a secret was deleted.
43    DeleteSecret(SecretId),
44}
45
46impl LogEvent for WriteEvent {
47    fn event_kind(&self) -> EventKind {
48        match self {
49            WriteEvent::Noop => EventKind::Noop,
50            WriteEvent::CreateVault(_) => EventKind::CreateVault,
51            WriteEvent::SetVaultName(_) => EventKind::SetVaultName,
52            WriteEvent::SetVaultFlags(_) => EventKind::SetVaultFlags,
53            WriteEvent::SetVaultMeta(_) => EventKind::SetVaultMeta,
54            WriteEvent::CreateSecret(_, _) => EventKind::CreateSecret,
55            WriteEvent::UpdateSecret(_, _) => EventKind::UpdateSecret,
56            WriteEvent::DeleteSecret(_) => EventKind::DeleteSecret,
57        }
58    }
59}