use lang::Lang;
use error::{Result, Error};
use macrogen;
use extractor::Extractor;
use std::fs::File;
use std::path::Path;
use std::io::Write;
#[derive(Debug, Clone)]
pub struct Localizer<'a> {
langs: Vec<Lang>,
extractor: &'a Extractor,
}
impl<'a> Localizer<'a> {
pub fn new(extractor: &'a Extractor) -> Localizer<'a> {
Localizer {
langs: vec!(),
extractor: extractor,
}
}
pub fn add_lang<S: Into<String>>(&mut self, lang: S, s: &str) -> Result<()> {
let lang = Lang::new_from_str(lang, s)?;
self.langs.push(lang);
Ok(())
}
pub fn generate_macro_file(mut self) -> String {
macrogen::generate_macro_file(&mut self.langs, self.extractor)
}
pub fn write_macro_file<P:AsRef<Path>>(self, file: P) -> Result<()> {
let mut f = File::create(file.as_ref())
.map_err(|e| Error::new(format!("Could not create file {file}: {error}",
file = file.as_ref().display(),
error = e)))?;
let content = self.generate_macro_file();
f.write_all(content.as_bytes())
.map_err(|e| Error::new(format!("Could not write to file {file}: {error}",
file = file.as_ref().display(),
error = e)))?;
Ok(())
}
}