#[macro_export]
macro_rules! keypath {
($type:path : [$index:expr] $($tail:tt)* ) => {
{
use $crate::IndexNavigable;
type TheVec = $type;
let path = TheVec::index_keypath_segment($index);
keypath![path $($tail)*]
}
};
($type:path : $($tail:tt)* ) => {
{
type Local = $type;
let paths = Local::keypaths();
keypath![paths $($tail)*]
}
};
($path:ident . $field:ident $($tail:tt)*) => {
{
let path = $path.fields().$field;
keypath![path $($tail)*]
}
};
($path:ident . $field:tt $($tail:tt)*) => {
{
let path = $path.$field;
keypath![path $($tail)*]
}
};
($path:ident [$index:expr] $($tail:tt)*) => {
{
let path = $path.at($index);
keypath![path $($tail)*]
}
};
($path:ident $field:ident $($tail:tt)*) => {
{
let path = $path.$field;
keypath![path $($tail)*]
}
};
($path:ident) => { $path };
}