struct_to_scheme/enum_arg/
struct2scheme.rs

1
2
3use serde::{Serialize, Deserialize};
4use shm_rs::Lexer;
5use shm_rs::lexer::lexer;
6use shm_rs::scheme_composer::composer::from_struct;
7use shm_rs::serializator::serializator;
8
9use shm_rs::static_scheme::init;
10use shm_rs::dynamic_scheme::environment;
11
12
13#[derive(Serialize, Deserialize)]
14enum MyEnum
15{
16    Item1,
17    Item2
18}
19
20#[allow(non_camel_case_types)]
21#[derive(Serialize, Deserialize)]
22enum OurEnum
23{
24    H_item1,
25    Item2,
26    C_item
27}
28
29#[derive(Serialize, Deserialize)]
30struct CommonLevels
31{
32    enum1: MyEnum,
33    enum2: OurEnum
34}
35
36
37pub fn main()
38{
39    let mut curdir = std::env::current_dir().unwrap(); 
40    curdir.push("examples/struct_to_scheme/enum_arg/init_enum.shm");
41    println!("{}", curdir.display());
42
43    let lex = lexer::Lexer::from_file(curdir).unwrap();
44    let schm = init::SchemeInit::new().unwrap();
45
46    let res = schm.run(&lex, None).unwrap();
47
48    let resser = res.get("test1").unwrap().clone();
49
50    println!("Static: \n{:?}\n", res);
51
52
53    let mut curdir = std::env::current_dir().unwrap();
54    curdir.push("examples/struct_to_scheme/enum_arg/enum.shm");
55
56
57    let (_, dynres) = environment::DynEnvironment::from_file(&curdir, resser.clone()).unwrap();
58
59    let ret = serializator::Serialization::serialize(resser.clone(), dynres.clone()).unwrap();
60
61    let serialized = serde_json::to_string(&ret).unwrap();
62
63
64    let n: CommonLevels = serde_json::from_str(&serialized).unwrap();
65
66    let scmp = from_struct(n, resser.clone());
67    
68    if scmp.is_err() == true
69    {
70        panic!("{}", scmp.err().unwrap());
71    }
72    else
73    {
74        let out_res = scmp.unwrap();
75        println!("{}", out_res);
76
77        let lex_out = Lexer::from_str(&out_res.to_string(), "test").unwrap();
78
79        let dyn_root = environment::DynEnvironment::new_root(resser.clone()).unwrap();
80
81        let dyn_res =
82            environment::DynEnvironment::run(lex_out, dyn_root);
83
84        if dyn_res.is_err() == true
85        {
86            println!("{}", dyn_res.err().unwrap());
87        }
88    }
89}