sos_external_files/
types.rs

1//! Types for file management.
2use sos_core::events::FileEvent;
3use sos_vault::secret::Secret;
4use std::path::PathBuf;
5
6/// Meta data about an encrypted file.
7#[derive(Debug, Clone)]
8pub struct EncryptedFile {
9    /// Size of the encrypted data in bytes.
10    pub size: u64,
11    /// Sha256 digest of the encrypted buffer.
12    pub digest: Vec<u8>,
13}
14
15/// File progress operations.
16#[derive(Debug)]
17pub enum FileProgress {
18    /// File is being written.
19    Write {
20        /// File name.
21        name: String,
22    },
23    /// File is being moved.
24    Move {
25        /// File name.
26        name: String,
27    },
28    /// File is being deleted.
29    Delete {
30        /// File name.
31        name: String,
32    },
33}
34
35/// Diff of file secrets.
36#[derive(Debug)]
37pub struct FileStorageDiff<'a> {
38    /// File secrets that have been deleted.
39    pub deleted: Vec<&'a Secret>,
40    /// File secrets that have not changed.
41    pub unchanged: Vec<&'a Secret>,
42}
43
44/// Source path to a file.
45#[derive(Debug, Clone)]
46pub struct FileSource {
47    /// Path to the source file.
48    pub path: PathBuf,
49    /// Name of the file.
50    pub name: String,
51    /// Field index for attachments.
52    pub field_index: Option<usize>,
53}
54
55/// Result of encrypting an external file.
56#[derive(Debug, Clone)]
57pub struct FileStorageResult {
58    /// Source for the file.
59    pub source: FileSource,
60    /// Encrypted file data.
61    pub encrypted_file: EncryptedFile,
62}
63
64/// Wraps the file storage information and a
65/// related file event that can be persisted
66/// to an event log.
67#[derive(Debug, Clone)]
68pub enum FileMutationEvent {
69    /// File was created.
70    Create {
71        /// Information the created file.
72        result: FileStorageResult,
73        /// An event that can be persisted to an event log.
74        event: FileEvent,
75    },
76    /// File was moved.
77    Move(FileEvent),
78    /// File was deleted.
79    Delete(FileEvent),
80}