use crate::ir::Ir;
pub mod react;
pub mod swift;
pub mod ts;
pub trait Emitter {
fn emit(&self, ir: &Ir) -> String;
}
#[derive(Clone)]
pub struct EmitOptions {
pub callable: bool,
pub core: String,
}
pub fn emitter_for(lang: &str, opts: &EmitOptions) -> Option<Box<dyn Emitter>> {
match lang {
"typescript" | "ts" => Some(Box::new(ts::TsEmitter {
callable: opts.callable,
})),
"swift" => Some(Box::new(swift::SwiftEmitter)),
"react" => Some(Box::new(react::ReactEmitter {
core: opts.core.clone(),
})),
_ => None,
}
}
pub fn cat_char(name: &str) -> char {
match name {
"zero" => 'z',
"one" => '1',
"two" => '2',
"few" => 'f',
"many" => 'm',
_ => 'o',
}
}