use bincode::{Decode, Encode};
use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize, Encode, Decode)]
pub enum ClockSource {
LocalMonotonic,
Mock,
LocalRtc,
Gnss,
AtomicClock,
TerrestrialRadio,
Ptp,
Ntp,
HandSet,
InternalOscillator,
Other(u8),
#[default]
Unknown,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize, Encode, Decode)]
pub enum ClockEpoch {
Local,
Tai {
tai_minus_utc_seconds: Option<i16>,
},
Gps,
Utc,
Other(u32),
#[default]
Unknown,
}
#[cfg(feature = "clock-sync")]
impl ClockEpoch {
pub(crate) fn same_timeline(self, other: Self) -> bool {
matches!((self, other), (Self::Tai { .. }, Self::Tai { .. })) || self == other
}
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize, Encode, Decode)]
pub struct ClockOrigin {
pub source: ClockSource,
pub epoch: ClockEpoch,
}