use crate::message::MessageID;
mod ephemeris; mod monument; mod solutions;
pub use ephemeris::{
EphemerisFrame, GALEphemeris, GLOEphemeris, GPSEphemeris, GPSRaw, SBASEphemeris,
};
pub use monument::{GeoStringFrame, MonumentGeoMetadata, MonumentGeoRecord};
pub use solutions::{
PositionEcef3d, PositionGeo3d, Solutions, SolutionsFrame, TemporalSolution, Velocity3d,
VelocityNED3d,
};
#[derive(Debug, Clone, PartialEq)]
pub enum Record {
MonumentGeo(MonumentGeoRecord),
EphemerisFrame(EphemerisFrame),
Solutions(Solutions),
}
impl From<MonumentGeoRecord> for Record {
fn from(geo: MonumentGeoRecord) -> Self {
Self::MonumentGeo(geo)
}
}
impl From<EphemerisFrame> for Record {
fn from(fr: EphemerisFrame) -> Self {
Self::EphemerisFrame(fr)
}
}
impl Default for Record {
fn default() -> Self {
Self::MonumentGeo(Default::default())
}
}
impl Record {
pub fn new_monument_geo(r: MonumentGeoRecord) -> Self {
Self::MonumentGeo(r)
}
pub fn new_ephemeris_frame(fr: EphemerisFrame) -> Self {
Self::EphemerisFrame(fr)
}
pub fn new_solutions(sol: Solutions) -> Self {
Self::Solutions(sol)
}
pub fn as_monument_geo(&self) -> Option<&MonumentGeoRecord> {
match self {
Self::MonumentGeo(r) => Some(r),
_ => None,
}
}
pub fn as_ephemeris(&self) -> Option<&EphemerisFrame> {
match self {
Self::EphemerisFrame(fr) => Some(fr),
_ => None,
}
}
pub fn as_solutions(&self) -> Option<&Solutions> {
match self {
Self::Solutions(sol) => Some(sol),
_ => None,
}
}
pub(crate) fn to_message_id(&self) -> MessageID {
match self {
Self::EphemerisFrame(_) => MessageID::Ephemeris,
Self::MonumentGeo(_) => MessageID::SiteMonumentMarker,
Self::Solutions(_) => MessageID::ProcessedSolutions,
}
}
pub(crate) fn encoding_size(&self) -> usize {
match self {
Self::Solutions(sol) => sol.encoding_size(),
Self::EphemerisFrame(fr) => fr.encoding_size(),
Self::MonumentGeo(geo) => geo.encoding_size(),
}
}
}