make a macro that automates errno assertions
This commit is contained in:
@@ -61,3 +61,47 @@ pub unsafe fn drop_rights(fd: wasi::Fd, drop_base: wasi::Rights, drop_inheriting
|
||||
|
||||
wasi::fd_fdstat_set_rights(fd, new_base, new_inheriting).expect("dropping fd rights");
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! assert_errno {
|
||||
($s:expr, $( $i:expr ),+,) => {
|
||||
assert_errno!($s, $( $i ),+)
|
||||
};
|
||||
($s:expr, $( $i:expr ),+) => {
|
||||
let e = $s;
|
||||
{
|
||||
// Pretty printing infrastructure
|
||||
struct Alt<'a>(&'a [&'static str]);
|
||||
impl<'a> std::fmt::Display for Alt<'a> {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
let l = self.0.len();
|
||||
if l == 0 {
|
||||
unreachable!()
|
||||
} else if l == 1 {
|
||||
f.write_str(self.0[0])
|
||||
} else if l == 2 {
|
||||
f.write_str(self.0[0])?;
|
||||
f.write_str(" or ")?;
|
||||
f.write_str(self.0[1])
|
||||
} else {
|
||||
for (ix, s) in self.0.iter().enumerate() {
|
||||
if ix == l - 1 {
|
||||
f.write_str("or ")?;
|
||||
f.write_str(s)?;
|
||||
} else {
|
||||
f.write_str(s)?;
|
||||
f.write_str(", ")?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
assert!( $( e == $i || )+ false,
|
||||
"expected errno {}; got {}",
|
||||
Alt(&[ $( wasi::errno_name($i) ),+ ]),
|
||||
wasi::errno_name(e),
|
||||
)
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user