[][src]Trait structural::enums::IsVariant

pub unsafe trait IsVariant<V>: AssertTStrParam<V> {
    fn is_variant_(&self, variant: V) -> bool;
}

Queries whether an enum is some variant (the V type parameter)

Example bounds: IsVariant<TS!(Foo)>,IsVariant<TS!(Bar)>.

Safety

An implementation of IsVariant<TS!(Foo)> must only return true if the enum is the Foo variant (Foo is just an example,it applies to all variants).

Undefined behavior will happen if this trait return true, while the accessor for a field of that variant returns None.

Example

use structural::enums::IsVariant;
use structural::{TS,Structural,fp};

assertions(Enum::Foo, Enum::Bar(0), Enum::Boom{x:0,y:false});

assertions(Enum2::Foo, Enum2::Bar, Enum2::Boom);

fn assertions<T>(foo:T, bar:T, boom:T)
where
    T: IsVariant<TS!(Foo)> + IsVariant<TS!(Bar)> + IsVariant<TS!(Boom)>
{
    assert_eq!( foo.is_variant_(fp!(Foo)), true );
    assert_eq!( foo.is_variant_(fp!(Bar)), false );
    assert_eq!( foo.is_variant_(fp!(Boom)), false );
    
    assert_eq!( bar.is_variant_(fp!(Foo)), false );
    assert_eq!( bar.is_variant_(fp!(Bar)), true );
    assert_eq!( bar.is_variant_(fp!(Boom)), false );
    
    assert_eq!( boom.is_variant_(fp!(Foo)), false );
    assert_eq!( boom.is_variant_(fp!(Bar)), false );
    assert_eq!( boom.is_variant_(fp!(Boom)), true );
}

#[derive(Structural)]
enum Enum{
    Foo,
    Bar(u8),
    Boom{x:u32,y:bool},
}

#[derive(Structural)]
enum Enum2{
    Foo,
    Bar,
    Boom,
}

Required methods

fn is_variant_(&self, variant: V) -> bool

Checks whether this enum is the variant that V stands for.

Loading content...

Implementations on Foreign Types

impl<T> IsVariant<TStr<__TS<(__S, __o, __m, __e)>>> for Option<T>[src]

impl<T> IsVariant<TStr<__TS<(__N, __o, __n, __e)>>> for Option<T>[src]

impl<T, E> IsVariant<TStr<__TS<(__O, __k)>>> for Result<T, E>[src]

impl<T, E> IsVariant<TStr<__TS<(__E, __r, __r)>>> for Result<T, E>[src]

impl<T, __V> IsVariant<TStr<__V>> for ManuallyDrop<T> where
    T: IsVariant<TStr<__V>>, 
[src]

impl<P, __V> IsVariant<TStr<__V>> for Pin<P> where
    P::Target: IsVariant<TStr<__V>>,
    P: Deref,
    P::Target: Sized
[src]

impl<T, __V> IsVariant<TStr<__V>> for Arc<T> where
    T: IsVariant<TStr<__V>>,
    T: ?Sized
[src]

impl<T, __V> IsVariant<TStr<__V>> for Rc<T> where
    T: IsVariant<TStr<__V>>,
    T: ?Sized
[src]

impl<T, __V> IsVariant<TStr<__V>> for Box<T> where
    T: IsVariant<TStr<__V>>,
    T: ?Sized
[src]

impl<'a, T, __V> IsVariant<TStr<__V>> for &'a T where
    T: IsVariant<TStr<__V>>,
    T: ?Sized
[src]

impl<'a, T, __V> IsVariant<TStr<__V>> for &'a mut T where
    T: IsVariant<TStr<__V>>,
    T: 'a + ?Sized
[src]

Loading content...

Implementors

impl IsVariant<TStr<__TS<(__0xE7, __0x94, __0x9F, __0xE8, __0x8F, __0x9C)>>> for Vegetable[src]

impl IsVariant<TStr<__TS<(__B, __a, __r)>>> for Enum2[src]

impl IsVariant<TStr<__TS<(__B, __a, __r)>>> for Enum3[src]

impl IsVariant<TStr<__TS<(__B, __a, __r)>>> for Enum4[src]

impl IsVariant<TStr<__TS<(__B, __a, __r)>>> for Variants[src]

impl IsVariant<TStr<__TS<(__B, __a, __r)>>> for WithBar[src]

impl IsVariant<TStr<__TS<(__B, __a, __z)>>> for Enum3[src]

impl IsVariant<TStr<__TS<(__B, __a, __z)>>> for Enum4[src]

impl IsVariant<TStr<__TS<(__B, __a, __z)>>> for Variants[src]

impl IsVariant<TStr<__TS<(__B, __o, __o, __m)>>> for Bomb[src]

impl IsVariant<TStr<__TS<(__B, __o, __o, __m)>>> for Variants[src]

impl IsVariant<TStr<__TS<(__B, __o, __o, __m)>>> for WithBoom[src]

impl IsVariant<TStr<__TS<(__E, __x, __p, __l, __o, __d, __e, __d)>>> for Bomb[src]

impl IsVariant<TStr<__TS<(__F, __o, __o)>>> for Enum2[src]

impl IsVariant<TStr<__TS<(__F, __o, __o)>>> for Enum3[src]

impl IsVariant<TStr<__TS<(__F, __o, __o)>>> for Enum4[src]

impl IsVariant<TStr<__TS<(__F, __o, __o)>>> for Variants[src]

impl IsVariant<TStr<__TS<(__L, __i, __m, __b, __s)>>> for EnumOptA[src]

impl IsVariant<TStr<__TS<(__L, __i, __m, __b, __s)>>> for EnumOptFlying[src]

impl IsVariant<TStr<__TS<(__N, __o, __p, __e)>>> for Bomb[src]

impl IsVariant<TStr<__TS<(__N, __o, __p, __e)>>> for WithBar[src]

impl IsVariant<TStr<__TS<(__N, __o, __p, __e)>>> for WithBoom[src]

impl IsVariant<TStr<__TS<(__Q, __u, __x)>>> for Enum4[src]

impl IsVariant<TStr<__TS<(__Z, __i, __e, __m, __n, __i, __a, __k)>>> for Vegetable[src]

impl<'a> IsVariant<TStr<__TS<(__U, __3, __2)>>> for EnumWithNewtype<'a>[src]

impl<'a> IsVariant<TStr<__TS<(__U, __3, __2)>>> for EnumWithoutNewtype<'a>[src]

impl<'a> IsVariant<TStr<__TS<(__U, __6, __4)>>> for EnumWithNewtype<'a>[src]

impl<'a> IsVariant<TStr<__TS<(__U, __6, __4)>>> for EnumWithoutNewtype<'a>[src]

impl<T, __V> IsVariant<TStr<__V>> for Delegating<T> where
    T: IsVariant<TStr<__V>>, 
[src]

impl<T, __V> IsVariant<TStr<__V>> for StrucWrapper<T> where
    T: IsVariant<TStr<__V>>, 
[src]

Loading content...