(
$(#[$attr:meta])*
$vis:vis enum $name:ident {
$($variant:ident = $character:literal),*
$(,)?
}
) => {
$(#[$attr])*
$vis enum $name {
$($variant,)*
}
impl $name {
pub fn to_char(&self) -> char {
match self {
$($name::$variant => $character,)*
}
}
pub fn from_char(ch: char) -> ::core::option::Option<Self> {
match ch {
$($character => ::core::option::Option::Some($name::$variant),)*
_ => ::core::option::Option::None,
}
}
}
}
}
и можно ли сделать шоб любой тип был, а не только чар?
Что значит "любой тип"?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=3f450c061056bdae74653f643855f644
Ну, это будет работать только с типами, для которых есть литералы
Но для фикса достаточно у метапеременной $value указать тип tt
https://github.com/miralushch/value-enum
В TryFrom лучше типом Error поставить $type, не все типы Copy
Обсуждают сегодня