Skip to main content

kmp_application/memory/
write_relation_clocks.rs

1use super::MemoryData;
2
3/// Coverage of semantic relations in the accepted command, not their endpoints.
4#[derive(Debug, Clone, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
5pub struct WriteRelationClocks {
6    pub relations: usize,
7    pub occurred: usize,
8    pub observed: usize,
9    pub ingested: usize,
10    pub valid_from: usize,
11    pub valid_until: usize,
12}
13
14impl WriteRelationClocks {
15    pub(super) fn for_memory(memory: &MemoryData) -> Self {
16        let mut coverage = Self::default();
17        for relation in &memory.relations {
18            if relation.semantic_class == "structural" {
19                continue;
20            }
21            coverage.relations += 1;
22            if let Some(clocks) = &relation.clocks {
23                coverage.occurred += usize::from(clocks.occurred_at.is_some());
24                coverage.observed += usize::from(clocks.observed_at.is_some());
25                coverage.ingested += usize::from(clocks.ingested_at.is_some());
26                coverage.valid_from += usize::from(clocks.valid_from.is_some());
27                coverage.valid_until += usize::from(clocks.valid_until.is_some());
28            }
29        }
30        coverage
31    }
32}