Trait kas_core::cast::Conv

source ·
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§

source

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

Try converting from T to Self

This method must fail on inexact conversions.

Provided Methods§

source

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§

source§

impl Conv<f32> for f32

source§

impl Conv<f32> for f64

source§

impl Conv<f64> for f64

source§

impl Conv<i8> for f32

source§

impl Conv<i8> for f64

source§

impl Conv<i8> for i8

source§

impl Conv<i8> for i16

source§

impl Conv<i8> for i32

source§

impl Conv<i8> for i64

source§

impl Conv<i8> for i128

source§

impl Conv<i8> for isize

source§

impl Conv<i8> for u8

source§

impl Conv<i8> for u16

source§

impl Conv<i8> for u32

source§

impl Conv<i8> for u64

source§

impl Conv<i8> for u128

source§

impl Conv<i8> for usize

source§

impl Conv<i16> for f32

source§

impl Conv<i16> for f64

source§

impl Conv<i16> for i8

source§

impl Conv<i16> for i16

source§

impl Conv<i16> for i32

source§

impl Conv<i16> for i64

source§

impl Conv<i16> for i128

source§

impl Conv<i16> for isize

source§

impl Conv<i16> for u8

source§

impl Conv<i16> for u16

source§

impl Conv<i16> for u32

source§

impl Conv<i16> for u64

source§

impl Conv<i16> for u128

source§

impl Conv<i16> for usize

source§

impl Conv<i32> for f32

source§

impl Conv<i32> for f64

source§

impl Conv<i32> for i8

source§

impl Conv<i32> for i16

source§

impl Conv<i32> for i32

source§

impl Conv<i32> for i64

source§

impl Conv<i32> for i128

source§

impl Conv<i32> for isize

source§

impl Conv<i32> for u8

source§

impl Conv<i32> for u16

source§

impl Conv<i32> for u32

source§

impl Conv<i32> for u64

source§

impl Conv<i32> for u128

source§

impl Conv<i32> for usize

source§

impl Conv<i64> for f32

source§

impl Conv<i64> for f64

source§

impl Conv<i64> for i8

source§

impl Conv<i64> for i16

source§

impl Conv<i64> for i32

source§

impl Conv<i64> for i64

source§

impl Conv<i64> for i128

source§

impl Conv<i64> for isize

source§

impl Conv<i64> for u8

source§

impl Conv<i64> for u16

source§

impl Conv<i64> for u32

source§

impl Conv<i64> for u64

source§

impl Conv<i64> for u128

source§

impl Conv<i64> for usize

source§

impl Conv<i128> for f32

source§

impl Conv<i128> for f64

source§

impl Conv<i128> for i8

source§

impl Conv<i128> for i16

source§

impl Conv<i128> for i32

source§

impl Conv<i128> for i64

source§

impl Conv<i128> for i128

source§

impl Conv<i128> for isize

source§

impl Conv<i128> for u8

source§

impl Conv<i128> for u16

source§

impl Conv<i128> for u32

source§

impl Conv<i128> for u64

source§

impl Conv<i128> for u128

source§

impl Conv<i128> for usize

source§

impl Conv<isize> for f32

source§

impl Conv<isize> for f64

source§

impl Conv<isize> for i8

source§

impl Conv<isize> for i16

source§

impl Conv<isize> for i32

source§

impl Conv<isize> for i64

source§

impl Conv<isize> for i128

source§

impl Conv<isize> for isize

source§

impl Conv<isize> for u8

source§

impl Conv<isize> for u16

source§

impl Conv<isize> for u32

source§

impl Conv<isize> for u64

source§

impl Conv<isize> for u128

source§

impl Conv<isize> for usize

source§

impl Conv<u8> for f32

source§

impl Conv<u8> for f64

source§

impl Conv<u8> for i8

source§

impl Conv<u8> for i16

source§

impl Conv<u8> for i32

source§

impl Conv<u8> for i64

source§

impl Conv<u8> for i128

source§

impl Conv<u8> for isize

source§

impl Conv<u8> for u8

source§

impl Conv<u8> for u16

source§

impl Conv<u8> for u32

source§

impl Conv<u8> for u64

source§

impl Conv<u8> for u128

source§

impl Conv<u8> for usize

source§

impl Conv<u16> for f32

source§

impl Conv<u16> for f64

source§

impl Conv<u16> for i8

source§

impl Conv<u16> for i16

source§

impl Conv<u16> for i32

source§

impl Conv<u16> for i64

source§

impl Conv<u16> for i128

source§

impl Conv<u16> for isize

source§

impl Conv<u16> for u8

source§

impl Conv<u16> for u16

source§

impl Conv<u16> for u32

source§

impl Conv<u16> for u64

source§

impl Conv<u16> for u128

source§

impl Conv<u16> for usize

source§

impl Conv<u32> for f32

source§

impl Conv<u32> for f64

source§

impl Conv<u32> for i8

source§

impl Conv<u32> for i16

source§

impl Conv<u32> for i32

source§

impl Conv<u32> for i64

source§

impl Conv<u32> for i128

source§

impl Conv<u32> for isize

source§

impl Conv<u32> for u8

source§

impl Conv<u32> for u16

source§

impl Conv<u32> for u32

source§

impl Conv<u32> for u64

source§

impl Conv<u32> for u128

source§

impl Conv<u32> for usize

source§

impl Conv<u64> for f32

source§

impl Conv<u64> for f64

source§

impl Conv<u64> for i8

source§

impl Conv<u64> for i16

source§

impl Conv<u64> for i32

source§

impl Conv<u64> for i64

source§

impl Conv<u64> for i128

source§

impl Conv<u64> for isize

source§

impl Conv<u64> for u8

source§

impl Conv<u64> for u16

source§

impl Conv<u64> for u32

source§

impl Conv<u64> for u64

source§

impl Conv<u64> for u128

source§

impl Conv<u64> for usize

source§

impl Conv<u128> for f32

source§

impl Conv<u128> for f64

source§

impl Conv<u128> for i8

source§

impl Conv<u128> for i16

source§

impl Conv<u128> for i32

source§

impl Conv<u128> for i64

source§

impl Conv<u128> for i128

source§

impl Conv<u128> for isize

source§

impl Conv<u128> for u8

source§

impl Conv<u128> for u16

source§

impl Conv<u128> for u32

source§

impl Conv<u128> for u64

source§

impl Conv<u128> for u128

source§

impl Conv<u128> for usize

source§

impl Conv<()> for ()

source§

impl Conv<usize> for f32

source§

impl Conv<usize> for f64

source§

impl Conv<usize> for i8

source§

impl Conv<usize> for i16

source§

impl Conv<usize> for i32

source§

impl Conv<usize> for i64

source§

impl Conv<usize> for i128

source§

impl Conv<usize> for isize

source§

impl Conv<usize> for u8

source§

impl Conv<usize> for u16

source§

impl Conv<usize> for u32

source§

impl Conv<usize> for u64

source§

impl Conv<usize> for u128

source§

impl Conv<usize> for usize

source§

impl Conv<DVec2> for (f64, f64)

source§

fn conv(v: DVec2) -> Self

source§

fn try_conv(v: DVec2) -> Result<Self>

source§

impl Conv<Size> for (u16, u16)

source§

fn try_conv(size: Size) -> Result<Self>

source§

impl Conv<Size> for (u32, u32)

source§

fn try_conv(size: Size) -> Result<Self>

source§

impl Conv<Vec2> for (f32, f32)

source§

fn conv(v: Vec2) -> Self

source§

fn try_conv(v: Vec2) -> Result<Self>

source§

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>,

source§

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>,

source§

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>,

source§

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>,

source§

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

source§

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

source§

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_core::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_core::geom::Vec2

source§

impl Conv<Coord> for kas_core::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_core::geom::Vec2

source§

impl Conv<Offset> for kas_core::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_core::geom::Vec2

source§

impl Conv<Size> for LogicalSize

source§

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

source§

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

source§

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

source§

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

Available on crate feature winit only.