truthy

Crates.io Docs.rs Crates.io Build Status

Check if a value is "truthy"

Behavior

```rust // non-zero numbers are truthy 0u32.truthy() // false 0f32.truthy() // false 1u32.truthy() // true 1f32.truthy() // true

// empty strings are not truthy "".truthy() // false " ".truthy() // true

// Options are truthy if not None and their value is truthy let none: Option<()> = None; let falsyinner = Some(false); let truthyinner = Some(true); none.truthy() // false falsyinner.truthy() // false truthyinner.truthy() // true

// Results are truthy if Ok and value is truthy let falsyerr: Result<(), _> = Err(false); let truthyerr: Result<(), > = Err(true); let falsyok: Result<_, ()> = Ok(false); let truthy_ok: Result<_, ()> = Ok(true);

falsyerr.truthy() // false truthyerr.truthy() // false falsyok.truthy() // false truthyok.truthy() // true

// Empty vecs and arrays are falsy let emptyarray: [();0] = []; let emptyvec: Vec<()> = Vec::new();

emptyarray.truthy() // false emptyvec.truthy() // false

// The truthy behavior of arrays and vecs also applies to tuples from size 0 to 12 let emptytuple = (); let notemptytuple = (1, "2", '3'); emptytuple.truthy() // false notemptytuple.truthy() // true ```

truthy! macro

rust let my_bool = x.truthy() && y.truthy() || !z.truthy(); The above code can be a bit annoying, having to repeat .truthy() multiple times. The truthy! macro appends .truthy() to save you time. rust let my_bool = truthy!(x && y || !z); You can run the example with cargo run --example truthy_macro.

Limitations

The truthy! macro cannot take non-boolean expressions. The only valid tokens in truthy! are (, ), !, &&, ||, and identities. For example, the following would fail to compile. rust truthy!(Some(1).unwrap() && 0 + 1); To get around this, you would need to assign the expressions before using truthy!. rust let x = Some(1).unwrap(); let y = 0 + 1; truthy!(x && y);

Features

and-or

This crate has an and-or feature, which will provide the functions truthy_and and truthy_or to any type that implements Truthy and Sized. For example, true.truthy_and("It was truthy!") returns Some("It was truthy!"). You can run the example with cargo run --features and-or --example and_or.