truthy
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: = None;
let falsy_inner = Some;
let truthy_inner = Some;
none.truthy // false
falsy_inner.truthy // false
truthy_inner.truthy // true
// Results are truthy if Ok and value is truthy
let falsy_err: = Err;
let truthy_err: = Err;
let falsy_ok: = Ok;
let truthy_ok: = Ok;
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: = ;
let empty_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 = ;
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!;
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!;
To get around this, you would need to assign the expressions before using truthy!
.
let x = Some.unwrap;
let y = 0 + 1;
truthy!;
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
.