use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum Fencing {
BackYard,
BarbedWire,
Block,
Brick,
ChainLink,
CrossFenced,
Electric,
Fenced,
FrontYard,
Full,
Gate,
Invisible,
Masonry,
None,
Other,
Partial,
PartialCross,
Perimeter,
Pipe,
Privacy,
Security,
SeeRemarks,
SlumpStone,
SplitRail,
Stone,
Vinyl,
Wire,
Wood,
WroughtIron,
OpenEnumeration(String),
}
impl crate::ResoEnumeration for Fencing {
fn from_str(s: &str) -> Fencing {
match s {
"Back Yard" => Fencing::BackYard,
"Barbed Wire" => Fencing::BarbedWire,
"Block" => Fencing::Block,
"Brick" => Fencing::Brick,
"Chain Link" => Fencing::ChainLink,
"Cross Fenced" => Fencing::CrossFenced,
"Electric" => Fencing::Electric,
"Fenced" => Fencing::Fenced,
"Front Yard" => Fencing::FrontYard,
"Full" => Fencing::Full,
"Gate" => Fencing::Gate,
"Invisible" => Fencing::Invisible,
"Masonry" => Fencing::Masonry,
"None" => Fencing::None,
"Other" => Fencing::Other,
"Partial" => Fencing::Partial,
"Partial Cross" => Fencing::PartialCross,
"Perimeter" => Fencing::Perimeter,
"Pipe" => Fencing::Pipe,
"Privacy" => Fencing::Privacy,
"Security" => Fencing::Security,
"See Remarks" => Fencing::SeeRemarks,
"Slump Stone" => Fencing::SlumpStone,
"Split Rail" => Fencing::SplitRail,
"Stone" => Fencing::Stone,
"Vinyl" => Fencing::Vinyl,
"Wire" => Fencing::Wire,
"Wood" => Fencing::Wood,
"Wrought Iron" => Fencing::WroughtIron,
_ => Fencing::OpenEnumeration(s.into()),
}
}
fn from_string(s: String) -> Fencing {
match s.as_ref() {
"Back Yard" => Fencing::BackYard,
"Barbed Wire" => Fencing::BarbedWire,
"Block" => Fencing::Block,
"Brick" => Fencing::Brick,
"Chain Link" => Fencing::ChainLink,
"Cross Fenced" => Fencing::CrossFenced,
"Electric" => Fencing::Electric,
"Fenced" => Fencing::Fenced,
"Front Yard" => Fencing::FrontYard,
"Full" => Fencing::Full,
"Gate" => Fencing::Gate,
"Invisible" => Fencing::Invisible,
"Masonry" => Fencing::Masonry,
"None" => Fencing::None,
"Other" => Fencing::Other,
"Partial" => Fencing::Partial,
"Partial Cross" => Fencing::PartialCross,
"Perimeter" => Fencing::Perimeter,
"Pipe" => Fencing::Pipe,
"Privacy" => Fencing::Privacy,
"Security" => Fencing::Security,
"See Remarks" => Fencing::SeeRemarks,
"Slump Stone" => Fencing::SlumpStone,
"Split Rail" => Fencing::SplitRail,
"Stone" => Fencing::Stone,
"Vinyl" => Fencing::Vinyl,
"Wire" => Fencing::Wire,
"Wood" => Fencing::Wood,
"Wrought Iron" => Fencing::WroughtIron,
_ => Fencing::OpenEnumeration(s),
}
}
fn to_str(&self) -> &str {
match self {
Fencing::BackYard => "Back Yard",
Fencing::BarbedWire => "Barbed Wire",
Fencing::Block => "Block",
Fencing::Brick => "Brick",
Fencing::ChainLink => "Chain Link",
Fencing::CrossFenced => "Cross Fenced",
Fencing::Electric => "Electric",
Fencing::Fenced => "Fenced",
Fencing::FrontYard => "Front Yard",
Fencing::Full => "Full",
Fencing::Gate => "Gate",
Fencing::Invisible => "Invisible",
Fencing::Masonry => "Masonry",
Fencing::None => "None",
Fencing::Other => "Other",
Fencing::Partial => "Partial",
Fencing::PartialCross => "Partial Cross",
Fencing::Perimeter => "Perimeter",
Fencing::Pipe => "Pipe",
Fencing::Privacy => "Privacy",
Fencing::Security => "Security",
Fencing::SeeRemarks => "See Remarks",
Fencing::SlumpStone => "Slump Stone",
Fencing::SplitRail => "Split Rail",
Fencing::Stone => "Stone",
Fencing::Vinyl => "Vinyl",
Fencing::Wire => "Wire",
Fencing::Wood => "Wood",
Fencing::WroughtIron => "Wrought Iron",
Fencing::OpenEnumeration(ref s) => s,
}
}
fn into_string(self) -> String {
match self {
Fencing::BackYard => "Back Yard".into(),
Fencing::BarbedWire => "Barbed Wire".into(),
Fencing::Block => "Block".into(),
Fencing::Brick => "Brick".into(),
Fencing::ChainLink => "Chain Link".into(),
Fencing::CrossFenced => "Cross Fenced".into(),
Fencing::Electric => "Electric".into(),
Fencing::Fenced => "Fenced".into(),
Fencing::FrontYard => "Front Yard".into(),
Fencing::Full => "Full".into(),
Fencing::Gate => "Gate".into(),
Fencing::Invisible => "Invisible".into(),
Fencing::Masonry => "Masonry".into(),
Fencing::None => "None".into(),
Fencing::Other => "Other".into(),
Fencing::Partial => "Partial".into(),
Fencing::PartialCross => "Partial Cross".into(),
Fencing::Perimeter => "Perimeter".into(),
Fencing::Pipe => "Pipe".into(),
Fencing::Privacy => "Privacy".into(),
Fencing::Security => "Security".into(),
Fencing::SeeRemarks => "See Remarks".into(),
Fencing::SlumpStone => "Slump Stone".into(),
Fencing::SplitRail => "Split Rail".into(),
Fencing::Stone => "Stone".into(),
Fencing::Vinyl => "Vinyl".into(),
Fencing::Wire => "Wire".into(),
Fencing::Wood => "Wood".into(),
Fencing::WroughtIron => "Wrought Iron".into(),
Fencing::OpenEnumeration(s) => s,
}
}
fn fallback_value(&self) -> Option<&str> {
match self {
Fencing::OpenEnumeration(ref s) => Some(s),
_ => None,
}
}
}
impl From<String> for Fencing {
fn from(s: String) -> Fencing {
match s.as_ref() {
"Back Yard" => Fencing::BackYard,
"Barbed Wire" => Fencing::BarbedWire,
"Block" => Fencing::Block,
"Brick" => Fencing::Brick,
"Chain Link" => Fencing::ChainLink,
"Cross Fenced" => Fencing::CrossFenced,
"Electric" => Fencing::Electric,
"Fenced" => Fencing::Fenced,
"Front Yard" => Fencing::FrontYard,
"Full" => Fencing::Full,
"Gate" => Fencing::Gate,
"Invisible" => Fencing::Invisible,
"Masonry" => Fencing::Masonry,
"None" => Fencing::None,
"Other" => Fencing::Other,
"Partial" => Fencing::Partial,
"Partial Cross" => Fencing::PartialCross,
"Perimeter" => Fencing::Perimeter,
"Pipe" => Fencing::Pipe,
"Privacy" => Fencing::Privacy,
"Security" => Fencing::Security,
"See Remarks" => Fencing::SeeRemarks,
"Slump Stone" => Fencing::SlumpStone,
"Split Rail" => Fencing::SplitRail,
"Stone" => Fencing::Stone,
"Vinyl" => Fencing::Vinyl,
"Wire" => Fencing::Wire,
"Wood" => Fencing::Wood,
"Wrought Iron" => Fencing::WroughtIron,
_ => Fencing::OpenEnumeration(s),
}
}
}
impl From<&str> for Fencing {
fn from(s: &str) -> Fencing {
match s {
"Back Yard" => Fencing::BackYard,
"Barbed Wire" => Fencing::BarbedWire,
"Block" => Fencing::Block,
"Brick" => Fencing::Brick,
"Chain Link" => Fencing::ChainLink,
"Cross Fenced" => Fencing::CrossFenced,
"Electric" => Fencing::Electric,
"Fenced" => Fencing::Fenced,
"Front Yard" => Fencing::FrontYard,
"Full" => Fencing::Full,
"Gate" => Fencing::Gate,
"Invisible" => Fencing::Invisible,
"Masonry" => Fencing::Masonry,
"None" => Fencing::None,
"Other" => Fencing::Other,
"Partial" => Fencing::Partial,
"Partial Cross" => Fencing::PartialCross,
"Perimeter" => Fencing::Perimeter,
"Pipe" => Fencing::Pipe,
"Privacy" => Fencing::Privacy,
"Security" => Fencing::Security,
"See Remarks" => Fencing::SeeRemarks,
"Slump Stone" => Fencing::SlumpStone,
"Split Rail" => Fencing::SplitRail,
"Stone" => Fencing::Stone,
"Vinyl" => Fencing::Vinyl,
"Wire" => Fencing::Wire,
"Wood" => Fencing::Wood,
"Wrought Iron" => Fencing::WroughtIron,
_ => Fencing::OpenEnumeration(s.into()),
}
}
}
impl<'a> From<&'a Fencing> for &'a str {
fn from(s: &'a Fencing) -> &'a str {
match s {
Fencing::BackYard => "Back Yard",
Fencing::BarbedWire => "Barbed Wire",
Fencing::Block => "Block",
Fencing::Brick => "Brick",
Fencing::ChainLink => "Chain Link",
Fencing::CrossFenced => "Cross Fenced",
Fencing::Electric => "Electric",
Fencing::Fenced => "Fenced",
Fencing::FrontYard => "Front Yard",
Fencing::Full => "Full",
Fencing::Gate => "Gate",
Fencing::Invisible => "Invisible",
Fencing::Masonry => "Masonry",
Fencing::None => "None",
Fencing::Other => "Other",
Fencing::Partial => "Partial",
Fencing::PartialCross => "Partial Cross",
Fencing::Perimeter => "Perimeter",
Fencing::Pipe => "Pipe",
Fencing::Privacy => "Privacy",
Fencing::Security => "Security",
Fencing::SeeRemarks => "See Remarks",
Fencing::SlumpStone => "Slump Stone",
Fencing::SplitRail => "Split Rail",
Fencing::Stone => "Stone",
Fencing::Vinyl => "Vinyl",
Fencing::Wire => "Wire",
Fencing::Wood => "Wood",
Fencing::WroughtIron => "Wrought Iron",
Fencing::OpenEnumeration(s) => s,
}
}
}
impl Serialize for Fencing {
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 Fencing {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(From::from(s))
}
}