use nested_enum_utils::{common_fields, enum_conversions};
#[test]
fn test_single_enum() {
#[derive(Debug)]
#[enum_conversions]
enum Test {
A(u32),
B(String),
}
let e: Test = 42u32.into();
let lr: &u32 = (&e).try_into().unwrap();
assert_eq!(*lr, 42);
let l: u32 = e.try_into().unwrap();
assert_eq!(l, 42);
}
#[test]
fn test_nested_enums() {
#[derive(Debug)]
#[enum_conversions(Outer)]
enum Inner {
A(u32),
B(u8),
}
#[derive(Debug)]
#[enum_conversions]
enum Outer {
A(Inner),
B(String),
}
let e: Outer = 42u32.into();
let lr: &u32 = (&e).try_into().unwrap();
assert_eq!(*lr, 42);
let l: u32 = e.try_into().unwrap();
assert_eq!(l, 42);
}
#[test]
fn test_deeply_nested_enums() {
#[derive(Debug)]
#[enum_conversions(Outer)]
enum Inner {
A(u32),
B(u8),
}
#[derive(Debug)]
#[enum_conversions(Outer)]
enum Mid {
A(Inner),
B(String),
}
#[derive(Debug)]
#[enum_conversions]
enum Outer {
A(Mid),
B(f32),
}
let e: Outer = 42u32.into();
let lr: &u32 = (&e).try_into().unwrap();
assert_eq!(*lr, 42);
let l: u32 = e.try_into().unwrap();
assert_eq!(l, 42);
}
#[test]
fn compile_fail() {
let t = trybuild::TestCases::new();
t.compile_fail("tests/compile_fail/*.rs");
}
#[test]
fn test_common_fields() {
#[common_fields({ id: u64 })]
#[allow(dead_code)]
enum Test {
A { x: u32 },
B { y: String },
}
let _v = Test::A { x: 42, id: 1 };
}