az

Trait CheckedAs

Source
pub trait CheckedAs {
    // Required method
    fn checked_as<Dst>(self) -> Option<Dst>
       where Self: CheckedCast<Dst>;
}
Expand description

Used for checked casts.

This trait’s method returns [None] if the value does not fit.

This is a convenience trait to enable writing src.checked_as::<Dst>(). This would not work with the CheckedCast::checked_cast method because the CheckedCast trait is generic while its checked_cast method is not generic.

This trait’s method is suitable for chaining.

If there is an implementation of CheckedCast<Dst> for &Src but not for Src, and the variable src is of type Src, then src.checked_as::<Dst>() would not work and (&src).checked_as::<Dst>() is not easy to use with chaining, but src.borrow().checked_as::<Dst>() works.

§Examples

use az::CheckedAs;
use core::f32;

assert_eq!(5i32.checked_as::<u32>(), Some(5));
assert_eq!((-5i32).checked_as::<u32>(), None);
assert_eq!(17.1f32.checked_as::<u8>(), Some(17));
assert_eq!(f32::NAN.checked_as::<u8>(), None);

The following example shows how this trait can be used when CheckedCast is implemented for a reference type.

use az::{CheckedAs, CheckedCast};
use core::borrow::Borrow;
struct I(i32);
impl CheckedCast<u32> for &'_ I {
    fn checked_cast(self) -> Option<u32> { self.0.checked_cast() }
}

let r = &I(-5);
assert_eq!(r.checked_as::<u32>(), None);
let owned = I(12);
assert_eq!(owned.borrow().checked_as::<u32>(), Some(12));

Required Methods§

Source

fn checked_as<Dst>(self) -> Option<Dst>
where Self: CheckedCast<Dst>,

Casts the value.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<T> CheckedAs for T