#[macro_export]
macro_rules! grid {
($([$([$([$([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?) => (
Grid::<_, 6>::from([$([$([$([$([$([$($x),*]),+]),+]),+]),+]),+])
);
($([$([$([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?) => (
Grid::<_, 5>::from([$([$([$([$([$($x),*]),+]),+]),+]),+])
);
($([$([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?) => (
Grid::<_, 4>::from([$([$([$([$($x),*]),+]),+]),+])
);
($([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?) => (
Grid::<_, 3>::from([$([$([$($x),*]),+]),+])
);
($([$($x:expr),* $(,)?]),+ $(,)?) => (
Grid::<_, 2>::from([$([$($x),*]),+])
);
($($x:expr),* $(,)?) => (
Grid::<_, 1>::from([$($x),*])
);
([[[[[$elem:expr; $i:expr]; $j:expr]; $k:expr]; $l:expr]; $m:expr]; $n:expr) => (
Grid::<_, 6>::from_elem([$i, $j, $k, $l, $m, $n], $elem)
);
([[[[$elem:expr; $i:expr]; $j:expr]; $k:expr]; $l:expr]; $m:expr) => (
Grid::<_, 5>::from_elem([$i, $j, $k, $l, $m], $elem)
);
([[[$elem:expr; $i:expr]; $j:expr]; $k:expr]; $l:expr) => (
Grid::<_, 4>::from_elem([$i, $j, $k, $l], $elem)
);
([[$elem:expr; $i:expr]; $j:expr]; $k:expr) => (
Grid::<_, 3>::from_elem([$i, $j, $k], $elem)
);
([$elem:expr; $i:expr]; $j:expr) => (
Grid::<_, 2>::from_elem([$i, $j], $elem)
);
($elem:expr; $i:expr) => (
Grid::<_, 1>::from_elem([$i], $elem)
);
}
#[macro_export]
macro_rules! view {
($([$([$([$([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?) => (
View::<_, 6>::from(&[$([$([$([$([$([$($x),*]),+]),+]),+]),+]),+])
);
($([$([$([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?) => (
View::<_, 5>::from(&[$([$([$([$([$($x),*]),+]),+]),+]),+])
);
($([$([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?]),+ $(,)?) => (
View::<_, 4>::from(&[$([$([$([$($x),*]),+]),+]),+])
);
($([$([$($x:expr),* $(,)?]),+ $(,)?]),+ $(,)?) => (
View::<_, 3>::from(&[$([$([$($x),*]),+]),+])
);
($([$($x:expr),* $(,)?]),+ $(,)?) => (
View::<_, 2>::from(&[$([$($x),*]),+])
);
($($x:expr),* $(,)?) => (
View::<_, 1>::from(&[$($x),*])
);
([[[[[$elem:expr; $i:expr]; $j:expr]; $k:expr]; $l:expr]; $m:expr]; $n:expr) => (
View::<_, 6>::from(&[[[[[[$elem; $i]; $j]; $k]; $l]; $m]; $n])
);
([[[[$elem:expr; $i:expr]; $j:expr]; $k:expr]; $l:expr]; $m:expr) => (
View::<_, 5>::from(&[[[[[$elem; $i]; $j]; $k]; $l]; $m])
);
([[[$elem:expr; $i:expr]; $j:expr]; $k:expr]; $l:expr) => (
View::<_, 4>::from(&[[[[$elem; $i]; $j]; $k]; $l])
);
([[$elem:expr; $i:expr]; $j:expr]; $k:expr) => (
View::<_, 3>::from(&[[[$elem; $i]; $j]; $k])
);
([$elem:expr; $i:expr]; $j:expr) => (
View::<_, 2>::from(&[[$elem; $i]; $j])
);
($elem:expr; $i:expr) => (
View::<_, 1>::from(&[$elem; $i])
);
}