1use super::AccountEvent;
4use super::{EventKind, LogEvent, ReadEvent, WriteEvent};
5use crate::{AccountId, Error, Result, VaultId};
6
7#[cfg(feature = "files")]
8use super::FileEvent;
9
10#[derive(Debug, Clone, Eq, PartialEq)]
12pub enum Event {
13 CreateAccount(AccountId),
15
16 Account(AccountEvent),
18
19 Folder(AccountEvent, WriteEvent),
26
27 #[cfg(feature = "files")]
28 File(FileEvent),
30
31 Read(VaultId, ReadEvent),
33
34 Write(VaultId, WriteEvent),
36
37 MoveSecret(ReadEvent, WriteEvent, WriteEvent),
39
40 DeleteAccount(AccountId),
42}
43
44impl Event {
45 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
67impl 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}