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#[derive(Clone, Debug, Serialize, Deserialize)]
10pub enum ShmTypeAnyField
11{
12 Int(i64),
13 UInt(u64),
14 Bool(bool),
15 String(String)
16}
17
18#[derive(Clone, Debug, Serialize, Deserialize)]
19pub enum MyEnum
20{
21 Item1, Item2
22}
23
24#[derive(Clone, Debug, Serialize, Deserialize)]
25pub struct TestStruct
26{
27 pub auto_field: ShmTypeAnyField,
28 pub auto_vec: Vec<ShmTypeAnyField>,
29 pub auto_symb: ShmTypeAnyField,
30 pub auto_enum: ShmTypeAnyField,
31}
32
33fn main()
34{
35 let curdir = std::env::current_dir().unwrap();
36
37 println!("{}", curdir.display());
38
39 let schm = init::SchemeInit::new_with_path(curdir).unwrap();
40
41 let res = schm.run_from_file("examples/scheme_use/init.shm", None).unwrap();
42
43 let resser = res.get("test_use").unwrap().clone();
44
45 let mut curdir = std::env::current_dir().unwrap();
46
47 curdir.push("examples/scheme_use/test_auto_data.shm");
48
49 let (_dynenv, dyn_res) =
51 environment::DynEnvironment::from_file(curdir, resser.clone()).unwrap();
52 let ret = serializator::Serialization::serialize(resser.clone(), dyn_res.clone()).unwrap();
57
58 let serialized = serde_json::to_string(&ret).unwrap();
59
60 let ctrl_struct =
63 TestStruct
64 {
65 auto_field: ShmTypeAnyField::UInt(4),
66 auto_vec: vec![ShmTypeAnyField::String("test".to_string()), ShmTypeAnyField::Int(34), ShmTypeAnyField::UInt(34), ShmTypeAnyField::Bool(true)],
67 auto_symb: ShmTypeAnyField::String(String::from("test1234")),
68 auto_enum: ShmTypeAnyField::String(String::from("Item1")),
69 };
70 let ctrl_struct_ser = serde_json::to_string(&ctrl_struct).unwrap();
71
72 println!("Control:\n{}\n", ctrl_struct_ser);
73
74 println!("Serialized Result:\n{}", serialized);
75
76 let deserialized: TestStruct = serde_json::from_str(&serialized).unwrap();
77
78 println!("Deserialized result: \n{:?}", deserialized);
79
80
81
82
83 if ctrl_struct_ser != serialized
84 {
85 println!("not equal");
86 }
87 else
88 {
89 println!("OK");
90 }
91
92
93 let mut rc = RustCode::new(vec![RustCodeDerives::Debug], vec![], None);
94 println!("Structures: ");
95 match resser.generate_rust_code(&mut rc)
96 {
97 Ok(_) =>
98 {
99 println!("{}", rc);
100 },
101 Err(e) =>
102 {
103 println!("{}", e);
104 }
105 }
106
107}