Derive Macro EnumName

Source
#[derive(EnumName)]
{
    // Attributes available to this derive:
    #[enum_name]
}
Expand description

Automatically implements [more_convert::EnumName] on enum

§Where to use:

  • Only want the kind

§Note:

  • prefix and suffix are applied after rename_all

§EnumAttribute:

  • rename_all: apply rule to field name
    • default is “none”
    • The possible values are (“lowercase”, “UPPERCASE”, “PascalCase”, “camelCase”, “snake_case”, “SCREAMING_SNAKE_CASE”, “kebab-case”, “SCREAMING-KEBAB-CASE”)
  • prefix: add prefix to field name
  • suffix: add suffix to field name

§Variant Attribute:

  • rename: rename field, (prefix, suffix and rename_all are not applied)
  • nest: call EnumName on the first field of the variant

§Examples

§Normal

use more_convert::EnumName;

#[derive(EnumName)]
pub enum Error {
  InvalidCode,
  ServerError,
}

assert_eq!("InvalidCode", Error::InvalidCode.enum_name());
assert_eq!("ServerError", Error::ServerError.enum_name());

§rename and rename_all

use more_convert::EnumName;

#[derive(EnumName)]
#[enum_name(rename_all = "snake_case")]
pub enum Error {
  InvalidCode,
  ServerError,
  #[enum_name(rename = "NotFound")]
  NotFoundError,
}

assert_eq!("invalid_code", Error::InvalidCode.enum_name());
assert_eq!("server_error", Error::ServerError.enum_name());
assert_eq!("NotFound", Error::NotFoundError.enum_name());

§prefix and suffix

use more_convert::EnumName;

#[derive(EnumName)]
#[enum_name(prefix = "Error", suffix  = "What")]
pub enum Error {
 InvalidCode,
 ServerError,
}

assert_eq!("ErrorInvalidCodeWhat", Error::InvalidCode.enum_name());
assert_eq!("ErrorServerErrorWhat", Error::ServerError.enum_name());

§nest

use more_convert::EnumName;

#[derive(EnumName)]
#[enum_name(prefix = "Inner")]
pub enum Inner {
    A,
    B,
}

#[derive(EnumName)]
pub enum TestEnumName {
    InvalidCode,

    #[enum_name(nest)]
    Inner(Inner),
}

assert_eq!("InvalidCode", TestEnumName::InvalidCode.enum_name());

assert_eq!("InnerA", Inner::A.enum_name());
assert_eq!("InnerB", Inner::B.enum_name());