Skip to main content

floria_plugin_sdk/data/expression/macros/
literal.rs

1/// Creates an [Expression](crate::data::Expression) from a bare primitive expression.
2#[macro_export]
3macro_rules! expression {
4    ( $value:expr $(,)? ) => {
5        $crate::data::Expression::from($value)
6    };
7}
8
9/// Creates a [Expression::List](crate::data::Expression::List) from a sequence of bare primitive expressions.
10#[macro_export]
11macro_rules! expression_list {
12    () => (
13        $crate::data::Expression::List(
14            $crate::data::ListResource::new(
15                $crate::data::List::default()
16            )
17        )
18    );
19
20    ( $( $value:expr ),+ $(,)? ) => (
21        $crate::data::Expression::List(
22            $crate::data::ListResource::new(
23                $crate::data::List::from(
24                    [ $( $crate::expression!( $value ) ),+ ]
25                )
26            )
27        )
28    );
29}
30
31/// Creates a [Expression::Map](crate::data::Expression::Map) from a sequence of key-value tuples.
32#[macro_export]
33macro_rules! expression_map {
34    () => (
35        $crate::data::Expression::Map(
36            $crate::data::MapResource::new(
37                $crate::data::Map::default()
38            )
39        )
40    );
41
42    ( $( ( $key:expr, $value:expr ) ),+ $(,)? ) => (
43        $crate::data::Expression::Map(
44            $crate::data::MapResource::new(
45                $crate::data::Map::from(
46                    ::std::collections::BTreeMap::from(
47                        [ $( ( $crate::expression!( $key ), $crate::expression!( $value ) ) ),+ ]
48                    )
49                )
50            )
51        )
52    );
53}
54
55/// Creates a [Vec]<[Expression](crate::data::Expression)> from a sequence of bare primitive expressions.
56#[macro_export]
57macro_rules! expression_vec {
58    ( $( $value:expr ),* $(,)? ) => (
59        vec![ $( $crate::expression!( $value ) ),* ]
60    );
61}
62
63#[allow(unused_imports)]
64pub use {expression, expression_list, expression_map, expression_vec};