struct_to_scheme/advanced2/
struct2scheme.rs

1
2
3use serde::{Serialize, Deserialize};
4
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#[derive(Clone, Debug, Serialize, Deserialize)]
12pub enum MsgType 
13{ 
14   Syslognet, 
15   Other, 
16   Syslogfile
17}
18
19
20pub const APPNAME: &'static str = "appname";
21
22pub const PORT: &'static str = "port";
23
24pub const MSG: &'static str = "msg";
25
26pub const HOST: &'static str = "host";
27
28pub const USER: &'static str = "user";
29
30pub const TIMESTAMP: &'static str = "timestamp";
31
32#[derive(Clone, Debug, Serialize, Deserialize)]
33pub enum TimeDecodeFormat 
34{ 
35   DateTimeFormat{ dt: String }, 
36   TimeRegFormat{ t: String, r: String }, 
37   TimeFormat{ t: String }
38}
39
40
41#[derive(Clone, Debug, Serialize, Deserialize)]
42pub struct JsonTagField 
43{ 
44    pub tag: String,
45    pub field_path: Vec<String>
46}
47
48
49#[derive(Clone, Debug, Serialize, Deserialize)]
50pub enum LdLogStructFormat 
51{ 
52   Text{ msg_type: MsgType, regex: String, td: TimeDecodeFormat }, 
53   Json{ td: TimeDecodeFormat, tag_field: Vec<JsonTagField> }
54}
55
56pub fn main()
57{
58
59// static
60    let mut curdir = std::env::current_dir().unwrap();
61    curdir.push("examples/struct_to_scheme/advanced2");
62    println!("{}", curdir.display());
63
64    let schm = init::SchemeInit::new_with_path(curdir).unwrap();
65    let res = schm.run_from_file("logformats.shm", None).unwrap();
66    let resser = res.get("logformats").unwrap().clone();
67
68// dynamic
69    let mut curdir = std::env::current_dir().unwrap();
70    curdir.push("examples/struct_to_scheme/advanced2/nginx.shm");
71    let (_, dynres) = 
72        environment::DynEnvironment::from_file(curdir, resser.clone()).unwrap();
73
74// serialize dyn
75    let ret = serializator::Serialization::serialize(resser.clone(), dynres.clone()).unwrap();
76
77    let serialized = serde_json::to_string(&ret).unwrap();
78
79  /*  let mut rc = RustCode::new(&["Clone", "Debug", "Serialize", "Deserialize"], &["Clone", "Debug", "Serialize", "Deserialize"]);
80    println!("Structures: ");
81    match resser.generate_rust_structs(&mut rc)
82    {
83        Ok(_) => 
84        {
85            println!("{}", rc);
86        },
87        Err(e) => 
88        {
89            println!("{}", e);
90        }
91    }
92*/
93    let n: LdLogStructFormat = serde_json::from_str(&serialized).unwrap();
94
95    let resser = from_struct(n, resser);
96    
97    if resser.is_err() == true
98    {
99        panic!("{}", resser.err().unwrap());
100    }
101    else
102    {
103        println!("{}", resser.unwrap());
104    }
105}