use super::{private::PrivateTraceEntry, public::PublicTraceEntry};
use std::collections::HashMap;
#[derive(Debug, Default)]
pub struct TraceStore {
entries: HashMap<String, (PublicTraceEntry, Option<PrivateTraceEntry>)>,
}
impl TraceStore {
#[must_use]
pub fn new() -> Self {
Self {
entries: HashMap::new(),
}
}
pub fn insert(&mut self, public: PublicTraceEntry, private: Option<PrivateTraceEntry>) {
self.entries.insert(public.id.clone(), (public, private));
}
#[must_use]
pub fn list_public(&self, capability_id: Option<&str>) -> Vec<&PublicTraceEntry> {
self.entries
.values()
.filter(|(pub_entry, _)| capability_id.is_none_or(|id| pub_entry.capability_id == id))
.map(|(pub_entry, _)| pub_entry)
.collect()
}
#[must_use]
pub fn get(&self, trace_id: &str) -> Option<(&PublicTraceEntry, Option<&PrivateTraceEntry>)> {
self.entries
.get(trace_id)
.map(|(pub_entry, priv_entry)| (pub_entry, priv_entry.as_ref()))
}
}