Macro json_syntax::json

source ยท
macro_rules! json {
    (@array [$($elems:expr,)*]) => { ... };
    (@array [$($elems:expr),*]) => { ... };
    (@array [$($elems:expr,)*] null $($rest:tt)*) => { ... };
    (@array [$($elems:expr,)*] true $($rest:tt)*) => { ... };
    (@array [$($elems:expr,)*] false $($rest:tt)*) => { ... };
    (@array [$($elems:expr,)*] $lit:literal $($rest:tt)*) => { ... };
    (@array [$($elems:expr,)*] [$($array:tt)*] $($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)) => { ... };
    (@key ($key:expr)) => { ... };
    (@object [$($elems:expr,)*] ($($key:tt)+) (: null $($rest:tt)*) $copy:tt) => { ... };
    (@object [$($elems:expr,)*] ($($key:tt)+) (: true $($rest:tt)*) $copy:tt) => { ... };
    (@object [$($elems:expr,)*] ($($key:tt)+) (: false $($rest:tt)*) $copy:tt) => { ... };
    (@object [$($elems:expr,)*] ($($key:tt)+) (: $lit:literal $($rest:tt)*) $copy:tt) => { ... };
    (@object [$($elems:expr,)*] ($($key:tt)+) (: [$($array:tt)*] $($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) => { ... };
    (true) => { ... };
    (false) => { ... };
    ($lit:literal) => { ... };
    ([]) => { ... };
    ([ $($tt:tt)+ ]) => { ... };
    ({}) => { ... };
    ({ $($tt:tt)+ }) => { ... };
    ($other:expr) => { ... };
}
Expand description

Constructs a json_syntax::Value from a JSON literal.

let 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 = json!({
    "code": Value::from(code),
    "success": Value::from(code == 200),
    "payload": {
        Key::from(features[0]): Value::from(features[1])
    }
});

Trailing commas are allowed inside both arrays and objects.

let value = json!([
    "notice",
    "the",
    "trailing",
    "comma -->",
]);