harmos_domain/model/storage/
files.rs1pub mod codec;
13pub mod read;
14
15pub use read::{ByteRange, FileBatch, FileCompletion};
18
19use serde::{Deserialize, Serialize};
25use crate::model::storage::{StorageCursor, StoreHistory};
27use crate::{Identifier, MemorySize};
28
29#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
38#[serde(deny_unknown_fields)]
39pub struct FileMetadata {
40 pub id: Identifier,
41 pub scope: Option<Identifier>,
42 pub media_type: String,
43 pub expected_length: Option<u64>,
44 pub expected_sha256: Option<[u8; 32]>,
45}
46
47#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
48#[serde(deny_unknown_fields)]
49pub struct StagedFile {
50 pub history: StoreHistory,
51 pub id: Identifier,
52}
53
54#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
55#[serde(deny_unknown_fields)]
56pub struct FileReference {
57 pub position: StorageCursor,
58 pub metadata: FileMetadata,
59 pub length: u64,
60 pub sha256: [u8; 32],
61}
62
63#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
64#[serde(deny_unknown_fields)]
65pub struct FileSession {
66 pub history: StoreHistory,
67 pub id: Identifier,
68 pub generation: u64,
69}
70
71#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
72pub struct FileProgress {
73 pub length: u64,
74 pub phase: FilePhase,
75}
76
77#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
80#[repr(u64)]
81pub enum FilePhase {
82 Producing = 0,
83 Finished = 1,
84 Abandoned = 2,
85}
86
87impl MemorySize for FileMetadata {
92 fn memory_size(&self) -> usize {
93 std::mem::size_of::<Self>()
94 .saturating_add(self.id.memory_size().saturating_sub(std::mem::size_of::<Identifier>()))
95 .saturating_add(self.scope.memory_size().saturating_sub(std::mem::size_of::<Option<Identifier>>()))
96 .saturating_add(self.media_type.capacity())
97 }
98}
99
100impl MemorySize for FileReference {
101 fn memory_size(&self) -> usize {
102 std::mem::size_of::<Self>()
103 .saturating_add(self.position.memory_size().saturating_sub(std::mem::size_of::<StorageCursor>()))
104 .saturating_add(self.metadata.memory_size().saturating_sub(std::mem::size_of::<FileMetadata>()))
105 }
106}
107
108impl MemorySize for FileSession {
109 fn memory_size(&self) -> usize {
110 std::mem::size_of::<Self>()
111 .saturating_add(self.history.memory_size().saturating_sub(std::mem::size_of::<StoreHistory>()))
112 .saturating_add(self.id.memory_size().saturating_sub(std::mem::size_of::<Identifier>()))
113 }
114}
115
116impl MemorySize for StagedFile {
117 fn memory_size(&self) -> usize {
118 std::mem::size_of::<Self>()
119 .saturating_add(self.history.memory_size().saturating_sub(std::mem::size_of::<StoreHistory>()))
120 .saturating_add(self.id.memory_size().saturating_sub(std::mem::size_of::<Identifier>()))
121 }
122}
123
124impl MemorySize for FileProgress {
125 fn memory_size(&self) -> usize {
126 std::mem::size_of::<Self>()
127 }
128}
129
130