Skip to content

Instantly share code, notes, and snippets.

@jacobmischka
Created April 9, 2017 23:05
Show Gist options
  • Save jacobmischka/aa25850aa1dc37d5bd60b1a2d6a6f079 to your computer and use it in GitHub Desktop.
Save jacobmischka/aa25850aa1dc37d5bd60b1a2d6a6f079 to your computer and use it in GitHub Desktop.
macro_rules! code_value_enum {
(
$NAME:ident {
$(
$VARIANT:ident => $OUT:expr; {
<= $( $IN:pat )|+
}
),*
}
) => (
#[derive(Clone, Copy, Debug)]
pub enum $NAME {
$(
$VARIANT,
)*
}
impl CodeValue for $NAME {
fn value(&self) -> &str {
match *self {
$(
$NAME::$VARIANT => $OUT,
)*
}
}
fn from_value(value: &str) -> $NAME {
match value {
$(
$(
$IN
)|+ => $NAME::$VARIANT,
)*
}
}
}
);
}
code_value_enum! {
PatientSex {
Male => "Male"; {
<= "M" | "Male"
},
Female => "Female"; {
<= "F" | "Female"
},
Missing => "Missing"; {
<= ""
},
Unknown => "Unknown"; {
<= _
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment