1 2 3 4 5 6 7 8 9 10 11 12 13
#[macro_export] macro_rules! chain { ($x:expr => $($func:expr),*) => { { $x$(.and_then($func))* } }; ($x:expr => $(($($func:expr),*));+) => { { None$(.or_else(|| chain!($x => $($func),*)))* } } }