use super::BoxedFunction;
use crate::{Error, Result};
use std::collections::HashMap;
#[derive(Default)]
pub struct UserFunctions {
functions: HashMap<&'static str, BoxedFunction>,
}
impl UserFunctions {
pub fn get(&self, name: &str) -> Result<&BoxedFunction> {
self.functions
.get(name)
.ok_or_else(|| Error::UnknownUserFunction(name.to_owned()))
}
pub fn add_function(&mut self, function: BoxedFunction) {
self.functions.insert(function.name(), function);
}
pub fn add_functions<I: IntoIterator<Item = BoxedFunction>>(&mut self, functions: I) {
for function in functions {
self.add_function(function);
}
}
pub fn merge(&mut self, functions: UserFunctions) -> &mut Self {
self.functions.extend(functions.functions.into_iter());
self
}
}