use crate::count_tts;
use core::fmt;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
macro_rules! define_enum_with_count {
(
$(#[$outer:meta])*
enum $Name:ident { $(
$(#[$variant:meta])*
$Variant:ident
),* $(,)* }
) => {
$(#[$outer])*
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "defmt-03", derive(defmt::Format))]
#[derive(PartialEq, Debug, Hash, Eq, Clone, Copy)]
#[repr(u8)]
pub enum $Name {
$($Variant),*
}
impl $Name {
pub(crate) const COUNT: usize = count_tts!($($Variant),*);
pub const ALL_TYPES: [$Name; $Name::COUNT] = [
$($Name::$Variant),*
];
}
};
}
define_enum_with_count!(
enum GnssType {
Beidou,
Galileo,
Gps,
Glonass,
NavIC,
Qzss,
}
);
impl fmt::Display for GnssType {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
GnssType::Beidou => write!(f, "Beidou"),
GnssType::Galileo => write!(f, "Galileo"),
GnssType::Gps => write!(f, "GPS"),
GnssType::Glonass => write!(f, "GLONASS"),
GnssType::NavIC => write!(f, "NavIC"),
GnssType::Qzss => write!(f, "QZSS"),
}
}
}