rassert-rs

Crates.iorassert-rs
lib.rsrassert-rs
version3.0.0
sourcesrc
created_at2022-03-30 13:50:47.657113
updated_at2022-08-27 18:13:15.786105
descriptionSimple macro for expressing Result-returning assertions.
homepagehttps://github.com/mscofield0/rassert
repositoryhttps://github.com/mscofield0/rassert
max_upload_size
id559194
size5,669
Michael Scofield (mscofield0)

documentation

README

rassert

Simple macro for expressing Result-returning assertions and notifying, hard-error assertions (useful for functions where you can't propagate an error upstream so you want to log it).

Usage

use rassert::{rassert, rassert_notify};

enum MyError {
    NotAnswerToLife,
}

struct SomeOutput;

pub fn foo(input: usize) -> Result<SomeOutput, MyError> {
    rassert!(input == 42, MyError::NotAnswerToLife);

    let output = ...;
    Ok(output)
}

pub fn bar(input: usize) {
    rassert_notify!(1 != 1, error!("Well, that's not true."));
    
    println!("Hi everyone"); // Never reached since the above rassert_notify fails and returns
}

Why

Because the alternative is rather ugly and does not obviously express that the expression is a precondition.

enum MyError {
    NotAnswerToLife,
}

struct SomeOutput;

pub fn foo(input: usize) -> Result<SomeOutput, MyError> {
    if input != 42 {
        return Err(MyError::NotAnswerToLife);
    }

    let output = ...;
    Ok(output)
}

I found myself just copy-pasting the same rassert macro over and over in my projects, so might as well put it on Cargo.

Commit count: 8

cargo fmt