#[macro_export]
macro_rules! view {
(col $($rest:tt)*) => { $crate::view!(@one col $($rest)*) };
(row $($rest:tt)*) => { $crate::view!(@one row $($rest)*) };
(boxed $($rest:tt)*) => { $crate::view!(@one boxed $($rest)*) };
(text $($rest:tt)*) => { $crate::view!(@one text $($rest)*) };
(spacer $($rest:tt)*) => { $crate::view!(@one spacer $($rest)*) };
(node $($rest:tt)*) => { $crate::view!(@one node $($rest)*) };
(@one col $(( $($attr:tt)* ))? { $($kids:tt)* }) => {{
let __flex = $crate::Flex::column();
let __flex = $crate::view!(@attrs __flex; $($($attr)*)?);
let __flex = $crate::view!(@kids __flex; $($kids)*);
$crate::element(__flex)
}};
(@one row $(( $($attr:tt)* ))? { $($kids:tt)* }) => {{
let __flex = $crate::Flex::row();
let __flex = $crate::view!(@attrs __flex; $($($attr)*)?);
let __flex = $crate::view!(@kids __flex; $($kids)*);
$crate::element(__flex)
}};
(@one boxed $(( $($attr:tt)* ))? { $($kids:tt)* }) => {{
let __boxed = $crate::Boxed::new($crate::view!(@one $($kids)*));
let __boxed = $crate::view!(@boxattrs __boxed; $($($attr)*)?);
$crate::element(__boxed)
}};
(@one text ( $e:expr )) => {
$crate::element($crate::Text::raw($e))
};
(@one spacer ()) => { $crate::element($crate::Spacer) };
(@one node ( $e:expr )) => { $crate::element($e) };
(@kids $b:expr; ) => { $b };
(@kids $b:expr; grow ( $n:expr ) { $($node:tt)* } $($rest:tt)*) => {
$crate::view!(@kids $b.grow($n, $crate::view!(@one $($node)*)); $($rest)*)
};
(@kids $b:expr; fixed ( $n:expr ) { $($node:tt)* } $($rest:tt)*) => {
$crate::view!(@kids $b.fixed($n, $crate::view!(@one $($node)*)); $($rest)*)
};
(@kids $b:expr; col $(( $($a:tt)* ))? { $($k:tt)* } $($rest:tt)*) => {
$crate::view!(@kids $b.auto($crate::view!(@one col $(($($a)*))? { $($k)* })); $($rest)*)
};
(@kids $b:expr; row $(( $($a:tt)* ))? { $($k:tt)* } $($rest:tt)*) => {
$crate::view!(@kids $b.auto($crate::view!(@one row $(($($a)*))? { $($k)* })); $($rest)*)
};
(@kids $b:expr; boxed $(( $($a:tt)* ))? { $($k:tt)* } $($rest:tt)*) => {
$crate::view!(@kids $b.auto($crate::view!(@one boxed $(($($a)*))? { $($k)* })); $($rest)*)
};
(@kids $b:expr; text ( $e:expr ) $($rest:tt)*) => {
$crate::view!(@kids $b.auto($crate::element($crate::Text::raw($e))); $($rest)*)
};
(@kids $b:expr; spacer () $($rest:tt)*) => {
$crate::view!(@kids $b.auto($crate::element($crate::Spacer)); $($rest)*)
};
(@kids $b:expr; node ( $e:expr ) $($rest:tt)*) => {
$crate::view!(@kids $b.auto($crate::element($e)); $($rest)*)
};
(@attrs $b:expr; ) => { $b };
(@attrs $b:expr; gap = $e:expr $(, $($rest:tt)*)?) => {
$crate::view!(@attrs $b.gap($e); $($($rest)*)?)
};
(@attrs $b:expr; padding = $e:expr $(, $($rest:tt)*)?) => {
$crate::view!(@attrs $b.padding($e); $($($rest)*)?)
};
(@attrs $b:expr; align = $e:expr $(, $($rest:tt)*)?) => {
$crate::view!(@attrs $b.align($e); $($($rest)*)?)
};
(@attrs $b:expr; justify = $e:expr $(, $($rest:tt)*)?) => {
$crate::view!(@attrs $b.justify($e); $($($rest)*)?)
};
(@attrs $b:expr; background = $e:expr $(, $($rest:tt)*)?) => {
$crate::view!(@attrs $b.background($e); $($($rest)*)?)
};
(@boxattrs $b:expr; ) => { $b };
(@boxattrs $b:expr; title = $e:expr $(, $($rest:tt)*)?) => {
$crate::view!(@boxattrs $b.title($e); $($($rest)*)?)
};
(@boxattrs $b:expr; border = $e:expr $(, $($rest:tt)*)?) => {
$crate::view!(@boxattrs $b.border($e); $($($rest)*)?)
};
(@boxattrs $b:expr; padding = $e:expr $(, $($rest:tt)*)?) => {
$crate::view!(@boxattrs $b.padding($e); $($($rest)*)?)
};
(@boxattrs $b:expr; background = $e:expr $(, $($rest:tt)*)?) => {
$crate::view!(@boxattrs $b.background($e); $($($rest)*)?)
};
}