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 println!("{}", curdir.display());
44 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 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