enumtest/
enumtest.rs

1use serde::{Serialize, Deserialize};
2
3use shm_rs::static_scheme::generator::RustCode;
4use shm_rs::static_scheme::init;
5use shm_rs::dynamic_scheme::environment;
6use shm_rs::serializator::serializator;
7use shm_rs::RustCodeDerives;
8
9
10#[derive(Serialize, Deserialize)]
11enum MyEnum
12{
13    Item1,
14    Item2
15}
16
17#[allow(non_camel_case_types)]
18#[derive(Serialize, Deserialize)]
19enum OurEnum
20{
21    HItem1, 
22
23    Item2, 
24
25    CItem,
26    Item3Test
27}
28
29#[derive(Serialize, Deserialize)]
30struct CommonLevels
31{
32    enum1: MyEnum,
33    enum2: OurEnum,
34    enum3: MyEnum,
35    enum4: Vec<OurEnum>
36}
37
38
39fn main()
40{
41    let curdir = std::env::current_dir().unwrap();
42    //curdir.push("examples/test3.shm");
43    println!("{}", curdir.display());
44   // let lex = lexer::Lexer::from_file(curdir).unwrap();
45    let schm = init::SchemeInit::new_with_path(curdir).unwrap();
46
47    let res = schm.run_from_file("examples/scheme_enum/init_enum.shm", None).unwrap();
48
49    let resser = res.get("test1").unwrap().clone();
50
51    println!("{:?}", res);
52
53    let mut rc = RustCode::new(vec![RustCodeDerives::Debug], vec![], None);
54
55    println!("Structures: ");
56    match resser.generate_rust_code(&mut rc)
57    {
58        Ok(_) => 
59        {
60            println!("{}", rc);
61        },
62        Err(e) => 
63        {
64            panic!("{}", e);
65        }
66    }
67
68    let mut curdir = std::env::current_dir().unwrap();
69    curdir.push("examples/scheme_enum/enum.shm");
70
71    let (_, dyn_res) = environment::DynEnvironment::from_file(curdir, resser.clone()).unwrap();
72
73    let ret = serializator::Serialization::serialize(resser.clone(), dyn_res.clone()).unwrap();
74
75    //println!("dynproc:\n{:?}\n", dyn_res);
76
77    let serialized = serde_json::to_string(&ret).unwrap();
78
79    println!("Result:\n{}", serialized);
80
81    let _deserialized: CommonLevels = serde_json::from_str(&serialized).unwrap();
82
83    let lvls = 
84        CommonLevels
85        {
86            enum1: MyEnum::Item1,
87            enum2: OurEnum::Item2,
88            enum3: MyEnum::Item2,
89            enum4: vec![OurEnum::HItem1, OurEnum::Item2, OurEnum::CItem],
90        };
91
92    let serialized_nat = serde_json::to_string(&lvls).unwrap();
93
94    println!("nat:{}", serialized_nat);
95    println!("ser:{}", serialized);
96
97    if serialized != serialized_nat
98    {
99        panic!("not equal");
100    }
101
102
103}
104