struct_to_scheme/struct_proc/
struct2scheme.rs

1
2
3use serde::{Serialize, Deserialize};
4use shm_rs::lexer::lexer;
5use shm_rs::scheme_composer::composer::from_struct;
6use shm_rs::serializator::serializator;
7
8use shm_rs::static_scheme::init;
9use shm_rs::dynamic_scheme::environment;
10
11
12pub const AUTO: u64 = 0;
13
14#[derive(Clone, Debug, Serialize, Deserialize)]
15pub struct NetMachine 
16{ 
17    pub nm_addrs: Vec<String>
18}
19
20
21#[derive(Clone, Debug, Serialize, Deserialize)]
22pub struct NetInterface 
23{ 
24    pub ni_ifalias: String,
25    pub ni_ifloc: String,
26    pub ni_addr: String,
27    pub ni_ifmtu: Option<u64>,
28    pub ni_ifaddr_mask: String
29}
30
31
32#[derive(Clone, Debug, Serialize, Deserialize)]
33pub struct NetRouteTo 
34{ 
35    pub rt_dest: String,
36    pub rt_via: Option<String>,
37    pub rt_metric: u64
38}
39
40
41#[derive(Clone, Debug, Serialize, Deserialize)]
42pub struct NetInterfaceAlias 
43{ 
44    pub if_alias: String,
45    pub if_routes_to: Vec<NetRouteTo>
46}
47
48
49#[derive(Clone, Debug, Serialize, Deserialize)]
50pub struct NetRouteTable 
51{ 
52    pub rt_title: String,
53    pub rt_tbls: Option<Vec<NetInterfaceAlias>>
54}
55
56
57#[derive(Clone, Debug, Serialize, Deserialize)]
58pub struct Network 
59{ 
60    pub net_machine: NetMachine,
61    pub net_ifs: Vec<NetInterface>,
62    pub net_rt_tbls: Vec<NetRouteTable>
63}
64
65
66pub fn main()
67{
68    let mut curdir = std::env::current_dir().unwrap();
69    curdir.push("examples/struct_to_scheme/struct_proc/structure.shm");
70    println!("{}", curdir.display());
71
72    let schm = init::SchemeInit::new_with_path("examples/struct_to_scheme/struct_proc").unwrap();
73
74    let res = schm.run_from_file("structure.shm", None).unwrap();
75
76    let resser = res.get("networking").unwrap().clone();
77
78    println!("Static: \n{:?}\n", res);
79
80/*
81    let mut rc = RustCode::new(&["Clone", "Debug", "Serialize", "Deserialize"], &["Clone", "Debug", "Serialize", "Deserialize"]);
82    println!("Structures: ");
83    match resser.generate_rust_structs(&mut rc)
84    {
85        Ok(_) => 
86        {
87            println!("{}", rc);
88        },
89        Err(e) => 
90        {
91            println!("{}", e);
92        }
93    }
94*/
95
96
97    let mut curdir = std::env::current_dir().unwrap();
98    curdir.push("examples/struct_to_scheme/struct_proc/data.shm");
99
100    let (_, dynres) = environment::DynEnvironment::from_file(&curdir, resser.clone()).unwrap();
101
102    let ret = serializator::Serialization::serialize(resser.clone(), dynres.clone()).unwrap();
103
104    let serialized = serde_json::to_string(&ret).unwrap();
105
106
107    let n: Network = serde_json::from_str(&serialized).unwrap();
108
109    let resser = from_struct(n, resser);
110    
111    if resser.is_err() == true
112    {
113        panic!("{}", resser.err().unwrap());
114    }
115    else
116    {
117        println!("{}", resser.unwrap());
118    }
119    
120}