pixel-widgets 0.9.1

Component based UI library for graphical rust applications
Documentation
#[doc = include_str!("../declarative-syntax.md")]
#[macro_export]
macro_rules! view {
    { $w1:ident $({$($m1:ident: $v1:expr),* $(,)?})? $(=>$c1:tt)? $(,)? } => {
        Option::unwrap(view!{ inner $w1 $({$($m1: $v1),*})? $(=>$c1)? })
    };

    {
        inner $widget:ident
            $({$($modifier:ident: $value:expr),*})?
            $(=>{$(
                $(:for $x:pat in $i:expr =>)?
                $(:if $(let $y:pat =)? $yc:expr =>)?
                $w1:ident $({$($m1:ident: $v1:expr),*$(,)?})? $(=>$c1:tt)? $(,)?
                $(:else if $(let $z:pat =)? $zc:expr => $w2:ident $({$($m2:ident: $v2:expr),*$(,)?})? $(=>$c2:tt)? $(,)?)*
                $(:else => $w3:ident $({$($m3:ident: $v3:expr),*$(,)?})? $(=>$c3:tt)? $(,)?)?
            )+})?
    } => {
        Some($widget::default()
            $($(.extend(view!{
                inner
                $(:for $x in $i =>)?
                $(:if $(let $y =)? $yc =>)?
                $w1 $({$($m1: $v1),*})? $(=>$c1)?
                $(:else if $(let $z =)? $zc => $w2 $({$($m2:$v2),*})? $(=>$c2)?)*
                $(:else => $w3 $({$($m3:$v3),*})? $(=>$c3)?)*
            }))+)?
            $($(.$modifier($value))*)?
            .into_node()
        )
    };

    {
        inner :for $x:pat in $i:expr => $widget:ident
            $({$($modifier:ident: $value:expr),*})?
            $(=>$content:tt)?
    } => {
        $i.into_iter().flat_map(|$x| view!{ inner $widget $({$($modifier: $value),*})? $(=>$content)? })
    };
    {
        inner :if $(let $x:pat =)? $xc:expr => $w1:ident
            $({$($m1:ident: $v1:expr),*})?
            $(=>$c1:tt)?
        $(:else if $(let $y:pat =)? $yc:expr => $w2:ident
            $({($m2:ident: $v2:expr),*})?
            $(=>$c2:tt)?)*
    } => {
        if $(let $x =)? $xc {
            view!{ inner $w1 $({$($m1: $v1),*})? $(=>$c1)?}
        }
        $(else if $(let $y =)? $yc {
            view!{ inner $w2 $({$($m2: $v2),*})? $(=>$c2)?}
        })*
        else {
            None
        }
    };
    {
        inner :if $(let $x:pat =)? $xc:expr => $w1:ident
            $({$($m1:ident: $v1:expr),*})?
            $(=>$c1:tt)?
        $(:else if $(let $y:pat =)? $yc:expr => $w2:ident
            $({$($m2:ident: $v2:expr),*})?
            $(=>$c2:tt)?)*
        :else => $w3:ident
            $({$($m3:ident: $v3:expr),*})?
            $(=>$c3:tt)?
    } => {
        if $(let $x =)? $xc {
            view!{ inner $w1 $({$($m1: $v1),*})? $(=>$c1)? }
        }
        $(else if $(let $y =)? $yc {
            view!{ inner $w2 $({$($m2: $v2),*})? $(=>$c2)? }
        })*
        else {
            view!{ inner $w3 $({$($m3: $v3),*})? $(=>$c3)? }
        }
    };
}