1 个不稳定版本
0.1.1 | 2023 年 1 月 8 日 |
---|---|
0.1.0 |
|
#2181 in Rust 模式
6KB
87 行
define_into_enum!
v0.1.1
这定义了一个宏 define_into_enum!
,它旨在编译为例如。
use define_into_enum::define_into_enum;
define_into_enum! {
#[derive(Debug, PartialEq)]
pub enum TestEnum {
Variant1((usize, usize)),
Variant2((usize, usize)),
Variant3((usize, usize)),
}
(v1, v2),
(v1, v2)
}
然后它将 impl Into<(usize, usize)> for TestEnum
,将所有 (v1, v2)
转换为 (v1, v2)
。
也支持元标签
define_into_enum! {
#[non_exhaustive]
#[derive(enum_kinds::EnumKind)]
#[enum_kind(WordKind, derive(IsVariant, Unwrap))]
#[derive(Clone, Debug, PartialEq, Eq, IsVariant, Unwrap)]
pub enum Word<'a> {
SimpleWord(Cow<'a, str>),
SingleQuotedWord(Cow<'a, str>),
DoubleQuotedWord(Cow<'a, str>),
DollarSingleQuotedWord(Cow<'a, str>),
DollarDoubleQuotedWord(Cow<'a, str>),
UnquotedWord(Cow<'a, str>),
ErrorWord(Cow<'a, str>),
}
( s1 ),
( s1 )
}
该宏
macro_rules! define_into_enum {
{
$(#[$attr:meta])*
$vis:vis enum $name:ident $(< $generic:lifetime >)* {
$(#[$variant_attr1:meta])*
$variant1:ident ($type1:ty),
$(
$(#[$variant_attr:meta])*
$variant:ident ($type:ty),
)*
}
$into:pat,
$output:expr
} => {
$(#[$attr])*
$vis enum $name $(<$generic>)* {
$(#[$variant_attr1])*
$variant1($type1),
$(
$(#[$variant_attr])*
$variant($type),
)*
}
impl$(<$generic>)* Into <$type1> for $name $(<$generic>)* {
fn into(self) -> $type1 {
match self {
$(
Self::$variant( $into ) => ( $output ),
)+
Self::$variant1( $into ) => ( $output ),
}
}
}
}
}
许可协议
版权所有 2023 Fredrick R. Brennan
在 Apache 许可证版本 2.0(“许可证”)下发行;除非适用法律要求或经书面同意,否则不得使用此文件,除非符合许可证。您可以在以下位置获得许可证副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或经书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言、权限和限制,请参阅许可证。