[−][src]Crate eh
Convert values to bool
, kind of like C, eh?
Eh
roughly follows the implicit conversion rules for C to _Bool
or C++ to bool
, but Rust requires an explicit conversion. Integer
0
, floating-point 0.0
, and null pointers are false
, and all other
values are true
.
As a Rust-specific extension, this is also implemented for Option<T>
and
Result<T, E>
. It returns true
when the ?
operator would unwrap a T
value, and false
when ?
would cause an early return.
Examples
Boolean values just return themselves.
use eh::Eh; assert!(true.eh()); assert!(true.eh().eh()); assert!(!(false.eh()));
Integers are true
for all non-zero values.
use eh::Eh; use std::i32; assert!(1.eh()); assert!((-1).eh()); assert!(i32::MIN.eh()); assert!(i32::MAX.eh()); assert!(!(0.eh()));
Wrapping integers follow the same rules.
use eh::Eh; use std::num::Wrapping; assert!(Wrapping(1).eh()); assert!(!(Wrapping(0).eh()));
Floats are also true
for all non-zero values -- including NaN!
use eh::Eh; use std::f64; assert!(1.0.eh()); assert!((-1.0).eh()); assert!(f64::EPSILON.eh()); assert!(f64::INFINITY.eh()); assert!(f64::NAN.eh()); assert!(!(0.0.eh())); assert!(!(-0.0).eh());
Raw pointers are true
for any non-null value, without dereferencing.
use eh::Eh; use std::ptr; assert!((&0 as *const i32).eh()); assert!((&mut 0 as *mut i32).eh()); assert!(ptr::NonNull::<i32>::dangling().as_ptr().eh()); assert!(!ptr::null::<i32>().eh()); assert!(!ptr::null_mut::<i32>().eh());
Options are true
for any Some
value, and false
for None
.
use eh::Eh; assert!(Some(0).eh()); assert!(Some(1).eh()); assert!(!None::<i32>.eh());
Results are true
for any Ok
value, and false
for any Err
value.
use eh::Eh; assert!(Ok::<i32, i32>(0).eh()); assert!(Ok::<i32, i32>(1).eh()); assert!(!Err::<i32, i32>(0).eh()); assert!(!Err::<i32, i32>(1).eh());
Exclusions
Eh
does not implement further boolean conversions of other languages,
especially since they're not universal. For example:
- JavaScript converts NaN to
false
, different than C and C++ (andeh
). - JavaScript converts empty
[]
and{}
totrue
, but in Python they'refalse
. - Many languages convert empty strings to
false
and non-empty strings totrue
, but"0"
is alsofalse
in Perl and PHP.
About
The name is a play on the Canadian "eh", turning a declarative sentence into a question.
Traits
Eh | Convert values to |