use_test/
use_test.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#[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 lex = lexer::Lexer::from_file(curdir).unwrap();
50    let (_dynenv, dyn_res) = 
51        environment::DynEnvironment::from_file(curdir, resser.clone()).unwrap();
52   // let dynenv = environment::DynEnvironment::new_root(resser.clone());
53
54    //let dyn_res = environment::DynEnvironment::run(&lex, dynenv).unwrap();
55
56    let ret = serializator::Serialization::serialize(resser.clone(), dyn_res.clone()).unwrap();
57
58    let serialized = serde_json::to_string(&ret).unwrap();
59
60        // control
61
62        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}