1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
use std::io; use crate::{Ast, Parser}; mod lang_c; mod lang_rust; #[derive(Debug, Clone, Copy)] pub enum Language { C, Rust, } #[derive(Debug)] pub(crate) struct Generator { ast: Ast, } impl Language { pub(crate) fn extension(&self) -> &str { match *self { Language::C => "h", Language::Rust => "rs", } } } impl Generator { pub(crate) fn new(input: &str) -> Self { let ast = Parser::parse(input); Self { ast } } pub(crate) fn generate<W>(&self, lang: Language, writer: &mut W) -> io::Result<()> where W: io::Write, { match lang { Language::C => self.generate_c(writer), Language::Rust => self.generate_rust(writer), } } }