1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Eq, PartialEq)]
7pub enum SpecialListingConditions {
8 Auction,
10
11 BankruptcyProperty,
13
14 HUDOwned,
16
17 InForeclosure,
19
20 NoticeOfDefault,
22
23 ProbateListing,
25
26 RealEstateOwned,
28
29 ShortSale,
31
32 Standard,
34
35 ThirdPartyApproval,
37
38 OpenEnumeration(String),
40}
41
42impl crate::ResoEnumeration for SpecialListingConditions {
43 fn from_str(s: &str) -> SpecialListingConditions {
44 match s {
45 "Auction" => SpecialListingConditions::Auction,
46
47 "Bankruptcy Property" => SpecialListingConditions::BankruptcyProperty,
48
49 "HUD Owned" => SpecialListingConditions::HUDOwned,
50
51 "In Foreclosure" => SpecialListingConditions::InForeclosure,
52
53 "Notice Of Default" => SpecialListingConditions::NoticeOfDefault,
54
55 "Probate Listing" => SpecialListingConditions::ProbateListing,
56
57 "Real Estate Owned" => SpecialListingConditions::RealEstateOwned,
58
59 "Short Sale" => SpecialListingConditions::ShortSale,
60
61 "Standard" => SpecialListingConditions::Standard,
62
63 "Third Party Approval" => SpecialListingConditions::ThirdPartyApproval,
64
65 _ => SpecialListingConditions::OpenEnumeration(s.into()),
66 }
67 }
68
69 fn from_string(s: String) -> SpecialListingConditions {
70 match s.as_ref() {
71 "Auction" => SpecialListingConditions::Auction,
72
73 "Bankruptcy Property" => SpecialListingConditions::BankruptcyProperty,
74
75 "HUD Owned" => SpecialListingConditions::HUDOwned,
76
77 "In Foreclosure" => SpecialListingConditions::InForeclosure,
78
79 "Notice Of Default" => SpecialListingConditions::NoticeOfDefault,
80
81 "Probate Listing" => SpecialListingConditions::ProbateListing,
82
83 "Real Estate Owned" => SpecialListingConditions::RealEstateOwned,
84
85 "Short Sale" => SpecialListingConditions::ShortSale,
86
87 "Standard" => SpecialListingConditions::Standard,
88
89 "Third Party Approval" => SpecialListingConditions::ThirdPartyApproval,
90
91 _ => SpecialListingConditions::OpenEnumeration(s),
92 }
93 }
94
95 fn to_str(&self) -> &str {
96 match self {
97 SpecialListingConditions::Auction => "Auction",
98
99 SpecialListingConditions::BankruptcyProperty => "Bankruptcy Property",
100
101 SpecialListingConditions::HUDOwned => "HUD Owned",
102
103 SpecialListingConditions::InForeclosure => "In Foreclosure",
104
105 SpecialListingConditions::NoticeOfDefault => "Notice Of Default",
106
107 SpecialListingConditions::ProbateListing => "Probate Listing",
108
109 SpecialListingConditions::RealEstateOwned => "Real Estate Owned",
110
111 SpecialListingConditions::ShortSale => "Short Sale",
112
113 SpecialListingConditions::Standard => "Standard",
114
115 SpecialListingConditions::ThirdPartyApproval => "Third Party Approval",
116
117 SpecialListingConditions::OpenEnumeration(ref s) => s,
118 }
119 }
120
121 fn into_string(self) -> String {
122 match self {
123 SpecialListingConditions::Auction => "Auction".into(),
124
125 SpecialListingConditions::BankruptcyProperty => "Bankruptcy Property".into(),
126
127 SpecialListingConditions::HUDOwned => "HUD Owned".into(),
128
129 SpecialListingConditions::InForeclosure => "In Foreclosure".into(),
130
131 SpecialListingConditions::NoticeOfDefault => "Notice Of Default".into(),
132
133 SpecialListingConditions::ProbateListing => "Probate Listing".into(),
134
135 SpecialListingConditions::RealEstateOwned => "Real Estate Owned".into(),
136
137 SpecialListingConditions::ShortSale => "Short Sale".into(),
138
139 SpecialListingConditions::Standard => "Standard".into(),
140
141 SpecialListingConditions::ThirdPartyApproval => "Third Party Approval".into(),
142
143 SpecialListingConditions::OpenEnumeration(s) => s,
144 }
145 }
146
147 fn fallback_value(&self) -> Option<&str> {
148 match self {
149 SpecialListingConditions::OpenEnumeration(ref s) => Some(s),
150 _ => None,
151 }
152 }
153}
154
155impl From<String> for SpecialListingConditions {
156 fn from(s: String) -> SpecialListingConditions {
157 match s.as_ref() {
158 "Auction" => SpecialListingConditions::Auction,
159
160 "Bankruptcy Property" => SpecialListingConditions::BankruptcyProperty,
161
162 "HUD Owned" => SpecialListingConditions::HUDOwned,
163
164 "In Foreclosure" => SpecialListingConditions::InForeclosure,
165
166 "Notice Of Default" => SpecialListingConditions::NoticeOfDefault,
167
168 "Probate Listing" => SpecialListingConditions::ProbateListing,
169
170 "Real Estate Owned" => SpecialListingConditions::RealEstateOwned,
171
172 "Short Sale" => SpecialListingConditions::ShortSale,
173
174 "Standard" => SpecialListingConditions::Standard,
175
176 "Third Party Approval" => SpecialListingConditions::ThirdPartyApproval,
177
178 _ => SpecialListingConditions::OpenEnumeration(s),
179 }
180 }
181}
182
183impl From<&str> for SpecialListingConditions {
184 fn from(s: &str) -> SpecialListingConditions {
185 match s {
186 "Auction" => SpecialListingConditions::Auction,
187
188 "Bankruptcy Property" => SpecialListingConditions::BankruptcyProperty,
189
190 "HUD Owned" => SpecialListingConditions::HUDOwned,
191
192 "In Foreclosure" => SpecialListingConditions::InForeclosure,
193
194 "Notice Of Default" => SpecialListingConditions::NoticeOfDefault,
195
196 "Probate Listing" => SpecialListingConditions::ProbateListing,
197
198 "Real Estate Owned" => SpecialListingConditions::RealEstateOwned,
199
200 "Short Sale" => SpecialListingConditions::ShortSale,
201
202 "Standard" => SpecialListingConditions::Standard,
203
204 "Third Party Approval" => SpecialListingConditions::ThirdPartyApproval,
205
206 _ => SpecialListingConditions::OpenEnumeration(s.into()),
207 }
208 }
209}
210
211impl<'a> From<&'a SpecialListingConditions> for &'a str {
212 fn from(s: &'a SpecialListingConditions) -> &'a str {
213 match s {
214 SpecialListingConditions::Auction => "Auction",
215
216 SpecialListingConditions::BankruptcyProperty => "Bankruptcy Property",
217
218 SpecialListingConditions::HUDOwned => "HUD Owned",
219
220 SpecialListingConditions::InForeclosure => "In Foreclosure",
221
222 SpecialListingConditions::NoticeOfDefault => "Notice Of Default",
223
224 SpecialListingConditions::ProbateListing => "Probate Listing",
225
226 SpecialListingConditions::RealEstateOwned => "Real Estate Owned",
227
228 SpecialListingConditions::ShortSale => "Short Sale",
229
230 SpecialListingConditions::Standard => "Standard",
231
232 SpecialListingConditions::ThirdPartyApproval => "Third Party Approval",
233
234 SpecialListingConditions::OpenEnumeration(s) => s,
235 }
236 }
237}
238
239impl Serialize for SpecialListingConditions {
240 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
241 where
242 S: serde::Serializer,
243 {
244 serializer.serialize_str(self.into())
245 }
246}
247
248impl<'de> Deserialize<'de> for SpecialListingConditions {
249 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
250 where
251 D: serde::Deserializer<'de>,
252 {
253 let s = String::deserialize(deserializer)?;
254 Ok(From::from(s))
255 }
256}