struct_to_scheme/enum_arg/
struct2scheme.rs1
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}