use crate::constants::*;
#[cfg(any(feature = "tetrads", feature = "quadrants"))]
pub(crate) enum Suffix {
#[cfg(feature = "quadrants")]
Quadrant,
#[cfg(feature = "tetrads")]
Tetrad,
}
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub enum Resolution {
_100km,
#[cfg(feature = "quadrants")]
_50km,
_10km,
#[cfg(feature = "quadrants")]
_5km,
#[cfg(feature = "tetrads")]
_2km,
_1km,
#[cfg(feature = "quadrants")]
_500m,
_100m,
#[cfg(feature = "quadrants")]
_50m,
_10m,
#[cfg(feature = "quadrants")]
_5m,
_1m,
}
impl Resolution {
pub fn metres(&self) -> u32 {
match self {
Resolution::_100km => _100KM,
#[cfg(feature = "quadrants")]
Resolution::_50km => _50KM,
Resolution::_10km => _10KM,
#[cfg(feature = "quadrants")]
Resolution::_5km => _5KM,
#[cfg(feature = "tetrads")]
Resolution::_2km => _2KM,
Resolution::_1km => _1KM,
#[cfg(feature = "quadrants")]
Resolution::_500m => _500M,
Resolution::_100m => _100M,
#[cfg(feature = "quadrants")]
Resolution::_50m => _50M,
Resolution::_10m => _10M,
#[cfg(feature = "quadrants")]
Resolution::_5m => _5M,
Resolution::_1m => _1M,
}
}
cfg_select! {
any(feature = "tetrads", feature = "quadrants") => {
pub(crate) fn representation(&self) -> (u32, u8, Option<Suffix>) {
match self {
Resolution::_100km => (_100KM, 0, None),
#[cfg(feature = "quadrants")]
Resolution::_50km => (_100KM, 0, Some(Suffix::Quadrant)),
Resolution::_10km => (_10KM, 2, None),
#[cfg(feature = "quadrants")]
Resolution::_5km => (_10KM, 2, Some(Suffix::Quadrant)),
#[cfg(feature = "tetrads")]
Resolution::_2km => (_10KM, 2, Some(Suffix::Tetrad)),
Resolution::_1km => (_1KM, 4, None),
#[cfg(feature = "quadrants")]
Resolution::_500m => (_1KM, 4, Some(Suffix::Quadrant)),
Resolution::_100m => (_100M, 6, None),
#[cfg(feature = "quadrants")]
Resolution::_50m => (_100M, 6, Some(Suffix::Quadrant)),
Resolution::_10m => (_10M, 8, None),
#[cfg(feature = "quadrants")]
Resolution::_5m => (_10M, 8, Some(Suffix::Quadrant)),
Resolution::_1m => (_1M, 10, None),
}
}
}
_ => {
pub(crate) fn representation(&self) -> (u32, u8) {
match self {
Resolution::_100km => (_100KM, 0),
Resolution::_10km => (_10KM, 2),
Resolution::_1km => (_1KM, 4),
Resolution::_100m => (_100M, 6),
Resolution::_10m => (_10M, 8),
Resolution::_1m => (_1M, 10),
}
}
}
}
}