#[macro_export]
macro_rules! traverse {
( $value:expr $(,)? ) => ( ::std::option::Option::<&$crate::normal::Variant>::Some(&$value) );
( $value:expr, $key:expr $(,)? ) => ( $value.into_get($key) );
( $value:expr, $key:expr, $( $next_key:expr ),+ $(,)? ) => (
match $crate::traverse!( $value, $key ) {
::std::option::Option::Some(value) => $crate::traverse!( value $( , $next_key )+ ),
::std::option::Option::None => ::std::option::Option::None,
}
);
}
#[macro_export]
macro_rules! traverse_mut {
( $value:expr $(,)? ) => ( ::std::option::Option::<&mut $crate::normal::Variant>::Some($value) );
( $value:expr, $key:expr $(,)? ) => ( $value.into_get_mut($key) );
( $value:expr, $key:expr, $( $next_key:expr ),+ $( , )? ) => (
match $crate::traverse_mut!( $value, $key ) {
::std::option::Option::Some(value) => $crate::traverse_mut!( value $( , $next_key )+ ),
::std::option::Option::None => ::std::option::Option::None,
}
);
}
#[allow(unused_imports)]
pub use {traverse, traverse_mut};