use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum RoadSurfaceType {
AlleyPaved,
Asphalt,
ChipAndSeal,
Concrete,
Dirt,
Gravel,
None,
Other,
Paved,
SeeRemarks,
Unimproved,
OpenEnumeration(String),
}
impl crate::ResoEnumeration for RoadSurfaceType {
fn from_str(s: &str) -> RoadSurfaceType {
match s {
"Alley Paved" => RoadSurfaceType::AlleyPaved,
"Asphalt" => RoadSurfaceType::Asphalt,
"Chip And Seal" => RoadSurfaceType::ChipAndSeal,
"Concrete" => RoadSurfaceType::Concrete,
"Dirt" => RoadSurfaceType::Dirt,
"Gravel" => RoadSurfaceType::Gravel,
"None" => RoadSurfaceType::None,
"Other" => RoadSurfaceType::Other,
"Paved" => RoadSurfaceType::Paved,
"See Remarks" => RoadSurfaceType::SeeRemarks,
"Unimproved" => RoadSurfaceType::Unimproved,
_ => RoadSurfaceType::OpenEnumeration(s.into()),
}
}
fn from_string(s: String) -> RoadSurfaceType {
match s.as_ref() {
"Alley Paved" => RoadSurfaceType::AlleyPaved,
"Asphalt" => RoadSurfaceType::Asphalt,
"Chip And Seal" => RoadSurfaceType::ChipAndSeal,
"Concrete" => RoadSurfaceType::Concrete,
"Dirt" => RoadSurfaceType::Dirt,
"Gravel" => RoadSurfaceType::Gravel,
"None" => RoadSurfaceType::None,
"Other" => RoadSurfaceType::Other,
"Paved" => RoadSurfaceType::Paved,
"See Remarks" => RoadSurfaceType::SeeRemarks,
"Unimproved" => RoadSurfaceType::Unimproved,
_ => RoadSurfaceType::OpenEnumeration(s),
}
}
fn to_str(&self) -> &str {
match self {
RoadSurfaceType::AlleyPaved => "Alley Paved",
RoadSurfaceType::Asphalt => "Asphalt",
RoadSurfaceType::ChipAndSeal => "Chip And Seal",
RoadSurfaceType::Concrete => "Concrete",
RoadSurfaceType::Dirt => "Dirt",
RoadSurfaceType::Gravel => "Gravel",
RoadSurfaceType::None => "None",
RoadSurfaceType::Other => "Other",
RoadSurfaceType::Paved => "Paved",
RoadSurfaceType::SeeRemarks => "See Remarks",
RoadSurfaceType::Unimproved => "Unimproved",
RoadSurfaceType::OpenEnumeration(ref s) => s,
}
}
fn into_string(self) -> String {
match self {
RoadSurfaceType::AlleyPaved => "Alley Paved".into(),
RoadSurfaceType::Asphalt => "Asphalt".into(),
RoadSurfaceType::ChipAndSeal => "Chip And Seal".into(),
RoadSurfaceType::Concrete => "Concrete".into(),
RoadSurfaceType::Dirt => "Dirt".into(),
RoadSurfaceType::Gravel => "Gravel".into(),
RoadSurfaceType::None => "None".into(),
RoadSurfaceType::Other => "Other".into(),
RoadSurfaceType::Paved => "Paved".into(),
RoadSurfaceType::SeeRemarks => "See Remarks".into(),
RoadSurfaceType::Unimproved => "Unimproved".into(),
RoadSurfaceType::OpenEnumeration(s) => s,
}
}
fn fallback_value(&self) -> Option<&str> {
match self {
RoadSurfaceType::OpenEnumeration(ref s) => Some(s),
_ => None,
}
}
}
impl From<String> for RoadSurfaceType {
fn from(s: String) -> RoadSurfaceType {
match s.as_ref() {
"Alley Paved" => RoadSurfaceType::AlleyPaved,
"Asphalt" => RoadSurfaceType::Asphalt,
"Chip And Seal" => RoadSurfaceType::ChipAndSeal,
"Concrete" => RoadSurfaceType::Concrete,
"Dirt" => RoadSurfaceType::Dirt,
"Gravel" => RoadSurfaceType::Gravel,
"None" => RoadSurfaceType::None,
"Other" => RoadSurfaceType::Other,
"Paved" => RoadSurfaceType::Paved,
"See Remarks" => RoadSurfaceType::SeeRemarks,
"Unimproved" => RoadSurfaceType::Unimproved,
_ => RoadSurfaceType::OpenEnumeration(s),
}
}
}
impl From<&str> for RoadSurfaceType {
fn from(s: &str) -> RoadSurfaceType {
match s {
"Alley Paved" => RoadSurfaceType::AlleyPaved,
"Asphalt" => RoadSurfaceType::Asphalt,
"Chip And Seal" => RoadSurfaceType::ChipAndSeal,
"Concrete" => RoadSurfaceType::Concrete,
"Dirt" => RoadSurfaceType::Dirt,
"Gravel" => RoadSurfaceType::Gravel,
"None" => RoadSurfaceType::None,
"Other" => RoadSurfaceType::Other,
"Paved" => RoadSurfaceType::Paved,
"See Remarks" => RoadSurfaceType::SeeRemarks,
"Unimproved" => RoadSurfaceType::Unimproved,
_ => RoadSurfaceType::OpenEnumeration(s.into()),
}
}
}
impl<'a> From<&'a RoadSurfaceType> for &'a str {
fn from(s: &'a RoadSurfaceType) -> &'a str {
match s {
RoadSurfaceType::AlleyPaved => "Alley Paved",
RoadSurfaceType::Asphalt => "Asphalt",
RoadSurfaceType::ChipAndSeal => "Chip And Seal",
RoadSurfaceType::Concrete => "Concrete",
RoadSurfaceType::Dirt => "Dirt",
RoadSurfaceType::Gravel => "Gravel",
RoadSurfaceType::None => "None",
RoadSurfaceType::Other => "Other",
RoadSurfaceType::Paved => "Paved",
RoadSurfaceType::SeeRemarks => "See Remarks",
RoadSurfaceType::Unimproved => "Unimproved",
RoadSurfaceType::OpenEnumeration(s) => s,
}
}
}
impl Serialize for RoadSurfaceType {
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 RoadSurfaceType {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(From::from(s))
}
}