bert/enum_macro.rs
1// Special wrapper around the enum type, which provide an opportunity to
2// serialize/deserialize enum variants as a string.
3
4
5#[macro_export]
6macro_rules! enum_str {
7 ($name:ident { $($variant:ident($str:expr), )* }) => {
8 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
9 pub enum $name {
10 $($variant,)*
11 }
12
13 impl ::serde::Serialize for $name {
14 fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error>
15 where S: ::serde::Serializer,
16 {
17 // Serialize the enum as a string.
18 serializer.serialize_str(match *self {
19 $( $name::$variant => $str, )*
20 })
21 }
22 }
23 }
24}