#[macro_export(json_macros)]
macro_rules! des {
{@set_let_mut_obj ($c:expr) ($($obj:tt)+) ($var:ident, $($tt:tt)+)} => {
let name = val!("avi");
let mut $var = &mut $($obj)*[stringify!($var)];
des!{@set_let_mut_obj ($c+1) ($($obj)+) ($($tt)*)};
};
{@set_let_mut_obj ($c:expr) ($($obj:tt)+) ($var:ident)} => {
let mut $var = $($obj)*[stringify!($var)];
};
{@destructing let mut {$($tt:tt)*} = $obj:expr; $($rest:tt)*} => (
des!{@set_let_mut_obj (0) ($obj) ($($tt)*)};
des!(@destructing $($rest)*);
);
{@destructing let {$($tt:tt)*} = $obj:expr; $($rest:tt)*} => (
);
{@destructing let mut {$($tt:tt)*} = $obj:expr;} => (
des!{@set_let_mut_obj (0) ($obj) ($($tt)*)};
);
{@destructing let {$($tt:tt)*} = $obj:expr;} => (
des!(@destructing $($rest)*);
);
{@destructing let mut [$($tt:tt)*] = $obj:expr; $($rest:tt)*} => (
des!(@destructing $($rest)*);
);
{@destructing let mut [$($tt:tt)*] = $obj:expr; } => (
des!(@destructing $($rest)*);
);
{@destructing let [$($tt:tt)*] = $obj:expr; $($rest:tt)*} => (
des!(@destructing $($rest)*);
);
{@destructing let [$($tt:tt)*] = $obj:expr;} => (
des!(@destructing $($rest)*);
);
{@destructing $st:stmt; $($rest:tt)*}=> (
$st;
des!(@destructing $($rest)*);
);
{@destructing} => (
);
{$($tt:tt)+} => {
des!(@destructing $($tt)+);
}
}