Add a generate_attribute! macro, and use it for the common case.

This commit is contained in:
Emmanuel Gil Peyrot 2017-06-14 00:50:57 +01:00
commit 0f297d2d2d
10 changed files with 158 additions and 499 deletions

View file

@ -39,36 +39,11 @@ pub struct Fin {
pub set: Set,
}
#[derive(Debug, Clone)]
pub enum DefaultPrefs {
Always,
Never,
Roster,
}
impl FromStr for DefaultPrefs {
type Err = Error;
fn from_str(s: &str) -> Result<DefaultPrefs, Error> {
Ok(match s {
"always" => DefaultPrefs::Always,
"never" => DefaultPrefs::Never,
"roster" => DefaultPrefs::Roster,
_ => return Err(Error::ParseError("Invalid 'default' attribute.")),
})
}
}
impl IntoAttributeValue for DefaultPrefs {
fn into_attribute_value(self) -> Option<String> {
Some(String::from(match self {
DefaultPrefs::Always => "always",
DefaultPrefs::Never => "never",
DefaultPrefs::Roster => "roster",
}))
}
}
generate_attribute!(DefaultPrefs, "default", {
Always => "always",
Never => "never",
Roster => "roster",
});
#[derive(Debug, Clone)]
pub struct Prefs {