1use anyhow::Result;
2use zelos_trace_types::ipc;
3
4use crate::TraceMetadata;
5
6pub trait Store: Send + Sync {
7 fn metadata_as_ipc(&self) -> Result<Vec<ipc::IpcMessageWithId>>;
9
10 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}