use crate::error::Error;
use crate::file_writer;
use std::fs::File;
use std::path::Path;
pub mod ascii7;
pub mod backward_compatible;
pub mod bidi_class;
pub mod codepoints;
pub mod derived_property;
pub mod exceptions;
pub mod ucd_generator;
pub mod unicode_version;
pub struct RustCodeGen {
file: File,
generators: Vec<Box<dyn CodeGen>>,
}
impl RustCodeGen {
pub fn new<P>(filename: P) -> Result<Self, Error>
where
P: AsRef<Path>,
{
Ok(Self {
file: File::create(filename)?,
generators: Vec::new(),
})
}
pub fn add(&mut self, gen: Box<dyn CodeGen>) {
self.generators.push(gen);
}
pub fn generate_code(&mut self) -> Result<(), Error> {
file_writer::generate_file_header(&mut self.file)?;
let it = self.generators.iter_mut();
for gen in it {
gen.generate_code(&mut self.file)?;
}
Ok(())
}
}
pub trait CodeGen {
fn generate_code(&mut self, file: &mut File) -> Result<(), Error>;
}