sos_core/events/
file.rs

1//! Event for modifications to external files.
2use super::{EventKind, LogEvent};
3use crate::{ExternalFile, ExternalFileName, SecretPath};
4
5/// File event records changes to external files
6///
7/// There is no update file event because files
8/// are content-addressable by SHA256 digest so
9/// changing a file's contents results in a
10/// delete and create.
11#[derive(Default, Debug, Clone, Eq, PartialEq)]
12pub enum FileEvent {
13    #[default]
14    #[doc(hidden)]
15    Noop,
16    /// File was created.
17    CreateFile(SecretPath, ExternalFileName),
18    /// File was moved.
19    MoveFile {
20        /// File name.
21        name: ExternalFileName,
22        /// From identifiers.
23        from: SecretPath,
24        /// Destination identifiers.
25        dest: SecretPath,
26    },
27    /// File was deleted.
28    DeleteFile(SecretPath, ExternalFileName),
29}
30
31impl From<ExternalFile> for FileEvent {
32    fn from(value: ExternalFile) -> Self {
33        let (path, name) = value.into();
34        FileEvent::CreateFile(path, name)
35    }
36}
37
38impl LogEvent for FileEvent {
39    fn event_kind(&self) -> EventKind {
40        match self {
41            Self::Noop => EventKind::Noop,
42            Self::CreateFile(_, _) => EventKind::CreateFile,
43            Self::MoveFile { .. } => EventKind::MoveFile,
44            Self::DeleteFile(_, _) => EventKind::DeleteFile,
45        }
46    }
47}