pixel_widgets/
macros.rs

1#[doc = include_str!("../declarative-syntax.md")]
2#[macro_export]
3macro_rules! view {
4    { $w1:ident $({$($m1:ident: $v1:expr),* $(,)?})? $(=>$c1:tt)? $(,)? } => {
5        Option::unwrap(view!{ inner $w1 $({$($m1: $v1),*})? $(=>$c1)? })
6    };
7
8    {
9        inner $widget:ident
10            $({$($modifier:ident: $value:expr),*})?
11            $(=>{$(
12                $(:for $x:pat in $i:expr =>)?
13                $(:if $(let $y:pat =)? $yc:expr =>)?
14                $w1:ident $({$($m1:ident: $v1:expr),*$(,)?})? $(=>$c1:tt)? $(,)?
15                $(:else if $(let $z:pat =)? $zc:expr => $w2:ident $({$($m2:ident: $v2:expr),*$(,)?})? $(=>$c2:tt)? $(,)?)*
16                $(:else => $w3:ident $({$($m3:ident: $v3:expr),*$(,)?})? $(=>$c3:tt)? $(,)?)?
17            )+})?
18    } => {
19        Some($widget::default()
20            $($(.extend(view!{
21                inner
22                $(:for $x in $i =>)?
23                $(:if $(let $y =)? $yc =>)?
24                $w1 $({$($m1: $v1),*})? $(=>$c1)?
25                $(:else if $(let $z =)? $zc => $w2 $({$($m2:$v2),*})? $(=>$c2)?)*
26                $(:else => $w3 $({$($m3:$v3),*})? $(=>$c3)?)*
27            }))+)?
28            $($(.$modifier($value))*)?
29            .into_node()
30        )
31    };
32
33    {
34        inner :for $x:pat in $i:expr => $widget:ident
35            $({$($modifier:ident: $value:expr),*})?
36            $(=>$content:tt)?
37    } => {
38        $i.into_iter().flat_map(|$x| view!{ inner $widget $({$($modifier: $value),*})? $(=>$content)? })
39    };
40    {
41        inner :if $(let $x:pat =)? $xc:expr => $w1:ident
42            $({$($m1:ident: $v1:expr),*})?
43            $(=>$c1:tt)?
44        $(:else if $(let $y:pat =)? $yc:expr => $w2:ident
45            $({($m2:ident: $v2:expr),*})?
46            $(=>$c2:tt)?)*
47    } => {
48        if $(let $x =)? $xc {
49            view!{ inner $w1 $({$($m1: $v1),*})? $(=>$c1)?}
50        }
51        $(else if $(let $y =)? $yc {
52            view!{ inner $w2 $({$($m2: $v2),*})? $(=>$c2)?}
53        })*
54        else {
55            None
56        }
57    };
58    {
59        inner :if $(let $x:pat =)? $xc:expr => $w1:ident
60            $({$($m1:ident: $v1:expr),*})?
61            $(=>$c1:tt)?
62        $(:else if $(let $y:pat =)? $yc:expr => $w2:ident
63            $({$($m2:ident: $v2:expr),*})?
64            $(=>$c2:tt)?)*
65        :else => $w3:ident
66            $({$($m3:ident: $v3:expr),*})?
67            $(=>$c3:tt)?
68    } => {
69        if $(let $x =)? $xc {
70            view!{ inner $w1 $({$($m1: $v1),*})? $(=>$c1)? }
71        }
72        $(else if $(let $y =)? $yc {
73            view!{ inner $w2 $({$($m2: $v2),*})? $(=>$c2)? }
74        })*
75        else {
76            view!{ inner $w3 $({$($m3: $v3),*})? $(=>$c3)? }
77        }
78    };
79}