#failure #error #no-alloc #error-handling #no-std

nightly no-std u32err

A neat error type for FFI functions (where non-zero = failure)

2 releases

0.1.1 Dec 3, 2022
0.1.0 Dec 3, 2022

#910 in Embedded development

MIT license

6KB
80 lines

u32err

This crate implements the core::ops::Try trait with a thin wrapper over u32.

You may use it to implement ergonomic error handling for FFI functions that return non-zero values on failure, or as a lightweight Result.

Example

use u32err::ErrCode;
extern "C" {
    /// This is a function that does something (via FFI).
    ///
    /// It returns either a 0 on success, or a non-zero number on failure.
    /// The real FFI signature of this function returns [`u32`], but the types are compatible.
    fn returns_zero_on_success() -> ErrCode;
}

fn foo() -> ErrCode {
    unsafe {
        returns_zero_on_success()?;
    }
    ErrCode(0)
}

lib.rs:

u32err

This crate implements the core::ops::Try trait with a thin wrapper over [u32].

You may use it to implement ergonomic error handling for FFI functions that return non-zero values on failure, or as a lightweight Result.

Example

use u32err::ErrCode;
extern "C" {
    /// This is a function that does something (via FFI).
    ///
    /// It returns either a 0 on success, or a non-zero number on failure.
    /// The real FFI signature of this function returns [`u32`], but the types are compatible.
    fn returns_zero_on_success() -> ErrCode;
}

fn foo() -> ErrCode {
    unsafe {
        returns_zero_on_success()?;
    }
    ErrCode(0)
}

No runtime deps