use std::collections::BTreeMap;
use crate::eval::Value;
pub trait Resolver: Send + Sync {
fn resolve(&self, name: &str) -> Option<Value>;
}
#[derive(Debug, Clone, Default)]
pub struct EmptyResolver;
impl Resolver for EmptyResolver {
fn resolve(&self, _name: &str) -> Option<Value> {
None
}
}
#[derive(Debug, Clone, Default)]
pub struct MapResolver {
bindings: BTreeMap<String, Value>,
}
impl MapResolver {
pub fn new() -> Self {
Self::default()
}
pub fn insert(&mut self, name: impl Into<String>, value: Value) {
self.bindings.insert(name.into(), value);
}
}
impl Resolver for MapResolver {
fn resolve(&self, name: &str) -> Option<Value> {
self.bindings.get(name).cloned()
}
}