Macro json_syntax::json
source · [−]macro_rules! json {
(@array [$($elems:expr,)*]) => { ... };
(@array [$($elems:expr),*]) => { ... };
(@array [$($elems:expr,)*] null @ $meta:expr $(,$($rest:tt)*)?) => { ... };
(@array [$($elems:expr,)*] null $($rest:tt)*) => { ... };
(@array [$($elems:expr,)*] true @ $meta:expr $(,$($rest:tt)*)?) => { ... };
(@array [$($elems:expr,)*] true $($rest:tt)*) => { ... };
(@array [$($elems:expr,)*] false @ $meta:expr $(,$($rest:tt)*)?) => { ... };
(@array [$($elems:expr,)*] false $($rest:tt)*) => { ... };
(@array [$($elems:expr,)*] $lit:literal @ $meta:expr $(,$($rest:tt)*)?) => { ... };
(@array [$($elems:expr,)*] $lit:literal $($rest:tt)*) => { ... };
(@array [$($elems:expr,)*] [$($array:tt)*] @ $meta:expr $(,$($rest:tt)*)?) => { ... };
(@array [$($elems:expr,)*] [$($array:tt)*] $($rest:tt)*) => { ... };
(@array [$($elems:expr,)*] {$($map:tt)*} @ $meta:expr $(,$($rest:tt)*)?) => { ... };
(@array [$($elems:expr,)*] {$($map:tt)*} $($rest:tt)*) => { ... };
(@array [$($elems:expr,)*] $next:expr, $($rest:tt)*) => { ... };
(@array [$($elems:expr,)*] $last:expr) => { ... };
(@array [$($elems:expr),*] , $($rest:tt)*) => { ... };
(@array [$($elems:expr),*] $unexpected:tt $($rest:tt)*) => { ... };
(@object [$($elems:expr,)*] () () ()) => { ... };
(@object [$($elems:expr),*] () () ()) => { ... };
(@key (($key:literal @ $meta:expr))) => { ... };
(@key ($key:literal)) => { ... };
(@key ($key:expr)) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) (: null @ $meta:expr $(,$($rest:tt)*)?) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) (: null $($rest:tt)*) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) (: true @ $meta:expr $(,$($rest:tt)*)?) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) (: true $($rest:tt)*) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) (: false @ $meta:expr $(,$($rest:tt)*)?) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) (: false $($rest:tt)*) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) (: $lit:literal @ $meta:expr $(,$($rest:tt)*)?) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) (: $lit:literal $($rest:tt)*) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) (: [$($array:tt)*] @ $meta:expr $(,$($rest:tt)*)?) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) (: [$($array:tt)*] $($rest:tt)*) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) (: {$($map:tt)*} @ $meta:expr $(,$($rest:tt)*)?) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) (: {$($map:tt)*} $($rest:tt)*) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) (: $next:expr, $($rest:tt)*) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) (: $last:expr) $copy:tt) => { ... };
(@object [$($elems:expr),*] () (, $($rest:tt)*) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) (:) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)+) () $copy:tt) => { ... };
(@object [$($elems:expr,)*] () (: $($rest:tt)*) ($colon:tt $($copy:tt)*)) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)*) (, $($rest:tt)*) ($comma:tt $($copy:tt)*)) => { ... };
(@object [$($elems:expr,)*] () (($key:expr) : $($rest:tt)*) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)*) (: $($unexpected:tt)+) $copy:tt) => { ... };
(@object [$($elems:expr,)*] ($($key:tt)*) ($tt:tt $($rest:tt)*) $copy:tt) => { ... };
(null @ $meta:expr) => { ... };
(null) => { ... };
(true @ $meta:expr) => { ... };
(true) => { ... };
(false @ $meta:expr) => { ... };
(false) => { ... };
($lit:literal @ $meta:expr) => { ... };
($lit:literal) => { ... };
([] @ $meta:expr) => { ... };
([]) => { ... };
([ $($tt:tt)+ ] @ $meta:expr) => { ... };
([ $($tt:tt)+ ]) => { ... };
({} @ $meta:expr) => { ... };
({}) => { ... };
({ $($tt:tt)+ } @ $meta:expr) => { ... };
({ $($tt:tt)+ }) => { ... };
($other:expr) => { ... };
}
Expand description
Constructs a Loc<json_syntax::Value, (), ()>
from a JSON literal.
let value: Meta<Value<()>, ()> = json!({
"code": 200,
"success": true,
"payload": {
"features": [
"json",
"syntax"
]
}
});
Variables or expressions can be interpolated into the JSON literal.
let code = 200;
let features = vec!["json", "syntax"];
let value: Meta<Value<()>, ()> = json!({
"code": Meta(Value::from(code), ()),
"success": Meta(Value::from(code == 200), ()),
"payload": {
Meta(Key::from(features[0]), ()): Meta(Value::from(features[1]), ())
}
});
Trailing commas are allowed inside both arrays and objects.
let value: Meta<Value<()>, ()> = json!([
"notice",
"the",
"trailing",
"comma -->",
]);
Metadata information can be added using the @
symbol.
let value: Meta<Value<u8>, u8> = json!({
"code": 200 @ 0,
"success": true @ 1,
"payload": {
"features": [
"json" @ 2,
"syntax" @ 3
]
}
});