world_region/
country.rs

1// ---------------- [ File: src/country.rs ]
2crate::ix!();
3
4// TryFrom<Country> for WorldRegion
5impl TryFrom<Country> for WorldRegion {
6
7    type Error = WorldRegionConversionError;
8
9    // Try each region set in turn
10    // If africa::AfricaRegion::try_from(c) works, we have an Africa variant, etc.
11    fn try_from(c: Country) -> Result<Self, Self::Error> {
12
13        if let Ok(a) = NorthAmericaRegion::try_from(c.clone()) {
14            return Ok(WorldRegion::NorthAmerica(a));
15        } 
16
17        if let Ok(a) = CentralAmericaRegion::try_from(c.clone()) {
18            return Ok(WorldRegion::CentralAmerica(a));
19        } 
20
21        if let Ok(a) = SouthAmericaRegion::try_from(c.clone()) {
22            return Ok(WorldRegion::SouthAmerica(a));
23        } 
24
25        if let Ok(a) = EuropeRegion::try_from(c.clone()) {
26            return Ok(WorldRegion::Europe(a));
27        } 
28
29        if let Ok(a) = AfricaRegion::try_from(c.clone()) {
30            return Ok(WorldRegion::Africa(a));
31        }
32
33        if let Ok(a) = AsiaRegion::try_from(c.clone()) {
34            return Ok(WorldRegion::Asia(a));
35        } 
36
37        if let Ok(a) = AustraliaOceaniaAntarcticaRegion::try_from(c.clone()) {
38            return Ok(WorldRegion::AustraliaOceaniaAntarctica(a));
39        }
40
41        Err(WorldRegionConversionError::NotRepresented { country: c })
42    }
43}
44
45// TryFrom<WorldRegion> for Country
46impl TryFrom<WorldRegion> for Country {
47
48    type Error = WorldRegionConversionError;
49
50    fn try_from(value: WorldRegion) -> Result<Self, Self::Error> {
51        match value {
52            WorldRegion::NorthAmerica(r)               => Ok(Country::try_from(r)?),
53            WorldRegion::CentralAmerica(r)             => Ok(Country::try_from(r)?),
54            WorldRegion::SouthAmerica(r)               => Ok(Country::try_from(r)?),
55            WorldRegion::Europe(r)                     => Ok(Country::try_from(r)?),
56            WorldRegion::Africa(r)                     => Ok(Country::try_from(r)?),
57            WorldRegion::Asia(r)                       => Ok(Country::try_from(r)?),
58            WorldRegion::AustraliaOceaniaAntarctica(r) => Ok(Country::try_from(r)?),
59        }
60    }
61}
62
63// ISO code conversions
64impl TryFrom<WorldRegion> for Iso3166Alpha2 {
65    type Error = WorldRegionConversionError;
66
67    fn try_from(value: WorldRegion) -> Result<Self, Self::Error> {
68        let country: Country = value.try_into()?;
69        Ok(country.alpha2())
70    }
71}
72
73impl TryFrom<WorldRegion> for Iso3166Alpha3 {
74    type Error = WorldRegionConversionError;
75
76    fn try_from(value: WorldRegion) -> Result<Self, Self::Error> {
77        let country: Country = value.try_into()?;
78        Ok(country.alpha3())
79    }
80}
81
82impl TryFrom<WorldRegion> for CountryCode {
83    type Error = WorldRegionConversionError;
84
85    fn try_from(value: WorldRegion) -> Result<Self, Self::Error> {
86        let a2: Iso3166Alpha2 = value.try_into()?;
87        Ok(CountryCode::Alpha2(a2))
88    }
89}