Skip to main content

zelos_trace/
store.rs

1use anyhow::Result;
2use zelos_trace_types::ipc;
3
4use crate::TraceMetadata;
5
6pub trait Store: Send + Sync {
7    /// Returns the metadata for this store as a vec of ipc messages
8    fn metadata_as_ipc(&self) -> Result<Vec<ipc::IpcMessageWithId>>;
9
10    /// Updates this store with an ipc message
11    fn update(&self, msg: &ipc::IpcMessageWithId) -> Result<()>;
12}
13
14pub struct MetadataOnlyStore {
15    metadata: TraceMetadata,
16}
17
18impl MetadataOnlyStore {
19    pub fn new() -> Self {
20        Self {
21            metadata: TraceMetadata::new(),
22        }
23    }
24}
25
26impl Store for MetadataOnlyStore {
27    fn metadata_as_ipc(&self) -> Result<Vec<ipc::IpcMessageWithId>> {
28        Ok(self.metadata.as_ipc())
29    }
30
31    fn update(&self, msg: &ipc::IpcMessageWithId) -> Result<()> {
32        self.metadata.update(msg);
33        Ok(())
34    }
35}
36
37impl Default for MetadataOnlyStore {
38    fn default() -> Self {
39        Self::new()
40    }
41}