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}