VariantName

Derive Macro VariantName 

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

Automatically implements [more_convert::VariantName] 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 VariantName on the first field of the variant

§Examples

§Normal

use more_convert::VariantName;

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

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

§rename and rename_all

use more_convert::VariantName;

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

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

§prefix and suffix

use more_convert::VariantName;

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

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

§nest

use more_convert::VariantName;

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

#[derive(VariantName)]
pub enum TestVariantName {
    InvalidCode,

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

assert_eq!("InvalidCode", TestVariantName::InvalidCode.variant_name());

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

§without_trait

#[derive(more_convert::VariantName)]
#[variant_name(without_trait)]
pub enum Error {
 InvalidCode,
 ServerError,
}

// call at const
const INVALID_CODE: &str = Error::InvalidCode.variant_name();

mod test {
    fn something() {
        // not depend on VariantName trait
        crate::Error::InvalidCode.variant_name();
    }
}