1pub mod states;
2use std::fmt::Display;
3
4pub use states::State;
5
6#[derive(Debug, Clone)]
7pub struct ConversionError;
8
9impl Display for ConversionError {
10 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11 write!(f, "Provided value was not an abbreviation or state name of the USA")
12 }
13}
14
15#[cfg(test)]
16mod tests {
17 use super::*;
18
19 #[test]
20 fn test_display() {
21 assert_eq!(State::California.to_string(), "California");
22 assert_eq!(State::NewYork.to_string(), "New York");
23 }
24
25 #[test]
26 fn test_abbreviation() {
27 assert_eq!(State::California.abbreviation(), "CA");
28 assert_eq!(State::NewYork.abbreviation(), "NY");
29 }
30
31 #[test]
32 #[cfg(feature = "serde_abbreviation")]
33 fn test_serialize_abbreviation() {
34 let state = State::California;
35 let serialized = serde_json::to_string(&state).unwrap();
36 assert_eq!(serialized, "\"CA\"");
37 }
38
39 #[test]
40 #[cfg(all(feature = "serde1", not(feature = "serde_abbreviation")))]
41 fn test_serialize_display() {
42 let state = State::California;
43 let serialized = serde_json::to_string(&state).unwrap();
44 assert_eq!(serialized, "\"California\"");
45 }
46
47 #[test]
48 #[cfg(feature = "serde_abbreviation")]
49 fn test_deserialize_abbreviation() {
50 let deserialized: State = serde_json::from_str("\"CA\"").unwrap();
51 assert_eq!(deserialized, State::California);
52 }
53
54 #[test]
55 #[cfg(all(feature = "serde1", not(feature = "serde_abbreviation")))]
56 fn test_deserialize_display() {
57 let deserialized: State = serde_json::from_str("\"California\"").unwrap();
58 assert_eq!(deserialized, State::California);
59 }
60}