use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum RoadFrontageType {
Alley,
CityStreet,
CountyRoad,
Easement,
Freeway,
Highway,
Interstate,
None,
Other,
PrivateRoad,
SeeRemarks,
StateRoad,
Unimproved,
OpenEnumeration(String),
}
impl crate::ResoEnumeration for RoadFrontageType {
fn from_str(s: &str) -> RoadFrontageType {
match s {
"Alley" => RoadFrontageType::Alley,
"City Street" => RoadFrontageType::CityStreet,
"County Road" => RoadFrontageType::CountyRoad,
"Easement" => RoadFrontageType::Easement,
"Freeway" => RoadFrontageType::Freeway,
"Highway" => RoadFrontageType::Highway,
"Interstate" => RoadFrontageType::Interstate,
"None" => RoadFrontageType::None,
"Other" => RoadFrontageType::Other,
"Private Road" => RoadFrontageType::PrivateRoad,
"See Remarks" => RoadFrontageType::SeeRemarks,
"State Road" => RoadFrontageType::StateRoad,
"Unimproved" => RoadFrontageType::Unimproved,
_ => RoadFrontageType::OpenEnumeration(s.into()),
}
}
fn from_string(s: String) -> RoadFrontageType {
match s.as_ref() {
"Alley" => RoadFrontageType::Alley,
"City Street" => RoadFrontageType::CityStreet,
"County Road" => RoadFrontageType::CountyRoad,
"Easement" => RoadFrontageType::Easement,
"Freeway" => RoadFrontageType::Freeway,
"Highway" => RoadFrontageType::Highway,
"Interstate" => RoadFrontageType::Interstate,
"None" => RoadFrontageType::None,
"Other" => RoadFrontageType::Other,
"Private Road" => RoadFrontageType::PrivateRoad,
"See Remarks" => RoadFrontageType::SeeRemarks,
"State Road" => RoadFrontageType::StateRoad,
"Unimproved" => RoadFrontageType::Unimproved,
_ => RoadFrontageType::OpenEnumeration(s),
}
}
fn to_str(&self) -> &str {
match self {
RoadFrontageType::Alley => "Alley",
RoadFrontageType::CityStreet => "City Street",
RoadFrontageType::CountyRoad => "County Road",
RoadFrontageType::Easement => "Easement",
RoadFrontageType::Freeway => "Freeway",
RoadFrontageType::Highway => "Highway",
RoadFrontageType::Interstate => "Interstate",
RoadFrontageType::None => "None",
RoadFrontageType::Other => "Other",
RoadFrontageType::PrivateRoad => "Private Road",
RoadFrontageType::SeeRemarks => "See Remarks",
RoadFrontageType::StateRoad => "State Road",
RoadFrontageType::Unimproved => "Unimproved",
RoadFrontageType::OpenEnumeration(ref s) => s,
}
}
fn into_string(self) -> String {
match self {
RoadFrontageType::Alley => "Alley".into(),
RoadFrontageType::CityStreet => "City Street".into(),
RoadFrontageType::CountyRoad => "County Road".into(),
RoadFrontageType::Easement => "Easement".into(),
RoadFrontageType::Freeway => "Freeway".into(),
RoadFrontageType::Highway => "Highway".into(),
RoadFrontageType::Interstate => "Interstate".into(),
RoadFrontageType::None => "None".into(),
RoadFrontageType::Other => "Other".into(),
RoadFrontageType::PrivateRoad => "Private Road".into(),
RoadFrontageType::SeeRemarks => "See Remarks".into(),
RoadFrontageType::StateRoad => "State Road".into(),
RoadFrontageType::Unimproved => "Unimproved".into(),
RoadFrontageType::OpenEnumeration(s) => s,
}
}
fn fallback_value(&self) -> Option<&str> {
match self {
RoadFrontageType::OpenEnumeration(ref s) => Some(s),
_ => None,
}
}
}
impl From<String> for RoadFrontageType {
fn from(s: String) -> RoadFrontageType {
match s.as_ref() {
"Alley" => RoadFrontageType::Alley,
"City Street" => RoadFrontageType::CityStreet,
"County Road" => RoadFrontageType::CountyRoad,
"Easement" => RoadFrontageType::Easement,
"Freeway" => RoadFrontageType::Freeway,
"Highway" => RoadFrontageType::Highway,
"Interstate" => RoadFrontageType::Interstate,
"None" => RoadFrontageType::None,
"Other" => RoadFrontageType::Other,
"Private Road" => RoadFrontageType::PrivateRoad,
"See Remarks" => RoadFrontageType::SeeRemarks,
"State Road" => RoadFrontageType::StateRoad,
"Unimproved" => RoadFrontageType::Unimproved,
_ => RoadFrontageType::OpenEnumeration(s),
}
}
}
impl From<&str> for RoadFrontageType {
fn from(s: &str) -> RoadFrontageType {
match s {
"Alley" => RoadFrontageType::Alley,
"City Street" => RoadFrontageType::CityStreet,
"County Road" => RoadFrontageType::CountyRoad,
"Easement" => RoadFrontageType::Easement,
"Freeway" => RoadFrontageType::Freeway,
"Highway" => RoadFrontageType::Highway,
"Interstate" => RoadFrontageType::Interstate,
"None" => RoadFrontageType::None,
"Other" => RoadFrontageType::Other,
"Private Road" => RoadFrontageType::PrivateRoad,
"See Remarks" => RoadFrontageType::SeeRemarks,
"State Road" => RoadFrontageType::StateRoad,
"Unimproved" => RoadFrontageType::Unimproved,
_ => RoadFrontageType::OpenEnumeration(s.into()),
}
}
}
impl<'a> From<&'a RoadFrontageType> for &'a str {
fn from(s: &'a RoadFrontageType) -> &'a str {
match s {
RoadFrontageType::Alley => "Alley",
RoadFrontageType::CityStreet => "City Street",
RoadFrontageType::CountyRoad => "County Road",
RoadFrontageType::Easement => "Easement",
RoadFrontageType::Freeway => "Freeway",
RoadFrontageType::Highway => "Highway",
RoadFrontageType::Interstate => "Interstate",
RoadFrontageType::None => "None",
RoadFrontageType::Other => "Other",
RoadFrontageType::PrivateRoad => "Private Road",
RoadFrontageType::SeeRemarks => "See Remarks",
RoadFrontageType::StateRoad => "State Road",
RoadFrontageType::Unimproved => "Unimproved",
RoadFrontageType::OpenEnumeration(s) => s,
}
}
}
impl Serialize for RoadFrontageType {
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 RoadFrontageType {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(From::from(s))
}
}