pub mod data;
pub mod earth;
pub(crate) mod encoding;
pub mod features;
pub mod format;
pub mod foundation;
pub mod model;
pub mod period;
pub(crate) use siderust_archive as archive;
use crate::archive::time::bundled::snapshot;
use qtty::Day;
#[allow(unused_imports)]
pub(crate) use snapshot as time_data;
pub(crate) const MODERN_DELTA_T_START_MJD: Day = Day::new(snapshot::MODERN_DELTA_T_START_MJD);
pub(crate) const MODERN_DELTA_T_END_MJD: Day = Day::new(snapshot::MODERN_DELTA_T_END_MJD);
pub use earth::eop;
pub use foundation::{constats, error};
#[cfg(feature = "runtime-data-fetch")]
pub use data::runtime_data::{
fetch_latest_time_data, refresh_runtime_time_data, update_runtime_time_data,
};
pub use data::status::{
assert_fresh as assert_time_data_fresh, time_data_status, ActiveTimeDataSource, DataHorizons,
FreshnessError, TimeDataStatus,
};
pub use earth::context::TimeContext;
pub use earth::delta_t::{
delta_t_seconds, delta_t_seconds_extrapolated, DELTA_T_PREDICTION_HORIZON_MJD,
};
pub use earth::eop::{eop_end, eop_observed_end, eop_start};
pub use features::TimeInstant;
pub use format::{
FormatForScale, FormatOptions, FormatPrecision, GnssWeek, GnssWeekScale, GpsTime,
InfallibleFormatForScale, J2000Seconds, J2000s, JulianDate, ModifiedJulianDate, TimeFormat,
Unix, UnixTime, GPS, JD, MJD,
};
pub use foundation::constats::{
gps_epoch_jd_tai, gps_epoch_jd_utc, gps_epoch_tai, iau_time_epoch_t0_jd, j2000_jd_tt,
tdb_tt_model_high_accuracy_end_jd, tdb_tt_model_high_accuracy_start_jd, unix_epoch_jd,
unix_epoch_mjd, utc_defined_from_mjd, GPS_EPOCH_JD_UTC_DAY, GPS_EPOCH_TAI_MINUS_UTC,
IAU_TIME_EPOCH_T0_JD_DAY, J2000_JD_TT_DAY, TDB_TT_MODEL_HIGH_ACCURACY_END_JD_DAY,
TDB_TT_MODEL_HIGH_ACCURACY_START_JD_DAY, TT_MINUS_TAI, UNIX_EPOCH_JD_DAY,
UTC_DEFINED_FROM_MJD_DAY,
};
pub use foundation::duration::{DurationError, ExactDuration, NANOS_PER_SECOND};
pub use foundation::error::{ConversionError, TimeDataError};
pub use model::scale::{
ContinuousScale, CoordinateScale, Scale, BDT, ET, GPST, GST, QZSST, TAI, TCB, TCG, TDB, TT,
UT1, UTC,
};
pub use model::target::{ContextConversionTarget, ConversionTarget, InfallibleConversionTarget};
pub use model::time::Time;
pub use period::{
complement_within, series::TimeSeries, series::TimeSeriesError, Interval, InvalidIntervalError,
Period, PeriodListError,
};
pub const MODERN_DELTA_T_OBSERVED_END_MJD: Day =
Day::new(snapshot::MODERN_DELTA_T_OBSERVED_END_MJD);
#[cfg(feature = "serde")]
pub use features::tagged;
#[cfg(test)]
mod size_tests {
use super::*;
#[test]
fn time_uses_compensated_pair_storage() {
assert_eq!(core::mem::size_of::<Time<TT>>(), 16);
assert_eq!(core::mem::size_of::<Time<TAI>>(), 16);
assert_eq!(core::mem::size_of::<Time<TDB>>(), 16);
assert_eq!(core::mem::size_of::<Time<TCG>>(), 16);
assert_eq!(core::mem::size_of::<Time<TCB>>(), 16);
assert_eq!(core::mem::size_of::<Time<UT1>>(), 16);
assert_eq!(core::mem::size_of::<Time<UTC>>(), 16);
}
}