#![cfg(test)]
#![allow(dead_code)]
use derivenum::{EnumMatch, EnumTake};
#[derive(EnumMatch)]
enum EnumFields {
Unnamed(String),
Named { name1: u32, name2: String },
Unit,
}
#[test]
pub fn unnamed_fields() {
let unnamed = EnumFields::Unnamed(String::new());
assert!(unnamed.am_unnamed());
assert!(!unnamed.am_named());
assert!(!unnamed.am_unit());
}
#[test]
pub fn named_fields() {
let named = EnumFields::Named {
name1: 1,
name2: String::from("2"),
};
assert!(named.am_named());
assert!(!named.am_unnamed());
assert!(!named.am_unit());
}
#[test]
pub fn unit_fields() {
let unit = EnumFields::Unit;
assert!(unit.am_unit());
assert!(!unit.am_named());
assert!(!unit.am_unnamed());
}
#[derive(EnumTake)]
enum Takeable {
SingleUnnamed(String),
MultiUnnamed(u32, u32, u32),
SingleNamed { name: String },
MultiNamed { field: u32, field2: i32 },
Unit,
}
#[test]
pub fn take_values() {
let takeable = Takeable::SingleUnnamed(String::new());
assert_eq!(takeable.take_single_unnamed(), String::new());
let takeable = Takeable::MultiUnnamed(1, 2, 3);
assert_eq!(takeable.take_multi_unnamed(), (1, 2, 3));
}