3 个版本
0.1.2 | 2020 年 7 月 25 日 |
---|---|
0.1.1 | 2020 年 7 月 25 日 |
0.1.0 | 2020 年 7 月 25 日 |
#2966 在 Rust 模式
2,828 每月下载量
用于 4 crates
8KB
bstringify!
类似于
stringify!
,但生成字节字符串字面量。
由于在 str
ings 上 .as_bytes()
是一个 const fn
,这个宏应该只用于创建用于 match
的字节字符串字面量
use ::bstringify::bstringify;
/// like FromStr but with [u8] instead
trait FromBytes : Sized {
fn from_bytes (input: &'_ [u8])
-> Option<Self>
;
}
macro_rules! derive_FromBytes {(
$(#[$attr:meta])*
$pub:vis
enum $EnumName:ident {
$(
$Variant:ident
),* $(,)?
}
) => (
$(#[$attr])*
$pub
enum $EnumName {
$(
$Variant,
)*
}
impl $crate::FromBytes
for $EnumName
{
fn from_bytes (input: &'_ [u8])
-> Option<Self>
{
match input {
$(
| bstringify!($Variant) => Some(Self::$Variant),
)*
| _ => None,
}
}
}
)}
derive_FromBytes! {
enum Example {
Foo,
Bar,
}
}
fn main ()
{
assert!(matches!(
Example::from_bytes(b"Foo"), Some(Example::Foo)
));
assert!(matches!(
Example::from_bytes(b"Bar"), Some(Example::Bar)
));
assert!(matches!(
Example::from_bytes(b"Bad"), None
));
}