Similar to the automatic implicit conversion to boolean values
in weakly typed languages
| type |
impl |
| float |
self is not 0.0 / NaN |
| integer |
self != 0 |
| reference / smart pointer |
inner value impl |
| raw pointer |
!self.is_null |
| Option |
self.is_some |
| Result |
self.is_ok |
| Poll |
self.is_ready |
| str / slice / array |
!self.is_empty |
| collections |
!self.is_empty |
| unit |
false |
| bool |
self |
| fn / tuple / char |
true |
Examples
use weak_true::weak_true;
#[weak_true]
fn main() {
let mut a = vec![-1, 0, 1, 2];
let mut b = vec![4, 3];
while a && a[a.len()-1] {
b.push(a.pop().unwrap());
}
assert_eq!(a, vec![-1, 0]);
assert_eq!(b, vec![4, 3, 2, 1]);
}
use weak_true::WeakTrue;
assert!("c".weak_true());
assert!('c'.weak_true());
assert!('\0'.weak_true());
assert!([0].weak_true());
assert!((&0 as *const i32).weak_true());
assert!(Some(0).weak_true());
assert!(f64::NAN.weak_false());
assert!(0.0.weak_false());
assert!(0.weak_false());
assert!("".weak_false());
assert!([0; 0].weak_false());
assert_eq!(1.weak_then(|| "ok"), Some("ok"));
assert_eq!(0.weak_then(|| "ok"), None);