use crate::error::{Result, TemplateError};
use crate::template::localized_string::LocalizedString;
use crate::template::TModel;
use std::collections::HashMap;
pub struct ResourceBundleLocalizedString {
base_name: String,
texts: HashMap<String, String>,
}
impl ResourceBundleLocalizedString {
pub fn new(base_name: &str) -> Self {
ResourceBundleLocalizedString {
base_name: base_name.to_string(),
texts: HashMap::new(),
}
}
pub fn put(&mut self, locale: &str, text: &str) {
self.texts.insert(locale.to_string(), text.to_string());
}
pub fn base_name(&self) -> &str {
&self.base_name
}
}
impl LocalizedString for ResourceBundleLocalizedString {
fn get_localized_string(&self, locale: &str) -> Result<TModel> {
let text = self.texts.get(locale).ok_or_else(|| {
TemplateError::misc(format!(
"No resource bundle entry for locale \"{locale}\" in \"{}\"",
self.base_name
))
})?;
Ok(TModel::from_scalar(text.clone()))
}
}