harmos_domain/operations/storage/
append_file.rs1use super::POLICY;
22use crate::MemorySize;
23use crate::model::storage::codec::{Bytes, Nested, Unsigned, product};
24use crate::model::storage::{FileProducer, FileSession, MutationId};
25use crate::operations::{ReplaySafety, Visibility};
26
27product!(AppendFile {
32 mutation: Nested<MutationId> => 1,
33 session: Nested<FileSession> => 2,
34 offset: Unsigned => 3,
35 bytes: Bytes => 4,
36});
37
38crate::declare!(AppendFile {
39 id: "storage.append_file",
40 version: 1,
41 policy: POLICY,
42 response: FileProducer,
43 visibility: Visibility::Host,
44 replay: ReplaySafety::Idempotent,
45});
46
47#[derive(Clone, Debug, PartialEq, Eq)]
53pub struct AppendFile {
54 pub mutation: MutationId,
55 pub session: FileSession,
56 pub offset: u64,
57 pub bytes: Vec<u8>,
58}
59
60impl MemorySize for AppendFile {
67 fn memory_size(&self) -> usize {
68 std::mem::size_of::<Self>()
69 .saturating_add(self.mutation.memory_size().saturating_sub(std::mem::size_of_val(&self.mutation)))
70 .saturating_add(self.session.memory_size().saturating_sub(std::mem::size_of_val(&self.session)))
71 .saturating_add(self.offset.memory_size().saturating_sub(std::mem::size_of_val(&self.offset)))
72 .saturating_add(self.bytes.memory_size().saturating_sub(std::mem::size_of_val(&self.bytes)))
73 }
74}
75
76