Trait kas::cast::Conv

pub trait Conv<T>: Sized {
    // Required method
    fn try_conv(v: T) -> Result<Self, Error>;

    // Provided method
    fn conv(v: T) -> Self { ... }
}
Expand description

Like From, but supports fallible conversions

This trait is intented to be an extension over From, also supporting fallible conversions of numeric types. Since Rust does not yet have stable support for handling conflicting implementations (specialization or otherwise), only conversions between the most important numeric types are supported for now.

The sister-trait Cast supports “into” style usage.

Required Methods§

fn try_conv(v: T) -> Result<Self, Error>

Try converting from T to Self

This method must fail on inexact conversions.

Provided Methods§

fn conv(v: T) -> Self

Convert from T to Self

This method must return the same result as Self::try_conv where that method succeeds, but differs in the handling of errors:

  • In debug builds the method panics on error
  • Otherwise, the method may panic or may return a different value, but like with the as keyword all results must be well-defined and safe.

Default implementations use Self::try_conv and panic on error. Implementations provided by this library will panic in debug builds or if the always_assert feature flag is used, and otherwise will behave identically to the as keyword.

This mirrors the behaviour of Rust’s overflow checks on integer arithmetic in that it is a tool for diagnosing logic errors where success is expected.

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

§

impl Conv<f32> for f32

§

fn conv(x: f32) -> f32

§

fn try_conv(x: f32) -> Result<f32, Error>

§

impl Conv<f32> for f64

§

fn conv(x: f32) -> f64

§

fn try_conv(x: f32) -> Result<f64, Error>

§

impl Conv<f64> for f64

§

fn conv(x: f64) -> f64

§

fn try_conv(x: f64) -> Result<f64, Error>

§

impl Conv<i8> for f32

§

fn conv(x: i8) -> f32

§

fn try_conv(x: i8) -> Result<f32, Error>

§

impl Conv<i8> for f64

§

fn conv(x: i8) -> f64

§

fn try_conv(x: i8) -> Result<f64, Error>

§

impl Conv<i8> for i8

§

fn conv(x: i8) -> i8

§

fn try_conv(x: i8) -> Result<i8, Error>

§

impl Conv<i8> for i16

§

fn conv(x: i8) -> i16

§

fn try_conv(x: i8) -> Result<i16, Error>

§

impl Conv<i8> for i32

§

fn conv(x: i8) -> i32

§

fn try_conv(x: i8) -> Result<i32, Error>

§

impl Conv<i8> for i64

§

fn conv(x: i8) -> i64

§

fn try_conv(x: i8) -> Result<i64, Error>

§

impl Conv<i8> for i128

§

fn conv(x: i8) -> i128

§

fn try_conv(x: i8) -> Result<i128, Error>

§

impl Conv<i8> for isize

§

fn conv(x: i8) -> isize

§

fn try_conv(x: i8) -> Result<isize, Error>

§

impl Conv<i8> for u8

§

fn conv(x: i8) -> u8

§

fn try_conv(x: i8) -> Result<u8, Error>

§

impl Conv<i8> for u16

§

fn conv(x: i8) -> u16

§

fn try_conv(x: i8) -> Result<u16, Error>

§

impl Conv<i8> for u32

§

fn conv(x: i8) -> u32

§

fn try_conv(x: i8) -> Result<u32, Error>

§

impl Conv<i8> for u64

§

fn conv(x: i8) -> u64

§

fn try_conv(x: i8) -> Result<u64, Error>

§

impl Conv<i8> for u128

§

fn conv(x: i8) -> u128

§

fn try_conv(x: i8) -> Result<u128, Error>

§

impl Conv<i8> for usize

§

fn conv(x: i8) -> usize

§

fn try_conv(x: i8) -> Result<usize, Error>

§

impl Conv<i16> for f32

§

fn conv(x: i16) -> f32

§

fn try_conv(x: i16) -> Result<f32, Error>

§

impl Conv<i16> for f64

§

fn conv(x: i16) -> f64

§

fn try_conv(x: i16) -> Result<f64, Error>

§

impl Conv<i16> for i8

§

fn conv(x: i16) -> i8

§

fn try_conv(x: i16) -> Result<i8, Error>

§

impl Conv<i16> for i16

§

fn conv(x: i16) -> i16

§

fn try_conv(x: i16) -> Result<i16, Error>

§

impl Conv<i16> for i32

§

fn conv(x: i16) -> i32

§

fn try_conv(x: i16) -> Result<i32, Error>

§

impl Conv<i16> for i64

§

fn conv(x: i16) -> i64

§

fn try_conv(x: i16) -> Result<i64, Error>

§

impl Conv<i16> for i128

§

fn conv(x: i16) -> i128

§

fn try_conv(x: i16) -> Result<i128, Error>

§

impl Conv<i16> for isize

§

impl Conv<i16> for u8

§

fn conv(x: i16) -> u8

§

fn try_conv(x: i16) -> Result<u8, Error>

§

impl Conv<i16> for u16

§

fn conv(x: i16) -> u16

§

fn try_conv(x: i16) -> Result<u16, Error>

§

impl Conv<i16> for u32

§

fn conv(x: i16) -> u32

§

fn try_conv(x: i16) -> Result<u32, Error>

§

impl Conv<i16> for u64

§

fn conv(x: i16) -> u64

§

fn try_conv(x: i16) -> Result<u64, Error>

§

impl Conv<i16> for u128

§

fn conv(x: i16) -> u128

§

fn try_conv(x: i16) -> Result<u128, Error>

§

impl Conv<i16> for usize

§

impl Conv<i32> for f32

§

fn conv(x: i32) -> f32

§

fn try_conv(x: i32) -> Result<f32, Error>

§

impl Conv<i32> for f64

§

fn conv(x: i32) -> f64

§

fn try_conv(x: i32) -> Result<f64, Error>

§

impl Conv<i32> for i8

§

fn conv(x: i32) -> i8

§

fn try_conv(x: i32) -> Result<i8, Error>

§

impl Conv<i32> for i16

§

fn conv(x: i32) -> i16

§

fn try_conv(x: i32) -> Result<i16, Error>

§

impl Conv<i32> for i32

§

fn conv(x: i32) -> i32

§

fn try_conv(x: i32) -> Result<i32, Error>

§

impl Conv<i32> for i64

§

fn conv(x: i32) -> i64

§

fn try_conv(x: i32) -> Result<i64, Error>

§

impl Conv<i32> for i128

§

fn conv(x: i32) -> i128

§

fn try_conv(x: i32) -> Result<i128, Error>

§

impl Conv<i32> for isize

§

impl Conv<i32> for u8

§

fn conv(x: i32) -> u8

§

fn try_conv(x: i32) -> Result<u8, Error>

§

impl Conv<i32> for u16

§

fn conv(x: i32) -> u16

§

fn try_conv(x: i32) -> Result<u16, Error>

§

impl Conv<i32> for u32

§

fn conv(x: i32) -> u32

§

fn try_conv(x: i32) -> Result<u32, Error>

§

impl Conv<i32> for u64

§

fn conv(x: i32) -> u64

§

fn try_conv(x: i32) -> Result<u64, Error>

§

impl Conv<i32> for u128

§

fn conv(x: i32) -> u128

§

fn try_conv(x: i32) -> Result<u128, Error>

§

impl Conv<i32> for usize

§

impl Conv<i64> for f32

§

fn conv(x: i64) -> f32

§

fn try_conv(x: i64) -> Result<f32, Error>

§

impl Conv<i64> for f64

§

fn conv(x: i64) -> f64

§

fn try_conv(x: i64) -> Result<f64, Error>

§

impl Conv<i64> for i8

§

fn conv(x: i64) -> i8

§

fn try_conv(x: i64) -> Result<i8, Error>

§

impl Conv<i64> for i16

§

fn conv(x: i64) -> i16

§

fn try_conv(x: i64) -> Result<i16, Error>

§

impl Conv<i64> for i32

§

fn conv(x: i64) -> i32

§

fn try_conv(x: i64) -> Result<i32, Error>

§

impl Conv<i64> for i64

§

fn conv(x: i64) -> i64

§

fn try_conv(x: i64) -> Result<i64, Error>

§

impl Conv<i64> for i128

§

fn conv(x: i64) -> i128

§

fn try_conv(x: i64) -> Result<i128, Error>

§

impl Conv<i64> for isize

§

impl Conv<i64> for u8

§

fn conv(x: i64) -> u8

§

fn try_conv(x: i64) -> Result<u8, Error>

§

impl Conv<i64> for u16

§

fn conv(x: i64) -> u16

§

fn try_conv(x: i64) -> Result<u16, Error>

§

impl Conv<i64> for u32

§

fn conv(x: i64) -> u32

§

fn try_conv(x: i64) -> Result<u32, Error>

§

impl Conv<i64> for u64

§

fn conv(x: i64) -> u64

§

fn try_conv(x: i64) -> Result<u64, Error>

§

impl Conv<i64> for u128

§

fn conv(x: i64) -> u128

§

fn try_conv(x: i64) -> Result<u128, Error>

§

impl Conv<i64> for usize

§

impl Conv<i128> for f32

§

fn conv(x: i128) -> f32

§

fn try_conv(x: i128) -> Result<f32, Error>

§

impl Conv<i128> for f64

§

fn conv(x: i128) -> f64

§

fn try_conv(x: i128) -> Result<f64, Error>

§

impl Conv<i128> for i8

§

fn conv(x: i128) -> i8

§

fn try_conv(x: i128) -> Result<i8, Error>

§

impl Conv<i128> for i16

§

fn conv(x: i128) -> i16

§

fn try_conv(x: i128) -> Result<i16, Error>

§

impl Conv<i128> for i32

§

fn conv(x: i128) -> i32

§

fn try_conv(x: i128) -> Result<i32, Error>

§

impl Conv<i128> for i64

§

fn conv(x: i128) -> i64

§

fn try_conv(x: i128) -> Result<i64, Error>

§

impl Conv<i128> for i128

§

impl Conv<i128> for isize

§

impl Conv<i128> for u8

§

fn conv(x: i128) -> u8

§

fn try_conv(x: i128) -> Result<u8, Error>

§

impl Conv<i128> for u16

§

fn conv(x: i128) -> u16

§

fn try_conv(x: i128) -> Result<u16, Error>

§

impl Conv<i128> for u32

§

fn conv(x: i128) -> u32

§

fn try_conv(x: i128) -> Result<u32, Error>

§

impl Conv<i128> for u64

§

fn conv(x: i128) -> u64

§

fn try_conv(x: i128) -> Result<u64, Error>

§

impl Conv<i128> for u128

§

impl Conv<i128> for usize

§

impl Conv<isize> for f32

§

impl Conv<isize> for f64

§

impl Conv<isize> for i8

§

fn conv(x: isize) -> i8

§

fn try_conv(x: isize) -> Result<i8, Error>

§

impl Conv<isize> for i16

§

impl Conv<isize> for i32

§

impl Conv<isize> for i64

§

impl Conv<isize> for i128

§

impl Conv<isize> for isize

§

impl Conv<isize> for u8

§

fn conv(x: isize) -> u8

§

fn try_conv(x: isize) -> Result<u8, Error>

§

impl Conv<isize> for u16

§

impl Conv<isize> for u32

§

impl Conv<isize> for u64

§

impl Conv<isize> for u128

§

impl Conv<isize> for usize

§

impl Conv<u8> for f32

§

fn conv(x: u8) -> f32

§

fn try_conv(x: u8) -> Result<f32, Error>

§

impl Conv<u8> for f64

§

fn conv(x: u8) -> f64

§

fn try_conv(x: u8) -> Result<f64, Error>

§

impl Conv<u8> for i8

§

fn conv(x: u8) -> i8

§

fn try_conv(x: u8) -> Result<i8, Error>

§

impl Conv<u8> for i16

§

fn conv(x: u8) -> i16

§

fn try_conv(x: u8) -> Result<i16, Error>

§

impl Conv<u8> for i32

§

fn conv(x: u8) -> i32

§

fn try_conv(x: u8) -> Result<i32, Error>

§

impl Conv<u8> for i64

§

fn conv(x: u8) -> i64

§

fn try_conv(x: u8) -> Result<i64, Error>

§

impl Conv<u8> for i128

§

fn conv(x: u8) -> i128

§

fn try_conv(x: u8) -> Result<i128, Error>

§

impl Conv<u8> for isize

§

fn conv(x: u8) -> isize

§

fn try_conv(x: u8) -> Result<isize, Error>

§

impl Conv<u8> for u8

§

fn conv(x: u8) -> u8

§

fn try_conv(x: u8) -> Result<u8, Error>

§

impl Conv<u8> for u16

§

fn conv(x: u8) -> u16

§

fn try_conv(x: u8) -> Result<u16, Error>

§

impl Conv<u8> for u32

§

fn conv(x: u8) -> u32

§

fn try_conv(x: u8) -> Result<u32, Error>

§

impl Conv<u8> for u64

§

fn conv(x: u8) -> u64

§

fn try_conv(x: u8) -> Result<u64, Error>

§

impl Conv<u8> for u128

§

fn conv(x: u8) -> u128

§

fn try_conv(x: u8) -> Result<u128, Error>

§

impl Conv<u8> for usize

§

fn conv(x: u8) -> usize

§

fn try_conv(x: u8) -> Result<usize, Error>

§

impl Conv<u16> for f32

§

fn conv(x: u16) -> f32

§

fn try_conv(x: u16) -> Result<f32, Error>

§

impl Conv<u16> for f64

§

fn conv(x: u16) -> f64

§

fn try_conv(x: u16) -> Result<f64, Error>

§

impl Conv<u16> for i8

§

fn conv(x: u16) -> i8

§

fn try_conv(x: u16) -> Result<i8, Error>

§

impl Conv<u16> for i16

§

fn conv(x: u16) -> i16

§

fn try_conv(x: u16) -> Result<i16, Error>

§

impl Conv<u16> for i32

§

fn conv(x: u16) -> i32

§

fn try_conv(x: u16) -> Result<i32, Error>

§

impl Conv<u16> for i64

§

fn conv(x: u16) -> i64

§

fn try_conv(x: u16) -> Result<i64, Error>

§

impl Conv<u16> for i128

§

fn conv(x: u16) -> i128

§

fn try_conv(x: u16) -> Result<i128, Error>

§

impl Conv<u16> for isize

§

impl Conv<u16> for u8

§

fn conv(x: u16) -> u8

§

fn try_conv(x: u16) -> Result<u8, Error>

§

impl Conv<u16> for u16

§

fn conv(x: u16) -> u16

§

fn try_conv(x: u16) -> Result<u16, Error>

§

impl Conv<u16> for u32

§

fn conv(x: u16) -> u32

§

fn try_conv(x: u16) -> Result<u32, Error>

§

impl Conv<u16> for u64

§

fn conv(x: u16) -> u64

§

fn try_conv(x: u16) -> Result<u64, Error>

§

impl Conv<u16> for u128

§

fn conv(x: u16) -> u128

§

fn try_conv(x: u16) -> Result<u128, Error>

§

impl Conv<u16> for usize

§

impl Conv<u32> for f32

§

fn conv(x: u32) -> f32

§

fn try_conv(x: u32) -> Result<f32, Error>

§

impl Conv<u32> for f64

§

fn conv(x: u32) -> f64

§

fn try_conv(x: u32) -> Result<f64, Error>

§

impl Conv<u32> for i8

§

fn conv(x: u32) -> i8

§

fn try_conv(x: u32) -> Result<i8, Error>

§

impl Conv<u32> for i16

§

fn conv(x: u32) -> i16

§

fn try_conv(x: u32) -> Result<i16, Error>

§

impl Conv<u32> for i32

§

fn conv(x: u32) -> i32

§

fn try_conv(x: u32) -> Result<i32, Error>

§

impl Conv<u32> for i64

§

fn conv(x: u32) -> i64

§

fn try_conv(x: u32) -> Result<i64, Error>

§

impl Conv<u32> for i128

§

fn conv(x: u32) -> i128

§

fn try_conv(x: u32) -> Result<i128, Error>

§

impl Conv<u32> for isize

§

impl Conv<u32> for u8

§

fn conv(x: u32) -> u8

§

fn try_conv(x: u32) -> Result<u8, Error>

§

impl Conv<u32> for u16

§

fn conv(x: u32) -> u16

§

fn try_conv(x: u32) -> Result<u16, Error>

§

impl Conv<u32> for u32

§

fn conv(x: u32) -> u32

§

fn try_conv(x: u32) -> Result<u32, Error>

§

impl Conv<u32> for u64

§

fn conv(x: u32) -> u64

§

fn try_conv(x: u32) -> Result<u64, Error>

§

impl Conv<u32> for u128

§

fn conv(x: u32) -> u128

§

fn try_conv(x: u32) -> Result<u128, Error>

§

impl Conv<u32> for usize

§

impl Conv<u64> for f32

§

fn conv(x: u64) -> f32

§

fn try_conv(x: u64) -> Result<f32, Error>

§

impl Conv<u64> for f64

§

fn conv(x: u64) -> f64

§

fn try_conv(x: u64) -> Result<f64, Error>

§

impl Conv<u64> for i8

§

fn conv(x: u64) -> i8

§

fn try_conv(x: u64) -> Result<i8, Error>

§

impl Conv<u64> for i16

§

fn conv(x: u64) -> i16

§

fn try_conv(x: u64) -> Result<i16, Error>

§

impl Conv<u64> for i32

§

fn conv(x: u64) -> i32

§

fn try_conv(x: u64) -> Result<i32, Error>

§

impl Conv<u64> for i64

§

fn conv(x: u64) -> i64

§

fn try_conv(x: u64) -> Result<i64, Error>

§

impl Conv<u64> for i128

§

fn conv(x: u64) -> i128

§

fn try_conv(x: u64) -> Result<i128, Error>

§

impl Conv<u64> for isize

§

impl Conv<u64> for u8

§

fn conv(x: u64) -> u8

§

fn try_conv(x: u64) -> Result<u8, Error>

§

impl Conv<u64> for u16

§

fn conv(x: u64) -> u16

§

fn try_conv(x: u64) -> Result<u16, Error>

§

impl Conv<u64> for u32

§

fn conv(x: u64) -> u32

§

fn try_conv(x: u64) -> Result<u32, Error>

§

impl Conv<u64> for u64

§

fn conv(x: u64) -> u64

§

fn try_conv(x: u64) -> Result<u64, Error>

§

impl Conv<u64> for u128

§

fn conv(x: u64) -> u128

§

fn try_conv(x: u64) -> Result<u128, Error>

§

impl Conv<u64> for usize

§

impl Conv<u128> for f32

§

fn conv(x: u128) -> f32

§

fn try_conv(x: u128) -> Result<f32, Error>

§

impl Conv<u128> for f64

§

fn conv(x: u128) -> f64

§

fn try_conv(x: u128) -> Result<f64, Error>

§

impl Conv<u128> for i8

§

fn conv(x: u128) -> i8

§

fn try_conv(x: u128) -> Result<i8, Error>

§

impl Conv<u128> for i16

§

fn conv(x: u128) -> i16

§

fn try_conv(x: u128) -> Result<i16, Error>

§

impl Conv<u128> for i32

§

fn conv(x: u128) -> i32

§

fn try_conv(x: u128) -> Result<i32, Error>

§

impl Conv<u128> for i64

§

fn conv(x: u128) -> i64

§

fn try_conv(x: u128) -> Result<i64, Error>

§

impl Conv<u128> for i128

§

impl Conv<u128> for isize

§

impl Conv<u128> for u8

§

fn conv(x: u128) -> u8

§

fn try_conv(x: u128) -> Result<u8, Error>

§

impl Conv<u128> for u16

§

fn conv(x: u128) -> u16

§

fn try_conv(x: u128) -> Result<u16, Error>

§

impl Conv<u128> for u32

§

fn conv(x: u128) -> u32

§

fn try_conv(x: u128) -> Result<u32, Error>

§

impl Conv<u128> for u64

§

fn conv(x: u128) -> u64

§

fn try_conv(x: u128) -> Result<u64, Error>

§

impl Conv<u128> for u128

§

impl Conv<u128> for usize

§

impl Conv<()> for ()

§

fn try_conv(_: ()) -> Result<(), Error>

§

fn conv(_: ())

§

impl Conv<usize> for f32

§

impl Conv<usize> for f64

§

impl Conv<usize> for i8

§

fn conv(x: usize) -> i8

§

fn try_conv(x: usize) -> Result<i8, Error>

§

impl Conv<usize> for i16

§

impl Conv<usize> for i32

§

impl Conv<usize> for i64

§

impl Conv<usize> for i128

§

impl Conv<usize> for isize

§

impl Conv<usize> for u8

§

fn conv(x: usize) -> u8

§

fn try_conv(x: usize) -> Result<u8, Error>

§

impl Conv<usize> for u16

§

impl Conv<usize> for u32

§

impl Conv<usize> for u64

§

impl Conv<usize> for u128

§

impl Conv<usize> for usize

source§

impl Conv<DVec2> for (f64, f64)

source§

impl Conv<Size> for (u16, u16)

source§

impl Conv<Size> for (u32, u32)

source§

impl Conv<Vec2> for (f32, f32)

§

impl<S0, S1, S2, S3, S4, S5, T0, T1, T2, T3, T4, T5> Conv<(S0, S1, S2, S3, S4, S5)> for (T0, T1, T2, T3, T4, T5)
where T0: Conv<S0>, T1: Conv<S1>, T2: Conv<S2>, T3: Conv<S3>, T4: Conv<S4>, T5: Conv<S5>,

§

impl<S0, S1, S2, S3, S4, T0, T1, T2, T3, T4> Conv<(S0, S1, S2, S3, S4)> for (T0, T1, T2, T3, T4)
where T0: Conv<S0>, T1: Conv<S1>, T2: Conv<S2>, T3: Conv<S3>, T4: Conv<S4>,

§

impl<S0, S1, S2, S3, T0, T1, T2, T3> Conv<(S0, S1, S2, S3)> for (T0, T1, T2, T3)
where T0: Conv<S0>, T1: Conv<S1>, T2: Conv<S2>, T3: Conv<S3>,

§

impl<S0, S1, S2, T0, T1, T2> Conv<(S0, S1, S2)> for (T0, T1, T2)
where T0: Conv<S0>, T1: Conv<S1>, T2: Conv<S2>,

§

impl<S0, S1, T0, T1> Conv<(S0, S1)> for (T0, T1)
where T0: Conv<S0>, T1: Conv<S1>,

§

impl<S0, T0> Conv<(S0,)> for (T0,)
where T0: Conv<S0>,

§

impl<S, T, const N: usize> Conv<[S; N]> for [T; N]
where T: Conv<S> + Copy + Default,

Implementors§

source§

impl Conv<(f32, f32)> for kas::geom::Vec2

source§

impl Conv<(f64, f64)> for DVec2

source§

impl Conv<(i32, i32)> for Coord

source§

impl Conv<(i32, i32)> for Offset

source§

impl Conv<(i32, i32)> for Size

source§

impl Conv<(i32, i32)> for LogicalSize

source§

impl Conv<(u16, u16)> for Size

source§

impl Conv<(u32, u32)> for Size

source§

impl Conv<(u32, u32)> for LogicalSize

source§

impl Conv<Coord> for DVec2

source§

impl Conv<Coord> for Offset

source§

impl Conv<Coord> for kas::geom::Vec2

source§

impl Conv<Coord> for kas::text::Vec2

source§

impl Conv<Offset> for Coord

Convert an Offset into a Coord

In debug mode this asserts that the result is non-negative.

source§

impl Conv<Offset> for DVec2

source§

impl Conv<Offset> for Size

Convert an Offset into a Size

In debug mode this asserts that the result is non-negative.

source§

impl Conv<Offset> for kas::geom::Vec2

source§

impl Conv<Offset> for kas::text::Vec2

source§

impl Conv<Rect> for Quad

source§

impl Conv<Size> for DVec2

source§

impl Conv<Size> for Offset

source§

impl Conv<Size> for kas::geom::Vec2

source§

impl Conv<Size> for LogicalSize

source§

impl Conv<Size> for kas::text::Vec2

source§

impl Conv<Vec2> for kas::text::Vec2

source§

impl Conv<Vec2> for kas::geom::Vec2

source§

impl<X> Conv<PhysicalSize<X>> for Size
where X: Cast<i32>,