use std::convert::TryInto;
use tyenum::tyenum;
#[derive(Debug, PartialEq)]
struct A;
#[derive(Debug, PartialEq)]
struct B;
#[derive(Debug, PartialEq)]
struct C;
#[tyenum]
#[derive(Debug, PartialEq)]
enum Test {
A,
BB(B),
C(C),
}
#[test]
fn into() {
assert_eq!(Test::A(A), A.into());
assert_eq!(Test::BB(B), B.into());
assert_ne!(Test::A(A), C.into());
}
#[test]
fn is() {
assert!(Test::A(A).is::<A>());
assert!(Test::BB(B).is::<B>());
assert!(!Test::C(C).is::<A>());
}
#[test]
fn try_into() {
assert_eq!(Test::A(A).try_into(), Ok(A));
assert_eq!(Test::BB(B).try_into(), Ok(B));
assert_eq!(
{
let a: Result<A, _> = Test::C(C).try_into();
a
},
Err(TryFromTyenumError)
);
}