1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
/*!
Provides a classifier for UN M49 regions.
*/
use codes_common::unknown_value;
use std::{fmt::Display, str::FromStr};
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
// ------------------------------------------------------------------------------------------------
// Public Macros
// ------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------
// Public Types
// ------------------------------------------------------------------------------------------------
///
/// This enumeration is derived from the column headings in the M49 downloadable CSV file.
///
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
pub enum RegionKind {
Global,
Region,
SubRegion,
IntermediateRegion,
Country,
Area,
}
// ------------------------------------------------------------------------------------------------
// Public Functions
// ------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------
// Private Types
// ------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------
// Implementations
// ------------------------------------------------------------------------------------------------
impl Display for RegionKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"{}",
match self {
Self::Global => "Global",
Self::Region => "Region",
Self::SubRegion => "SubRegion",
Self::IntermediateRegion => "IntermediateRegion",
Self::Country => "Country",
Self::Area => "Area",
}
)
}
}
impl FromStr for RegionKind {
type Err = super::RegionClassificationCodeError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"Global" => Ok(Self::Global),
"Region" => Ok(Self::Region),
"SubRegion" => Ok(Self::SubRegion),
"IntermediateRegion" => Ok(Self::IntermediateRegion),
"Country" => Ok(Self::Country),
"Area" => Ok(Self::Area),
_ => Err(unknown_value("RegionKind", s)),
}
}
}
// ------------------------------------------------------------------------------------------------
// Private Functions
// ------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------
// Modules
// ------------------------------------------------------------------------------------------------