vrl/value/
mod.rs

1//! The `value` crate contains types shared across Vector libraries to support it's use of `Value`
2//! and the closely linked `Kind` in support of progressive type checking.
3
4#![deny(warnings, clippy::pedantic)]
5#![allow(clippy::cast_possible_wrap, clippy::cast_sign_loss)]
6
7pub mod kind;
8pub mod secrets;
9
10#[allow(clippy::module_inception)]
11pub mod value;
12
13mod btreemap;
14mod keystring;
15
16pub use kind::Kind;
17
18pub use self::keystring::KeyString;
19pub use self::secrets::Secrets;
20#[allow(clippy::module_name_repetitions)]
21pub use self::value::{ObjectMap, Value, ValueRegex};
22
23/// A macro to easily generate Values
24#[macro_export]
25macro_rules! value {
26    ([]) => ({
27        $crate::value::Value::Array(vec![])
28    });
29
30    ([$($v:tt),+ $(,)?]) => ({
31        let vec: Vec<$crate::value::Value> = vec![$($crate::value!($v)),+];
32        $crate::value::Value::Array(vec)
33    });
34
35    ({}) => ({
36        $crate::value::Value::Object(::std::collections::BTreeMap::default())
37    });
38
39    ({$($($k1:literal)? $($k2:ident)?: $v:tt),+ $(,)?}) => ({
40        let map = vec![$((String::from($($k1)? $(stringify!($k2))?).into(), $crate::value!($v))),+]
41            .into_iter()
42            .collect::<::std::collections::BTreeMap<_, $crate::value::Value>>();
43
44        $crate::value::Value::Object(map)
45    });
46
47    (null) => ({
48        $crate::value::Value::Null
49    });
50
51    ($k:expr_2021) => ({
52        $crate::value::Value::from($k)
53    });
54}