mod clock;
mod flag;
mod formatting; mod header;
mod lli;
mod parsing; mod rinex; mod signal;
mod snr;
#[cfg(feature = "obs")]
pub use rinex::feature::{Combination, CombinationKey};
#[cfg(feature = "processing")]
pub(crate) mod mask;
#[cfg(feature = "processing")]
pub(crate) mod decim;
#[cfg(feature = "processing")]
pub(crate) mod repair;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
pub use clock::ClockObservation;
pub use flag::EpochFlag;
pub use header::HeaderFields;
pub use lli::LliFlags;
pub use signal::SignalObservation;
pub use snr::SNR;
pub(crate) use parsing::{is_new_epoch, parse_epoch};
#[cfg(docsrs)]
use crate::Bibliography;
use std::collections::BTreeMap;
use crate::prelude::Epoch;
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Observations {
pub clock: Option<ClockObservation>,
pub signals: Vec<SignalObservation>,
}
impl Default for Observations {
fn default() -> Self {
Self {
clock: None,
signals: Vec::with_capacity(16),
}
}
}
impl Observations {
pub fn with_clock_offset_s(&self, timeof_obs: Epoch, offset_s: f64) -> Self {
let mut s = self.clone();
if let Some(ref mut clock) = s.clock {
clock.set_offset_s(timeof_obs, offset_s);
} else {
s.clock = Some(ClockObservation::default().with_offset_s(timeof_obs, offset_s));
}
s
}
pub fn with_clock_observation(&self, clock: ClockObservation) -> Self {
let mut s = self.clone();
s.clock = Some(clock);
s
}
}
#[derive(Default, Debug, Copy, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct ObsKey {
pub epoch: Epoch,
pub flag: EpochFlag,
}
pub type Record = BTreeMap<ObsKey, Observations>;