mrubyedge_cli/template/
source.rs1extern crate askama;
2
3use askama::Template;
4
5#[derive(Template)]
6#[template(path = "lib.rs.tmpl", escape = "none")]
7pub struct LibRs<'a> {
8 pub file_basename: &'a str,
9
10 pub ftypes: &'a [RustFnTemplate<'a>],
11 pub ftypes_imports: &'a [RustImportFnTemplate<'a>],
12}
13
14pub struct RustFnTemplate<'a> {
15 pub func_name: &'a str,
16 pub args_decl: &'a str,
17 pub args_let_vec: &'a str,
18 pub str_args_converter: &'a str,
19 pub rettype_decl: &'a str,
20 pub handle_retval: &'a str,
21 pub exported_helper_var: &'a str,
22}
23
24pub struct RustImportFnTemplate<'a> {
25 pub func_name: &'a str,
26 pub args_decl: &'a str,
27 pub imported_body: &'a str,
28 pub rettype_decl: &'a str,
29 pub import_helper_var: &'a str,
30}
31
32#[test]
33fn test_lib_rs_template() {
34 use crate::rbs_parser::parse;
35
36 let def = "
37def foo_bar: (Integer) -> Integer
38";
39
40 let ret = parse(def).unwrap();
41 let ftype = ret.1;
42 let ftypes = vec![RustFnTemplate {
43 func_name: &ftype[0].name,
44 args_decl: "a: i32",
45 args_let_vec: "vec![std::rc::Rc::new(RObject::RInteger(a as i64))]",
46 rettype_decl: "-> i32",
47 str_args_converter: "// do nothing",
48 handle_retval: "5471",
49 exported_helper_var: "",
50 }];
51 let imports = vec![];
52
53 let lib_rs = LibRs {
54 file_basename: "world",
55 ftypes: &ftypes,
56 ftypes_imports: &imports,
57 };
58
59 let rendered = lib_rs.render().unwrap();
60 if std::env::var("VERBOSE").is_ok() {
61 println!("{}", &rendered);
62 }
63
64 assert!(syn::parse_file(&rendered).is_ok());
65}