use crate::error::Result;
use crate::template::utility::FnvBuildHasher;
use crate::template::{TModel, TemplateHashModel, TemplateHashModelEx};
use indexmap::IndexMap;
pub struct LegacyHashLiteral {
pairs: Vec<(String, TModel)>,
map: IndexMap<String, TModel, FnvBuildHasher>,
}
impl LegacyHashLiteral {
pub fn new(pairs: Vec<(String, TModel)>) -> Self {
let mut map = IndexMap::with_hasher(FnvBuildHasher::default());
for (k, v) in &pairs {
map.insert(k.clone(), v.clone());
}
LegacyHashLiteral { pairs, map }
}
}
impl TemplateHashModel for LegacyHashLiteral {
fn get(&self, key: &str) -> Result<Option<TModel>> {
Ok(self.map.get(key).cloned())
}
fn is_empty(&self) -> Result<bool> {
Ok(self.pairs.is_empty())
}
}
impl TemplateHashModelEx for LegacyHashLiteral {
fn size(&self) -> Result<usize> {
Ok(self.pairs.len())
}
fn keys(&self) -> Result<Vec<String>> {
Ok(self.pairs.iter().map(|(k, _)| k.clone()).collect())
}
fn entries(&self) -> Result<Vec<(String, TModel)>> {
Ok(self.pairs.clone())
}
}