Struct type_traits::Assert2

source ·
#[repr(transparent)]
pub struct Assert2<L, R>(_);
Expand description

Static assertion helper for pair of types

This assertion relies on the fact that generic code is always compiled when generic is actually used, hence on its own every constant within Assert would not produce compile error, even if you refer to concrete instance of Assert In order to perform assertion, you must use associated constant, otherwise generic constant is not evaluated.

Implementations§

source§

impl<L, R> Assert2<L, R>

source

pub const IS_SAME_SIZE: () = _

Asserts both types are of the same size

Usage
use type_traits::Assert2;

fn test<T, O>(input: T, default: O) -> O {
    let _ = Assert2::<T, O>::IS_SAME_SIZE;
    default
}

test(0u8, false);
source

pub const IS_SAME_ALIGN: () = _

Asserts both types are of the minimum alignment.

Usage
use type_traits::Assert2;

fn test<T, O>(input: T, default: O) -> O {
    let _ = Assert2::<T, O>::IS_SAME_ALIGN;
    default
}

test(0u8, false);
source

pub const IS_LEFT_SIZE_GREATER_OR_EQUAL: () = _

Asserts that L size is greater or equal to R

Usage
use type_traits::{Type, Assert2};

fn test<T, O>(input: T, default: O) -> O {
    assert!(Type::<T>::size() > Type::<O>::size());
    let _ = Assert2::<T, O>::IS_LEFT_SIZE_GREATER_OR_EQUAL;
    default
}

test(0u32, false);
source

pub const IS_LEFT_SIZE_LESS: () = _

Asserts that L size is less that of R

Usage
use type_traits::{Type, Assert2};

fn test<T, O>(input: T, default: O) -> O {
    assert!(Type::<T>::size() < Type::<O>::size());
    let _ = Assert2::<T, O>::IS_LEFT_SIZE_LESS;
    default
}

test(false, 0u32);
source

pub const IS_LEFT_ALIGN_GREATER_OR_EQUAL: () = _

Asserts that L minimum alignment is greater or equal to R

Usage
use type_traits::{Type, Assert2};

fn test<T, O>(input: T, default: O) -> O {
    assert!(Type::<T>::align() > Type::<O>::align());
    let _ = Assert2::<T, O>::IS_LEFT_ALIGN_GREATER_OR_EQUAL;
    default
}

test(0u32, false);
source

pub const IS_LEFT_ALIGN_LESS: () = _

Asserts that L minimum alignment is less that of R

Usage
use type_traits::{Type, Assert2};

fn test<T, O>(input: T, default: O) -> O {
    assert!(Type::<T>::align() < Type::<O>::align());
    let _ = Assert2::<T, O>::IS_LEFT_ALIGN_LESS;
    default
}

test(0u8, 0u32);

Auto Trait Implementations§

§

impl<L, R> RefUnwindSafe for Assert2<L, R>where L: RefUnwindSafe, R: RefUnwindSafe,

§

impl<L, R> Send for Assert2<L, R>where L: Send, R: Send,

§

impl<L, R> Sync for Assert2<L, R>where L: Sync, R: Sync,

§

impl<L, R> Unpin for Assert2<L, R>where L: Unpin, R: Unpin,

§

impl<L, R> UnwindSafe for Assert2<L, R>where L: UnwindSafe, R: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.