use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum MemberType {
Assistant,
AssociationStaff,
DesignatedREALTORAppraiser,
DesignatedREALTORParticipant,
LicensedAssistant,
MLSOnlyAppraiser,
MLSOnlyBroker,
MLSOnlySalesperson,
MLSStaff,
NonMemberVendor,
OfficeManager,
REALTORAppraiser,
REALTORSalesperson,
UnlicensedAssistant,
OpenEnumeration(String),
}
impl crate::ResoEnumeration for MemberType {
fn from_str(s: &str) -> MemberType {
match s {
"Assistant" => MemberType::Assistant,
"Association Staff" => MemberType::AssociationStaff,
"Designated REALTOR Appraiser" => MemberType::DesignatedREALTORAppraiser,
"Designated REALTOR Participant" => MemberType::DesignatedREALTORParticipant,
"Licensed Assistant" => MemberType::LicensedAssistant,
"MLS Only Appraiser" => MemberType::MLSOnlyAppraiser,
"MLS Only Broker" => MemberType::MLSOnlyBroker,
"MLS Only Salesperson" => MemberType::MLSOnlySalesperson,
"MLS Staff" => MemberType::MLSStaff,
"Non Member/Vendor" => MemberType::NonMemberVendor,
"Office Manager" => MemberType::OfficeManager,
"REALTOR Appraiser" => MemberType::REALTORAppraiser,
"REALTOR Salesperson" => MemberType::REALTORSalesperson,
"Unlicensed Assistant" => MemberType::UnlicensedAssistant,
_ => MemberType::OpenEnumeration(s.into()),
}
}
fn from_string(s: String) -> MemberType {
match s.as_ref() {
"Assistant" => MemberType::Assistant,
"Association Staff" => MemberType::AssociationStaff,
"Designated REALTOR Appraiser" => MemberType::DesignatedREALTORAppraiser,
"Designated REALTOR Participant" => MemberType::DesignatedREALTORParticipant,
"Licensed Assistant" => MemberType::LicensedAssistant,
"MLS Only Appraiser" => MemberType::MLSOnlyAppraiser,
"MLS Only Broker" => MemberType::MLSOnlyBroker,
"MLS Only Salesperson" => MemberType::MLSOnlySalesperson,
"MLS Staff" => MemberType::MLSStaff,
"Non Member/Vendor" => MemberType::NonMemberVendor,
"Office Manager" => MemberType::OfficeManager,
"REALTOR Appraiser" => MemberType::REALTORAppraiser,
"REALTOR Salesperson" => MemberType::REALTORSalesperson,
"Unlicensed Assistant" => MemberType::UnlicensedAssistant,
_ => MemberType::OpenEnumeration(s),
}
}
fn to_str(&self) -> &str {
match self {
MemberType::Assistant => "Assistant",
MemberType::AssociationStaff => "Association Staff",
MemberType::DesignatedREALTORAppraiser => "Designated REALTOR Appraiser",
MemberType::DesignatedREALTORParticipant => "Designated REALTOR Participant",
MemberType::LicensedAssistant => "Licensed Assistant",
MemberType::MLSOnlyAppraiser => "MLS Only Appraiser",
MemberType::MLSOnlyBroker => "MLS Only Broker",
MemberType::MLSOnlySalesperson => "MLS Only Salesperson",
MemberType::MLSStaff => "MLS Staff",
MemberType::NonMemberVendor => "Non Member/Vendor",
MemberType::OfficeManager => "Office Manager",
MemberType::REALTORAppraiser => "REALTOR Appraiser",
MemberType::REALTORSalesperson => "REALTOR Salesperson",
MemberType::UnlicensedAssistant => "Unlicensed Assistant",
MemberType::OpenEnumeration(ref s) => s,
}
}
fn into_string(self) -> String {
match self {
MemberType::Assistant => "Assistant".into(),
MemberType::AssociationStaff => "Association Staff".into(),
MemberType::DesignatedREALTORAppraiser => "Designated REALTOR Appraiser".into(),
MemberType::DesignatedREALTORParticipant => "Designated REALTOR Participant".into(),
MemberType::LicensedAssistant => "Licensed Assistant".into(),
MemberType::MLSOnlyAppraiser => "MLS Only Appraiser".into(),
MemberType::MLSOnlyBroker => "MLS Only Broker".into(),
MemberType::MLSOnlySalesperson => "MLS Only Salesperson".into(),
MemberType::MLSStaff => "MLS Staff".into(),
MemberType::NonMemberVendor => "Non Member/Vendor".into(),
MemberType::OfficeManager => "Office Manager".into(),
MemberType::REALTORAppraiser => "REALTOR Appraiser".into(),
MemberType::REALTORSalesperson => "REALTOR Salesperson".into(),
MemberType::UnlicensedAssistant => "Unlicensed Assistant".into(),
MemberType::OpenEnumeration(s) => s,
}
}
fn fallback_value(&self) -> Option<&str> {
match self {
MemberType::OpenEnumeration(ref s) => Some(s),
_ => None,
}
}
}
impl From<String> for MemberType {
fn from(s: String) -> MemberType {
match s.as_ref() {
"Assistant" => MemberType::Assistant,
"Association Staff" => MemberType::AssociationStaff,
"Designated REALTOR Appraiser" => MemberType::DesignatedREALTORAppraiser,
"Designated REALTOR Participant" => MemberType::DesignatedREALTORParticipant,
"Licensed Assistant" => MemberType::LicensedAssistant,
"MLS Only Appraiser" => MemberType::MLSOnlyAppraiser,
"MLS Only Broker" => MemberType::MLSOnlyBroker,
"MLS Only Salesperson" => MemberType::MLSOnlySalesperson,
"MLS Staff" => MemberType::MLSStaff,
"Non Member/Vendor" => MemberType::NonMemberVendor,
"Office Manager" => MemberType::OfficeManager,
"REALTOR Appraiser" => MemberType::REALTORAppraiser,
"REALTOR Salesperson" => MemberType::REALTORSalesperson,
"Unlicensed Assistant" => MemberType::UnlicensedAssistant,
_ => MemberType::OpenEnumeration(s),
}
}
}
impl From<&str> for MemberType {
fn from(s: &str) -> MemberType {
match s {
"Assistant" => MemberType::Assistant,
"Association Staff" => MemberType::AssociationStaff,
"Designated REALTOR Appraiser" => MemberType::DesignatedREALTORAppraiser,
"Designated REALTOR Participant" => MemberType::DesignatedREALTORParticipant,
"Licensed Assistant" => MemberType::LicensedAssistant,
"MLS Only Appraiser" => MemberType::MLSOnlyAppraiser,
"MLS Only Broker" => MemberType::MLSOnlyBroker,
"MLS Only Salesperson" => MemberType::MLSOnlySalesperson,
"MLS Staff" => MemberType::MLSStaff,
"Non Member/Vendor" => MemberType::NonMemberVendor,
"Office Manager" => MemberType::OfficeManager,
"REALTOR Appraiser" => MemberType::REALTORAppraiser,
"REALTOR Salesperson" => MemberType::REALTORSalesperson,
"Unlicensed Assistant" => MemberType::UnlicensedAssistant,
_ => MemberType::OpenEnumeration(s.into()),
}
}
}
impl<'a> From<&'a MemberType> for &'a str {
fn from(s: &'a MemberType) -> &'a str {
match s {
MemberType::Assistant => "Assistant",
MemberType::AssociationStaff => "Association Staff",
MemberType::DesignatedREALTORAppraiser => "Designated REALTOR Appraiser",
MemberType::DesignatedREALTORParticipant => "Designated REALTOR Participant",
MemberType::LicensedAssistant => "Licensed Assistant",
MemberType::MLSOnlyAppraiser => "MLS Only Appraiser",
MemberType::MLSOnlyBroker => "MLS Only Broker",
MemberType::MLSOnlySalesperson => "MLS Only Salesperson",
MemberType::MLSStaff => "MLS Staff",
MemberType::NonMemberVendor => "Non Member/Vendor",
MemberType::OfficeManager => "Office Manager",
MemberType::REALTORAppraiser => "REALTOR Appraiser",
MemberType::REALTORSalesperson => "REALTOR Salesperson",
MemberType::UnlicensedAssistant => "Unlicensed Assistant",
MemberType::OpenEnumeration(s) => s,
}
}
}
impl Serialize for MemberType {
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 MemberType {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(From::from(s))
}
}