binex/message/record/
mod.rs1use crate::message::MessageID;
4
5mod ephemeris; mod monument; mod solutions; pub use ephemeris::{
10 EphemerisFrame, GALEphemeris, GLOEphemeris, GPSEphemeris, GPSRaw, SBASEphemeris,
11};
12
13pub use monument::{GeoStringFrame, MonumentGeoMetadata, MonumentGeoRecord};
14
15pub use solutions::{
16 PositionEcef3d, PositionGeo3d, Solutions, SolutionsFrame, TemporalSolution, Velocity3d,
17 VelocityNED3d,
18};
19
20#[derive(Debug, Clone, PartialEq)]
21pub enum Record {
22 MonumentGeo(MonumentGeoRecord),
25 EphemerisFrame(EphemerisFrame),
27 Solutions(Solutions),
29}
30
31impl From<MonumentGeoRecord> for Record {
32 fn from(geo: MonumentGeoRecord) -> Self {
33 Self::MonumentGeo(geo)
34 }
35}
36
37impl From<EphemerisFrame> for Record {
38 fn from(fr: EphemerisFrame) -> Self {
39 Self::EphemerisFrame(fr)
40 }
41}
42
43impl Default for Record {
44 fn default() -> Self {
45 Self::MonumentGeo(Default::default())
46 }
47}
48
49impl Record {
50 pub fn new_monument_geo(r: MonumentGeoRecord) -> Self {
52 Self::MonumentGeo(r)
53 }
54 pub fn new_ephemeris_frame(fr: EphemerisFrame) -> Self {
56 Self::EphemerisFrame(fr)
57 }
58 pub fn new_solutions(sol: Solutions) -> Self {
60 Self::Solutions(sol)
61 }
62 pub fn as_monument_geo(&self) -> Option<&MonumentGeoRecord> {
64 match self {
65 Self::MonumentGeo(r) => Some(r),
66 _ => None,
67 }
68 }
69 pub fn as_ephemeris(&self) -> Option<&EphemerisFrame> {
71 match self {
72 Self::EphemerisFrame(fr) => Some(fr),
73 _ => None,
74 }
75 }
76 pub fn as_solutions(&self) -> Option<&Solutions> {
78 match self {
79 Self::Solutions(sol) => Some(sol),
80 _ => None,
81 }
82 }
83 pub(crate) fn to_message_id(&self) -> MessageID {
85 match self {
86 Self::EphemerisFrame(_) => MessageID::Ephemeris,
87 Self::MonumentGeo(_) => MessageID::SiteMonumentMarker,
88 Self::Solutions(_) => MessageID::ProcessedSolutions,
89 }
90 }
91
92 pub(crate) fn encoding_size(&self) -> usize {
94 match self {
95 Self::Solutions(sol) => sol.encoding_size(),
96 Self::EphemerisFrame(fr) => fr.encoding_size(),
97 Self::MonumentGeo(geo) => geo.encoding_size(),
98 }
99 }
100}