diff options
Diffstat (limited to 'headers/src/macros.rs')
-rw-r--r-- | headers/src/macros.rs | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/headers/src/macros.rs b/headers/src/macros.rs new file mode 100644 index 0000000..28dc2c9 --- /dev/null +++ b/headers/src/macros.rs @@ -0,0 +1,80 @@ +macro_rules! sep_for { + ($var:ident in $iter:expr; sep $sep:block; $($rem:tt)* ) => {{ + let mut first = true; + for $var in $iter { + if first { first = false; } + else { + $sep + } + $( $rem )* + } + }} +} + + +macro_rules! deref0 { + (+mut $name:ident => $tp:ty) => ( + deref0!{-mut $name => $tp } + impl ::std::ops::DerefMut for $name { + fn deref_mut( &mut self ) -> &mut Self::Target { + &mut self.0 + } + } + ); + (-mut $name:ident => $tp:ty) => ( + impl ::std::ops::Deref for $name { + type Target = $tp; + fn deref( &self ) -> &Self::Target { + &self.0 + } + } + ); +} + + +#[cfg(test)] +macro_rules! assert_ok { + ($val:expr) => ({ + match $val { + Ok( res ) => res, + Err( err ) => panic!( "expected Ok(..) got Err({:?})", err) + } + }); + ($val:expr, $ctx:expr) => ({ + match $val { + Ok( res ) => res, + Err( err ) => panic!( "expected Ok(..) got Err({:?}) [ctx: {:?}]", err, $ctx) + } + }); +} + +#[cfg(test)] +macro_rules! assert_err { + ($val:expr) => ({ + match $val { + Ok( val ) => panic!( "expected Err(..) got Ok({:?})", val), + Err( err ) => err, + } + }); + ($val:expr, $ctx:expr) => ({ + match $val { + Ok( val ) => panic!( "expected Err(..) got Ok({:?}) [ctx: {:?}]", val, $ctx), + Err( err ) => err, + } + }); +} + +#[cfg(test)] +macro_rules! test { + ($name:ident $code:block) => ( + #[test] + fn $name() { + fn inner() -> Result<(), ::failure::Error> { + $code; + #[allow(unreachable_code)] + Ok(()) + } + inner().unwrap(); + } + ); +}
\ No newline at end of file |