derivenum 0.1.1

macros intended for use on enums to reduce boilerplate / provide useful shortcuts
Documentation
#![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));
}