enum-helper 0.1.0

Yet another enum helper. Macros that generate common boilerplate for enums.
Documentation
use assert2::check;
use core::{convert::TryFrom, fmt};
use enum_helper::EnumStr;
use std::str::FromStr;

// test code wasn't generated by provides our own impl, and compile didn't say conflict

#[derive(Debug, EnumStr, PartialEq, Eq)]
#[enum_str(no_rendering)]
enum NoRendering {
    Alpha,
    Bravo,
}

#[test]
fn no_rendering_has_from_str() {
    check!("Alpha".parse::<NoRendering>().unwrap() == NoRendering::Alpha);
    check!("Bravo".parse::<NoRendering>().unwrap() == NoRendering::Bravo);
}

#[test]
fn no_rendering_has_try_from() {
    check!(NoRendering::try_from("Alpha").unwrap() == NoRendering::Alpha);
}

impl EnumStr for NoRendering {
    fn as_name(&self) -> &'static str {
        "test"
    }

    fn as_aliases(&self) -> &'static [&'static str] {
        &["test"]
    }
}

impl From<NoRendering> for &'static str {
    fn from(_: NoRendering) -> Self {
        "test"
    }
}

impl AsRef<str> for NoRendering {
    fn as_ref(&self) -> &str {
        "test"
    }
}

#[derive(EnumStr, PartialEq, Eq)]
#[enum_str(no_parsing)]
enum NoParsing {
    Alpha,
    Bravo,
}

#[test]
fn no_parsing_has_as_name() {
    check!(NoParsing::Alpha.as_name() == "Alpha");
    check!(NoParsing::Bravo.as_name() == "Bravo");
}

#[derive(Debug, Clone)]
struct NoParsingError {}
impl fmt::Display for NoParsingError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "test")
    }
}

impl FromStr for NoParsing {
    type Err = NoParsingError;

    fn from_str(_: &str) -> Result<Self, Self::Err> {
        Ok(Self::Alpha)
    }
}

impl TryFrom<&str> for NoParsing {
    type Error = NoParsingError;

    fn try_from(_: &str) -> Result<Self, Self::Error> {
        Ok(Self::Alpha)
    }
}

#[derive(Debug, PartialEq, Eq, EnumStr)]
#[enum_str(no_error_struct)]
enum NoErrorStruct {
    Alpha,
}

#[derive(Debug, Clone)]
struct InvalidNoErrorStruct;

impl fmt::Display for InvalidNoErrorStruct {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "test")
    }
}

impl InvalidNoErrorStruct {
    fn new(_: &str) -> Self {
        Self
    }
}

#[test]
fn no_error_struct_has_from_str() {
    let res: Result<NoErrorStruct, InvalidNoErrorStruct> = "test".parse();
    check!(let Err(InvalidNoErrorStruct) = res);
}