diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2024-11-14 09:05:38 +0100 |
|---|---|---|
| committer | Paolo Bonzini <pbonzini@redhat.com> | 2025-02-25 16:18:08 +0100 |
| commit | 8a420dd109b9e4e2244cfa32bc92829093268b3e (patch) | |
| tree | 40e9db642b552c7bb840cd7f46bda933d2e0c517 /rust/qemu-api/src/assertions.rs | |
| parent | 4cfe9edb1b1961af9cda74351f73b0abb3159b67 (diff) | |
| download | focaccia-qemu-8a420dd109b9e4e2244cfa32bc92829093268b3e.tar.gz focaccia-qemu-8a420dd109b9e4e2244cfa32bc92829093268b3e.zip | |
rust: add module to convert between success/-errno and io::Result
It is a common convention in QEMU to return a positive value in case of success, and a negated errno value in case of error. Unfortunately, using errno portably in Rust is a bit complicated; on Unix the errno values are supported natively by io::Error, but on Windows they are not; so, use the libc crate. This is a set of utility functions that are used by both chardev and block layer bindings. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'rust/qemu-api/src/assertions.rs')
| -rw-r--r-- | rust/qemu-api/src/assertions.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/rust/qemu-api/src/assertions.rs b/rust/qemu-api/src/assertions.rs index fa1a18de6f..104dec3977 100644 --- a/rust/qemu-api/src/assertions.rs +++ b/rust/qemu-api/src/assertions.rs @@ -92,3 +92,31 @@ macro_rules! assert_field_type { }; }; } + +/// Assert that an expression matches a pattern. This can also be +/// useful to compare enums that do not implement `Eq`. +/// +/// # Examples +/// +/// ``` +/// # use qemu_api::assert_match; +/// // JoinHandle does not implement `Eq`, therefore the result +/// // does not either. +/// let result: Result<std::thread::JoinHandle<()>, u32> = Err(42); +/// assert_match!(result, Err(42)); +/// ``` +#[macro_export] +macro_rules! assert_match { + ($a:expr, $b:pat) => { + assert!( + match $a { + $b => true, + _ => false, + }, + "{} = {:?} does not match {}", + stringify!($a), + $a, + stringify!($b) + ); + }; +} |