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}