jst/macros/
des.rs

1// use crate::{Obj, Val};
2
3///
4/// ## Value Macro
5/// Create json::Val enum from any valid json format
6///
7/// ### examples
8// / ```
9// / #[macro_use(val, obj, array)]
10// / extern crate json;
11// /
12// / use json::{Val, Obj};
13// /
14// / let str = val!("some string");
15// / let num = val!(45);
16// / let bool = val!(true);
17// / let null = val!(null);
18// / let array = val!([
19// /     "string",
20// /     45,
21// /     null,
22// /     [{key: "val"}, undefined]
23// / ]);
24// /
25// / let json = val!({
26// /   key:"string",
27// /   num:45
28// / });
29// / ```
30///
31#[macro_export(json_macros)]
32macro_rules! des {
33    
34
35    {@set_let_mut_obj ($c:expr) ($($obj:tt)+) ($var:ident, $($tt:tt)+)} => {
36        let name = val!("avi");
37        let mut  $var = &mut $($obj)*[stringify!($var)];
38        des!{@set_let_mut_obj ($c+1) ($($obj)+) ($($tt)*)};
39    };
40
41    {@set_let_mut_obj ($c:expr) ($($obj:tt)+) ($var:ident)} => {
42        let mut $var = $($obj)*[stringify!($var)];
43    };
44
45    {@destructing let mut {$($tt:tt)*} = $obj:expr; $($rest:tt)*} => (
46        des!{@set_let_mut_obj (0) ($obj) ($($tt)*)};
47        des!(@destructing $($rest)*); 
48    );
49
50   
51
52    {@destructing let {$($tt:tt)*} = $obj:expr; $($rest:tt)*} => (
53
54        //des!(@destructing $($rest)*);
55    );
56
57    {@destructing let mut {$($tt:tt)*} = $obj:expr;} => (
58        des!{@set_let_mut_obj (0) ($obj) ($($tt)*)};
59    );
60
61    {@destructing let {$($tt:tt)*} = $obj:expr;} => (
62
63        des!(@destructing $($rest)*);
64    );
65
66    {@destructing let mut [$($tt:tt)*] = $obj:expr; $($rest:tt)*} => (
67        
68        des!(@destructing $($rest)*);
69    );
70
71    {@destructing let mut [$($tt:tt)*] = $obj:expr; } => (
72        
73        des!(@destructing $($rest)*);
74    );
75
76    {@destructing let [$($tt:tt)*] = $obj:expr; $($rest:tt)*} => (  
77        des!(@destructing $($rest)*);
78    );
79
80    {@destructing let [$($tt:tt)*] = $obj:expr;} => (  
81        des!(@destructing $($rest)*);
82    );
83
84    //the iteration end here
85    {@destructing $st:stmt; $($rest:tt)*}=> (
86        $st;
87        des!(@destructing $($rest)*);
88    );
89
90    // the iteration end here
91    {@destructing} => (
92        
93    );
94
95    // the first station
96    {$($tt:tt)+} => {
97        des!(@destructing $($tt)+);
98    }
99}