use super::AccountEvent;
use super::{EventKind, LogEvent, ReadEvent, WriteEvent};
use crate::{AccountId, Error, Result, VaultId};
#[cfg(feature = "files")]
use super::FileEvent;
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum Event {
CreateAccount(AccountId),
Account(AccountEvent),
Folder(AccountEvent, WriteEvent),
#[cfg(feature = "files")]
File(FileEvent),
Read(VaultId, ReadEvent),
Write(VaultId, WriteEvent),
MoveSecret(ReadEvent, WriteEvent, WriteEvent),
DeleteAccount(AccountId),
}
impl Event {
pub fn event_kind(&self) -> EventKind {
match self {
Self::CreateAccount(_) => EventKind::CreateAccount,
Self::Account(event) => event.event_kind(),
Self::Folder(event, _) => event.event_kind(),
#[cfg(feature = "files")]
Self::File(event) => event.event_kind(),
Self::Read(_, event) => event.event_kind(),
Self::Write(_, event) => event.event_kind(),
Self::MoveSecret(_, _, _) => EventKind::MoveSecret,
Self::DeleteAccount(_) => EventKind::DeleteAccount,
}
}
}
impl From<(VaultId, WriteEvent)> for Event {
fn from(value: (VaultId, WriteEvent)) -> Self {
Self::Write(value.0, value.1)
}
}
impl TryFrom<Event> for (VaultId, WriteEvent) {
type Error = Error;
fn try_from(value: Event) -> Result<Self> {
match value {
Event::Write(vault_id, event) => Ok((vault_id, event)),
_ => panic!("not a write event"),
}
}
}