Skip to main content

strata/
macros.rs

1#[macro_export]
2macro_rules! null {
3    () => {
4        $crate::value::Value::Null
5    };
6}
7
8#[macro_export]
9macro_rules! bool {
10    ($val:expr) => {
11        $crate::value::Value::Bool($val)
12    };
13}
14
15#[macro_export]
16macro_rules! int {
17    ($val:expr) => {
18        $crate::value::Value::Int($val)
19    };
20}
21
22#[macro_export]
23macro_rules! string {
24    ($val:expr) => {
25        $crate::value::Value::String($val.to_string())
26    };
27}
28
29#[macro_export]
30macro_rules! bytes {
31    // Explicit byte array literal form: bytes!([0xde, 0xad])
32    ([$($val:expr),* $(,)?]) => {
33        $crate::value::Value::Bytes(vec![$($val as u8),*])
34    };
35    // Generic expression form: bytes!(some_expression)
36    ($val:expr) => {
37        $crate::value::Value::Bytes(($val).into())
38    };
39}
40
41#[macro_export]
42macro_rules! list {
43    // empty list![]
44    () => {
45        $crate::value::Value::List(Vec::new())
46    };
47    // list![a, b, c]
48    ($($val:expr),* $(,)?) => {{
49        $crate::value::Value::List(vec![$($val),*])
50    }};
51}
52#[macro_export]
53macro_rules! map {
54    // empty map!{}
55    () => {{
56        $crate::value::Value::Map(::std::collections::BTreeMap::new())
57    }};
58    // map!{ "k" => v, ... }
59    ($($key:literal => $val:expr),* $(,)?) => {{
60        let mut m = ::std::collections::BTreeMap::new();
61        $(
62            // last-write-wins naturally via insert overwrite
63            m.insert(($key).to_owned(), $val);
64        )*
65        $crate::value::Value::Map(m)
66    }};
67}