2 stable releases

1.1.0 Aug 10, 2020
1.0.0 Aug 6, 2020
0.0.1 Aug 6, 2020

#1014 in Rust patterns

Download history 12/week @ 2022-08-12 10/week @ 2022-08-19 7/week @ 2022-08-26 13/week @ 2022-09-02 19/week @ 2022-09-09 9/week @ 2022-09-16 7/week @ 2022-09-23 21/week @ 2022-09-30 17/week @ 2022-10-07 3/week @ 2022-10-14 8/week @ 2022-10-21 18/week @ 2022-10-28 21/week @ 2022-11-04 14/week @ 2022-11-11 14/week @ 2022-11-18 6/week @ 2022-11-25

59 downloads per month
Used in delayed-assert

MIT/Apache

16KB
403 lines

truthy

Crates.io Docs.rs Crates.io Build Status

Check if a value is "truthy"

Behavior

// 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 falsy_inner = Some(false);
let truthy_inner = Some(true);
none.truthy() // false
falsy_inner.truthy() // false
truthy_inner.truthy() // true

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

falsy_err.truthy() // false
truthy_err.truthy() // false
falsy_ok.truthy() // false
truthy_ok.truthy() // true

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

empty_array.truthy() // false
empty_vec.truthy() // false

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

truthy! macro

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.

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.

truthy!(Some(1).unwrap() && 0 + 1);

To get around this, you would need to assign the expressions before using truthy!.

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.

Dependencies