use std::collections::BTreeMap;
use crate::Diagnostic;
use crate::Error;
use crate::kv::Key;
use crate::kv::Value;
use crate::kv::Visitor;
#[derive(Default, Debug, Clone)]
#[non_exhaustive]
pub struct StaticDiagnostic {
kvs: BTreeMap<String, String>,
}
impl StaticDiagnostic {
pub fn new(kvs: BTreeMap<String, String>) -> Self {
Self { kvs }
}
pub fn insert<K, V>(&mut self, key: K, value: V)
where
K: Into<String>,
V: Into<String>,
{
self.kvs.insert(key.into(), value.into());
}
pub fn remove(&mut self, key: &str) {
self.kvs.remove(key);
}
}
fn do_visit(d: &StaticDiagnostic, visitor: &mut dyn Visitor) -> Result<(), Error> {
for (key, value) in d.kvs.iter() {
let key = Key::new_ref(key.as_str());
let value = Value::from(value);
visitor.visit(key, value)?;
}
Ok(())
}
impl Diagnostic for StaticDiagnostic {
fn visit(&self, visitor: &mut dyn Visitor) -> Result<(), Error> {
do_visit(self, visitor)
}
}
impl Diagnostic for &'static StaticDiagnostic {
fn visit(&self, visitor: &mut dyn Visitor) -> Result<(), Error> {
do_visit(self, visitor)
}
}