1continent_code! {
2 #[derive(Debug, Clone)]
3 pub enum ContinentCode {
4 AS => "Asia",
5 AF => "Africa",
6 NA => "North America",
7 SA => "South America",
8 AN => "Antarctica",
9 EU => "Europe",
10 OC | AU => "Oceania",
11 }
12}
13
14#[cfg(test)]
15mod tests {
16 use super::*;
17
18 use alloc::string::ToString as _;
19
20 use csv::ReaderBuilder;
21
22 #[test]
23 fn test_continent_code() {
24 let mut rdr = ReaderBuilder::new()
26 .has_headers(false)
27 .flexible(true)
28 .from_reader(include_str!("../tests/Continent/Area_and_population.csv").as_bytes());
29
30 let mut n = 0;
31 for record in rdr.records().skip(2) {
32 let record = record.unwrap();
33 let en_name = &record[0];
34 assert_eq!(en_name.parse::<ContinentCode>().unwrap().en_name(), en_name);
35 n += 1;
36 }
37
38 assert_eq!("AU".parse::<ContinentCode>().unwrap().to_string(), "OC");
39
40 assert_eq!(ContinentCode::VARS.len(), n);
41
42 assert_eq!(ContinentCode::from_en_name("Asia"), Some(ContinentCode::AS));
43 assert_eq!(ContinentCode::AS.en_name(), "Asia");
44
45 assert_eq!(ContinentCode::AS, ContinentCode::AS);
47 assert_eq!(ContinentCode::AS, "AS");
48
49 #[cfg(feature = "serde")]
50 {
51 #[derive(serde::Serialize, serde::Deserialize)]
52 struct Foo {
53 code: ContinentCode,
54 }
55
56 assert_eq!(
57 serde_json::from_str::<Foo>(r#"{"code":"AS"}"#)
58 .unwrap()
59 .code,
60 ContinentCode::AS
61 );
62 assert_eq!(
63 serde_json::to_string(&Foo {
64 code: ContinentCode::AS
65 })
66 .unwrap(),
67 r#"{"code":"AS"}"#
68 );
69 }
70 }
71}