use crate::ivt::{RuleDef, RulesByName};
use crate::util::ValidateError;
type LookupResult<'a> = Result<&'a RuleDef, ValidateError>;
pub trait LookupContext {
fn lookup_rule<'a>(&'a self, name: &str) -> LookupResult<'a>;
}
#[allow(missing_docs)]
pub struct BasicContext {
pub rules: RulesByName,
}
impl BasicContext {
pub fn new(rules: RulesByName) -> BasicContext {
BasicContext { rules }
}
}
impl LookupContext for BasicContext {
fn lookup_rule<'a>(&'a self, name: &str) -> LookupResult<'a> {
match self.rules.get(name) {
Some(rule_def) => Ok(rule_def),
None => Err(ValidateError::MissingRule(name.into())),
}
}
}
#[doc(hidden)] #[allow(missing_docs)]
pub mod tests {
use super::*;
pub struct DummyContext;
impl LookupContext for DummyContext {
fn lookup_rule<'a>(&'a self, name: &str) -> LookupResult<'a> {
Err(ValidateError::MissingRule(name.into()))
}
}
}