Trait vesta::Case[][src]

pub trait Case<const N: usize>: Match {
    type Case;
    unsafe fn case(this: Self) -> Self::Case;
fn uncase(case: Self::Case) -> Self; fn try_case(this: Self) -> Result<Self::Case, Self> { ... } }

An implementation of Case defines a particular case of a pattern match for a type.
ℹ️ Prefer using the methods of CaseExt to directly calling these methods.

Associated Types

type Case[src]

The type of the data contained in the Nth case of the matched type.

Loading content...

Required methods

unsafe fn case(this: Self) -> Self::Case[src]

If the value’s tag is N, return that case.

Safety

It is undefined behavior to call this function when self.tag() would return anything other than Some(n), where n = N.

Examples

use vesta::{Match, Case};

let option = Some("hello");
assert_eq!(option.tag(), Some(1));
let string = unsafe { <_ as Case<1>>::case(option) };
assert_eq!(string, "hello");

fn uncase(case: Self::Case) -> Self[src]

The inverse of case: inject this case back into the matched type.

This operation must not panic or otherwise fail.

Examples

use vesta::Case;

let option: Option<_> = <_ as Case<1>>::uncase("hello");
assert_eq!(option, Some("hello"));
Loading content...

Provided methods

fn try_case(this: Self) -> Result<Self::Case, Self>[src]

If the value’s tag is N, return that case; otherwise, return self.

In its default implementation, this method checks that self.tag() == N and then calls case only if so.

In the case where this method can be more efficiently implemented than the composition of tag with case, this method can be overloaded.

Examples

use vesta::Case;

let result = <_ as Case<1>>::try_case(Some("hello"));
assert_eq!(result, Ok("hello"));
Loading content...

Implementations on Foreign Types

impl<T> Case<0_usize> for Option<T>[src]

type Case = ()

impl<T> Case<1_usize> for Option<T>[src]

type Case = T

impl<T, E> Case<0_usize> for Result<T, E>[src]

type Case = T

impl<T, E> Case<1_usize> for Result<T, E>[src]

type Case = E

impl<'a, B: ?Sized> Case<0_usize> for Cow<'a, B> where
    B: 'a + ToOwned
[src]

type Case = &'a B

impl<'a, B: ?Sized> Case<1_usize> for Cow<'a, B> where
    B: 'a + ToOwned
[src]

type Case = <B as ToOwned>::Owned

impl Case<0_usize> for VarError[src]

type Case = ()

impl Case<1_usize> for VarError[src]

type Case = OsString

impl Case<0_usize> for SeekFrom[src]

type Case = u64

impl Case<1_usize> for SeekFrom[src]

type Case = i64

impl Case<2_usize> for SeekFrom[src]

type Case = i64

impl<T> Case<0_usize> for Bound<T>[src]

type Case = T

impl<T> Case<1_usize> for Bound<T>[src]

type Case = T

impl<T> Case<2_usize> for Bound<T>[src]

type Case = ()

impl Case<0_usize> for IpAddr[src]

type Case = Ipv4Addr

impl Case<1_usize> for IpAddr[src]

type Case = Ipv6Addr

impl Case<0_usize> for SocketAddr[src]

type Case = SocketAddrV4

impl Case<1_usize> for SocketAddr[src]

type Case = SocketAddrV6

impl Case<0_usize> for Shutdown[src]

type Case = ()

impl Case<1_usize> for Shutdown[src]

type Case = ()

impl Case<2_usize> for Shutdown[src]

type Case = ()

impl<T> Case<0_usize> for TryLockError<T>[src]

type Case = PoisonError<T>

impl<T> Case<1_usize> for TryLockError<T>[src]

type Case = ()

impl Case<0_usize> for TryRecvError[src]

type Case = ()

impl Case<1_usize> for TryRecvError[src]

type Case = ()

impl Case<0_usize> for RecvTimeoutError[src]

type Case = ()

impl Case<1_usize> for RecvTimeoutError[src]

type Case = ()

impl<T> Case<0_usize> for TrySendError<T>[src]

type Case = T

impl<T> Case<1_usize> for TrySendError<T>[src]

type Case = T

impl Case<0_usize> for FpCategory[src]

type Case = ()

impl Case<1_usize> for FpCategory[src]

type Case = ()

impl Case<2_usize> for FpCategory[src]

type Case = ()

impl Case<3_usize> for FpCategory[src]

type Case = ()

impl Case<4_usize> for FpCategory[src]

type Case = ()

impl Case<0_usize> for Alignment[src]

type Case = ()

impl Case<1_usize> for Alignment[src]

type Case = ()

impl Case<2_usize> for Alignment[src]

type Case = ()

impl<'a> Case<0_usize> for Prefix<'a>[src]

type Case = &'a OsStr

impl<'a> Case<1_usize> for Prefix<'a>[src]

type Case = (&'a OsStr, &'a OsStr)

impl<'a> Case<2_usize> for Prefix<'a>[src]

type Case = u8

impl<'a> Case<3_usize> for Prefix<'a>[src]

type Case = &'a OsStr

impl<'a> Case<4_usize> for Prefix<'a>[src]

type Case = (&'a OsStr, &'a OsStr)

impl<'a> Case<5_usize> for Prefix<'a>[src]

type Case = u8

impl<'a> Case<0_usize> for Component<'a>[src]

type Case = PrefixComponent<'a>

impl<'a> Case<1_usize> for Component<'a>[src]

type Case = ()

impl<'a> Case<2_usize> for Component<'a>[src]

type Case = ()

impl<'a> Case<3_usize> for Component<'a>[src]

type Case = ()

impl<'a> Case<4_usize> for Component<'a>[src]

type Case = &'a OsStr

impl Case<0_usize> for ErrorKind[src]

type Case = ()

impl Case<1_usize> for ErrorKind[src]

type Case = ()

impl Case<2_usize> for ErrorKind[src]

type Case = ()

impl Case<3_usize> for ErrorKind[src]

type Case = ()

impl Case<4_usize> for ErrorKind[src]

type Case = ()

impl Case<5_usize> for ErrorKind[src]

type Case = ()

impl Case<6_usize> for ErrorKind[src]

type Case = ()

impl Case<7_usize> for ErrorKind[src]

type Case = ()

impl Case<8_usize> for ErrorKind[src]

type Case = ()

impl Case<9_usize> for ErrorKind[src]

type Case = ()

impl Case<10_usize> for ErrorKind[src]

type Case = ()

impl Case<11_usize> for ErrorKind[src]

type Case = ()

impl Case<12_usize> for ErrorKind[src]

type Case = ()

impl Case<13_usize> for ErrorKind[src]

type Case = ()

impl Case<14_usize> for ErrorKind[src]

type Case = ()

impl Case<15_usize> for ErrorKind[src]

type Case = ()

impl Case<16_usize> for ErrorKind[src]

type Case = ()

impl Case<17_usize> for ErrorKind[src]

type Case = ()

impl Case<0_usize> for Ordering[src]

type Case = ()

impl Case<1_usize> for Ordering[src]

type Case = ()

impl Case<2_usize> for Ordering[src]

type Case = ()

impl Case<0_usize> for Ordering[src]

type Case = ()

impl Case<1_usize> for Ordering[src]

type Case = ()

impl Case<2_usize> for Ordering[src]

type Case = ()

impl Case<3_usize> for Ordering[src]

type Case = ()

impl Case<4_usize> for Ordering[src]

type Case = ()

impl<'a, K, V> Case<0_usize> for Entry<'a, K, V> where
    K: 'a,
    V: 'a, 
[src]

type Case = VacantEntry<'a, K, V>

impl<'a, K, V> Case<1_usize> for Entry<'a, K, V> where
    K: 'a,
    V: 'a, 
[src]

type Case = OccupiedEntry<'a, K, V>

impl<'a, K, V> Case<0_usize> for Entry<'a, K, V> where
    K: 'a,
    V: 'a, 
[src]

type Case = VacantEntry<'a, K, V>

impl<'a, K, V> Case<1_usize> for Entry<'a, K, V> where
    K: 'a,
    V: 'a, 
[src]

type Case = OccupiedEntry<'a, K, V>

Loading content...

Implementors

Loading content...