struct_to_scheme/struct_proc/
struct2scheme.rs1
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
81let 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}