enum-values 0.1.0

Exposes enum values via reflection
Documentation
//! Test cases.

use enum_values::EnumValues;

/// Mapping for relevant [`Error`] variants to an [`ExitCode`].
#[derive(EnumValues, Debug)]
#[repr(u8)]
pub enum ErrorExitCode {
    /// Mapping for [`crate::admin_credentials::Error::AdministratorMissing`] wrapped in
    /// [`Error::AdminSecretHandling`].
    AdminCredentialsAdministratorMissing = 100,

    /// Mapping for [`crate::admin_credentials::Error::AdministratorNoDefault`] wrapped in
    /// [`Error::AdminSecretHandling`].
    AdminCredentialsAdministratorNoDefault = 101,

    /// Mapping for [`crate::admin_credentials::Error::CredsFileCreate`] wrapped in
    /// [`Error::AdminSecretHandling`].
    AdminCredentialsCredsFileCreate = 102,
}

#[test]
fn unit_variants() {
    let variants = ErrorExitCode::variants().collect::<Vec<_>>();
    eprintln!("Variants: {variants:#?}",);
    assert_eq!(variants.len(), 3);
}

/// Mapping for relevant [`Error`] variants to an [`ExitCode`].
#[derive(EnumValues, Debug)]
#[repr(u8)]
pub enum WrappedError {
    /// IO error.
    Io(std::io::Error) = 2,

    /// Fmt error.
    Fmt(std::fmt::Error) = 3,
}

#[test]
fn newtype_variants() {
    let variants = WrappedError::variants().collect::<Vec<_>>();
    eprintln!("Variants: {variants:#?}",);
    assert_eq!(variants.len(), 2);

    assert_eq!("IO error.", variants[0].doc);
    assert_eq!("Io", variants[0].name);
    assert_eq!(2, variants[0].value);

    assert_eq!("Fmt error.", variants[1].doc);
    assert_eq!("Fmt", variants[1].name);
    assert_eq!(3, variants[1].value);
}