use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum Vegetation {
Brush,
Cleared,
Crops,
Grassed,
HeavilyWooded,
NaturalState,
Other,
PartiallyWooded,
SeeRemarks,
Wooded,
OpenEnumeration(String),
}
impl crate::ResoEnumeration for Vegetation {
fn from_str(s: &str) -> Vegetation {
match s {
"Brush" => Vegetation::Brush,
"Cleared" => Vegetation::Cleared,
"Crop(s)" => Vegetation::Crops,
"Grassed" => Vegetation::Grassed,
"Heavily Wooded" => Vegetation::HeavilyWooded,
"Natural State" => Vegetation::NaturalState,
"Other" => Vegetation::Other,
"Partially Wooded" => Vegetation::PartiallyWooded,
"See Remarks" => Vegetation::SeeRemarks,
"Wooded" => Vegetation::Wooded,
_ => Vegetation::OpenEnumeration(s.into()),
}
}
fn from_string(s: String) -> Vegetation {
match s.as_ref() {
"Brush" => Vegetation::Brush,
"Cleared" => Vegetation::Cleared,
"Crop(s)" => Vegetation::Crops,
"Grassed" => Vegetation::Grassed,
"Heavily Wooded" => Vegetation::HeavilyWooded,
"Natural State" => Vegetation::NaturalState,
"Other" => Vegetation::Other,
"Partially Wooded" => Vegetation::PartiallyWooded,
"See Remarks" => Vegetation::SeeRemarks,
"Wooded" => Vegetation::Wooded,
_ => Vegetation::OpenEnumeration(s),
}
}
fn to_str(&self) -> &str {
match self {
Vegetation::Brush => "Brush",
Vegetation::Cleared => "Cleared",
Vegetation::Crops => "Crop(s)",
Vegetation::Grassed => "Grassed",
Vegetation::HeavilyWooded => "Heavily Wooded",
Vegetation::NaturalState => "Natural State",
Vegetation::Other => "Other",
Vegetation::PartiallyWooded => "Partially Wooded",
Vegetation::SeeRemarks => "See Remarks",
Vegetation::Wooded => "Wooded",
Vegetation::OpenEnumeration(ref s) => s,
}
}
fn into_string(self) -> String {
match self {
Vegetation::Brush => "Brush".into(),
Vegetation::Cleared => "Cleared".into(),
Vegetation::Crops => "Crop(s)".into(),
Vegetation::Grassed => "Grassed".into(),
Vegetation::HeavilyWooded => "Heavily Wooded".into(),
Vegetation::NaturalState => "Natural State".into(),
Vegetation::Other => "Other".into(),
Vegetation::PartiallyWooded => "Partially Wooded".into(),
Vegetation::SeeRemarks => "See Remarks".into(),
Vegetation::Wooded => "Wooded".into(),
Vegetation::OpenEnumeration(s) => s,
}
}
fn fallback_value(&self) -> Option<&str> {
match self {
Vegetation::OpenEnumeration(ref s) => Some(s),
_ => None,
}
}
}
impl From<String> for Vegetation {
fn from(s: String) -> Vegetation {
match s.as_ref() {
"Brush" => Vegetation::Brush,
"Cleared" => Vegetation::Cleared,
"Crop(s)" => Vegetation::Crops,
"Grassed" => Vegetation::Grassed,
"Heavily Wooded" => Vegetation::HeavilyWooded,
"Natural State" => Vegetation::NaturalState,
"Other" => Vegetation::Other,
"Partially Wooded" => Vegetation::PartiallyWooded,
"See Remarks" => Vegetation::SeeRemarks,
"Wooded" => Vegetation::Wooded,
_ => Vegetation::OpenEnumeration(s),
}
}
}
impl From<&str> for Vegetation {
fn from(s: &str) -> Vegetation {
match s {
"Brush" => Vegetation::Brush,
"Cleared" => Vegetation::Cleared,
"Crop(s)" => Vegetation::Crops,
"Grassed" => Vegetation::Grassed,
"Heavily Wooded" => Vegetation::HeavilyWooded,
"Natural State" => Vegetation::NaturalState,
"Other" => Vegetation::Other,
"Partially Wooded" => Vegetation::PartiallyWooded,
"See Remarks" => Vegetation::SeeRemarks,
"Wooded" => Vegetation::Wooded,
_ => Vegetation::OpenEnumeration(s.into()),
}
}
}
impl<'a> From<&'a Vegetation> for &'a str {
fn from(s: &'a Vegetation) -> &'a str {
match s {
Vegetation::Brush => "Brush",
Vegetation::Cleared => "Cleared",
Vegetation::Crops => "Crop(s)",
Vegetation::Grassed => "Grassed",
Vegetation::HeavilyWooded => "Heavily Wooded",
Vegetation::NaturalState => "Natural State",
Vegetation::Other => "Other",
Vegetation::PartiallyWooded => "Partially Wooded",
Vegetation::SeeRemarks => "See Remarks",
Vegetation::Wooded => "Wooded",
Vegetation::OpenEnumeration(s) => s,
}
}
}
impl Serialize for Vegetation {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(self.into())
}
}
impl<'de> Deserialize<'de> for Vegetation {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(From::from(s))
}
}