1crate::ix!();
3
4impl TryFrom<Country> for WorldRegion {
6
7 type Error = WorldRegionConversionError;
8
9 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
45impl 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
63impl 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}