sos_core/events/
event.rs

1//! Encoding of all operations.
2
3use super::AccountEvent;
4use super::{EventKind, LogEvent, ReadEvent, WriteEvent};
5use crate::{AccountId, Error, Result, VaultId};
6
7#[cfg(feature = "files")]
8use super::FileEvent;
9
10/// Events generated when reading or writing.
11#[derive(Debug, Clone, Eq, PartialEq)]
12pub enum Event {
13    /// Create account event.
14    CreateAccount(AccountId),
15
16    /// Account changes.
17    Account(AccountEvent),
18
19    /// Combined event that encapsulates an account
20    /// event with a folder write event.
21    ///
22    /// Typically used to combine the folder creation
23    /// (which includes the secure access key) with the
24    /// create vault event which contains the vault buffer.
25    Folder(AccountEvent, WriteEvent),
26
27    #[cfg(feature = "files")]
28    /// File event.
29    File(FileEvent),
30
31    /// Read folder operations.
32    Read(VaultId, ReadEvent),
33
34    /// Write folder operations.
35    Write(VaultId, WriteEvent),
36
37    /// Move secret operation.
38    MoveSecret(ReadEvent, WriteEvent, WriteEvent),
39
40    /// Delete account event.
41    DeleteAccount(AccountId),
42}
43
44impl Event {
45    /// Get the event kind for this event.
46    pub fn event_kind(&self) -> EventKind {
47        match self {
48            Self::CreateAccount(_) => EventKind::CreateAccount,
49            Self::Account(event) => event.event_kind(),
50            Self::Folder(event, _) => event.event_kind(),
51            #[cfg(feature = "files")]
52            Self::File(event) => event.event_kind(),
53            Self::Read(_, event) => event.event_kind(),
54            Self::Write(_, event) => event.event_kind(),
55            Self::MoveSecret(_, _, _) => EventKind::MoveSecret,
56            Self::DeleteAccount(_) => EventKind::DeleteAccount,
57        }
58    }
59}
60
61impl From<(VaultId, WriteEvent)> for Event {
62    fn from(value: (VaultId, WriteEvent)) -> Self {
63        Self::Write(value.0, value.1)
64    }
65}
66
67// Convert to an owned write event.
68impl TryFrom<Event> for (VaultId, WriteEvent) {
69    type Error = Error;
70    fn try_from(value: Event) -> Result<Self> {
71        match value {
72            Event::Write(vault_id, event) => Ok((vault_id, event)),
73            _ => panic!("not a write event"),
74        }
75    }
76}