variant_counter 0.4.0

Rust's Enum variant counter
Documentation
#![allow(unused)]
use variant_counter::*;

struct Info {
    message: String,
    file: String,
    line: u64,
}

#[derive(VariantCount)]
enum ComplexLevel<'a> {
    Trace,
    Debug { line: usize },
    Info(Info),
    Warn(),
    Error(usize),
    Fatal(&'a str),
}

#[test]
fn test_complex() {
    type C = ComplexLevel<'static>;

    assert_eq!(C::variant_count(), 6);

    let mut counter = C::counter();
    counter.record(&C::Trace);
    counter.record(&C::Debug { line: 10 });
    counter.record(&C::Info(Info {
        message: "info".into(),
        file: "test.rs".into(),
        line: 1,
    }));
    counter.record(&C::Warn());
    counter.record(&C::Error(1));
    counter.record(&C::Fatal("fatal error"));
}