Skip to main content

kmp_application/memory/
write_clocks.rs

1use super::{MemoryData, WriteClockCoverage};
2
3/// Clocks in one canonical command, not the latest state of its memory refs.
4#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
5pub struct WriteClocks {
6    #[serde(default, skip_serializing_if = "Option::is_none")]
7    pub relations: Option<super::WriteRelationClocks>,
8    pub entries: usize,
9    pub occurred: WriteClockCoverage,
10    pub observed: WriteClockCoverage,
11    pub ingested: WriteClockCoverage,
12    pub valid_from: WriteClockCoverage,
13    pub valid_until: WriteClockCoverage,
14}
15
16impl WriteClocks {
17    pub(super) fn for_memory(memory: &MemoryData) -> Self {
18        Self {
19            relations: Some(super::WriteRelationClocks::for_memory(memory)),
20            entries: memory.entries.len(),
21            occurred: WriteClockCoverage::for_memory(memory, |c| c.occurred_at.as_deref()),
22            observed: WriteClockCoverage::for_memory(memory, |c| c.observed_at.as_deref()),
23            ingested: WriteClockCoverage::for_memory(memory, |c| c.ingested_at.as_deref()),
24            valid_from: WriteClockCoverage::for_memory(memory, |c| c.valid_from.as_deref()),
25            valid_until: WriteClockCoverage::for_memory(memory, |c| c.valid_until.as_deref()),
26        }
27    }
28}