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 lex = lexer::Lexer::from_file(curdir).unwrap();
73    let schm = init::SchemeInit::new().unwrap();
74
75    let res = schm.run(&lex, None).unwrap();
76
77    let resser = res.get("networking").unwrap().clone();
78
79    println!("Static: \n{:?}\n", res);
80
81/*
82    let mut rc = RustCode::new(&["Clone", "Debug", "Serialize", "Deserialize"], &["Clone", "Debug", "Serialize", "Deserialize"]);
83    println!("Structures: ");
84    match resser.generate_rust_structs(&mut rc)
85    {
86        Ok(_) => 
87        {
88            println!("{}", rc);
89        },
90        Err(e) => 
91        {
92            println!("{}", e);
93        }
94    }
95*/
96
97
98    let mut curdir = std::env::current_dir().unwrap();
99    curdir.push("examples/struct_to_scheme/struct_proc/data.shm");
100
101    let (_, dynres) = environment::DynEnvironment::from_file(&curdir, resser.clone()).unwrap();
102
103    let ret = serializator::Serialization::serialize(resser.clone(), dynres.clone()).unwrap();
104
105    let serialized = serde_json::to_string(&ret).unwrap();
106
107
108    let n: Network = serde_json::from_str(&serialized).unwrap();
109
110    let resser = from_struct(n, resser);
111    
112    if resser.is_err() == true
113    {
114        panic!("{}", resser.err().unwrap());
115    }
116    else
117    {
118        println!("{}", resser.unwrap());
119    }
120    
121}