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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
extern crate reproto_backend; #[macro_use] extern crate codeviz_macros; extern crate codeviz_js; #[macro_use] mod utils; mod models; mod listeners; mod js_backend; mod js_compiler; mod js_file_spec; mod js_options; pub(crate) use codeviz_js::*; pub(crate) use reproto_backend::errors::*; pub(crate) use reproto_backend::imports::*; pub(crate) use self::js_backend::*; pub(crate) use self::js_compiler::*; pub(crate) use self::js_file_spec::*; pub(crate) use self::js_options::*; pub(crate) use self::listeners::*; pub(crate) use self::models::*; pub(crate) use self::utils::*; pub(crate) const TYPE: &str = "type"; pub(crate) const EXT: &str = "js"; pub(crate) const JS_CONTEXT: &str = "js"; fn setup_module(module: &str) -> Result<Box<Listeners>> { let _module: Box<Listeners> = match module { _ => return Err(format!("No such module: {}", module).into()), }; } pub fn setup_listeners(modules: Vec<String>) -> Result<(JsOptions, Box<Listeners>)> { let mut listeners: Vec<Box<Listeners>> = Vec::new(); for module in modules { listeners.push(setup_module(module.as_str())?); } let mut options = JsOptions::new(); for listener in &listeners { listener.configure(&mut options)?; } Ok((options, Box::new(listeners))) } pub fn compile_options<'a, 'b>(out: App<'a, 'b>) -> App<'a, 'b> { out.about("Compile for JavaScript") } pub fn verify_options<'a, 'b>(out: App<'a, 'b>) -> App<'a, 'b> { out.about("Verify for JavaScript") } pub fn compile(env: Environment, opts: Options, compiler_options: CompilerOptions, _matches: &ArgMatches) -> Result<()> { let id_converter = opts.id_converter; let (options, listeners) = setup_listeners(opts.modules)?; let backend = JsBackend::new(env, options, listeners, id_converter); let compiler = backend.compiler(compiler_options)?; compiler.compile() } pub fn verify(env: Environment, opts: Options, _matches: &ArgMatches) -> Result<()> { let id_converter = opts.id_converter; let (options, listeners) = setup_listeners(opts.modules)?; let backend = JsBackend::new(env, options, listeners, id_converter); backend.verify() }