Crates.io | bstringify |
lib.rs | bstringify |
version | 0.1.2 |
source | src |
created_at | 2020-07-25 22:49:13.886555 |
updated_at | 2020-07-25 23:19:18.397205 |
description | stringify! that yields byte string literals instead |
homepage | https://crates.io/crates/bstringify |
repository | https://github.com/danielhenrymantilla/rust-bstringify |
max_upload_size | |
id | 269588 |
size | 20,681 |
bstringify!
Like
stringify!
, but yielding byte string literals instead.
Since .as_bytes()
on str
ings is a const fn
, this macro should only be
useful to create a byte string literal to match
against:
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
));
}