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}