harmos_domain/operations/storage/
capture_file.rs1use super::IO_POLICY;
24use crate::MemorySize;
25use crate::model::storage::codec::{Code, Nested, product};
26use crate::model::storage::files::{ByteRange, CaptureConsistency, FileMetadata, FileReference, FileSource};
27use crate::operations::{ReplaySafety, Visibility};
28
29product!(CaptureFile {
34 source: Nested<FileSource> => 1,
35 range: Nested<ByteRange> => 2,
36 metadata: Nested<FileMetadata> => 3,
37 consistency: Code<CaptureConsistency> => 4,
38});
39
40crate::declare!(CaptureFile {
41 id: "storage.capture_file",
42 version: 1,
43 policy: IO_POLICY,
44 response: FileReference,
45 visibility: Visibility::Shared,
46 replay: ReplaySafety::Unknown,
47 grpc: ("harmos.storage.v1", "Storage", "CaptureFile"),
48 grant: |request: &CaptureFile| request.source.grant_scope().map(|scope| crate::plugin::Grant::of("storage.capture_file", scope)),
49});
50
51#[derive(Clone, Debug, PartialEq, Eq)]
56pub struct CaptureFile {
57 pub source: FileSource,
58 pub range: ByteRange,
59 pub metadata: FileMetadata,
60 pub consistency: CaptureConsistency,
61}
62
63impl MemorySize for CaptureFile {
70 fn memory_size(&self) -> usize {
71 std::mem::size_of::<Self>()
72 .saturating_add(self.source.memory_size().saturating_sub(std::mem::size_of_val(&self.source)))
73 .saturating_add(self.range.memory_size().saturating_sub(std::mem::size_of_val(&self.range)))
74 .saturating_add(self.metadata.memory_size().saturating_sub(std::mem::size_of_val(&self.metadata)))
75 .saturating_add(self.consistency.memory_size().saturating_sub(std::mem::size_of_val(&self.consistency)))
76 }
77}
78
79