sidereon-core 0.13.0

The complete Sidereon engine: numerical astrodynamics propagation core plus the GNSS domain layer (SP3, broadcast ephemeris, multi-GNSS positioning, RTK/PPP, ionosphere/troposphere, DOP) behind a default-on gnss feature
Documentation
use sidereon_core::ephemeris::{Sp3, Sp3TimeSystem};

const SP3_WITH_GALILEO_TIME: &str = "\
#cP2020  6 24  0  0  0.00000000       1 ORBIT IGS14 FIT  TST
## 2111 432000.00000000   900.00000000 59024 0.0000000000000
+    1   G01  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
++         0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
%c G  cc GAL ccc cccc cccc cccc cccc ccccc ccccc ccccc ccccc
%c cc cc ccc ccc cccc cccc cccc cccc ccccc ccccc ccccc ccccc
%f  1.2500000  1.025000000  0.00000000000  0.000000000000000
%f  0.0000000  0.000000000  0.00000000000  0.000000000000000
%i    0    0    0    0      0      0      0      0         0
%i    0    0    0    0      0      0      0      0         0
/* PUBLIC API TEST FIXTURE
*  2020  6 24  0  0  0.00000000
PG01  15000.000000 -20000.000000   5000.000000    123.456789
EOF
";

fn public_time_system_label(time_system: Sp3TimeSystem) -> &'static str {
    match time_system {
        Sp3TimeSystem::Gps => "GPS",
        Sp3TimeSystem::Glonass => "GLO",
        Sp3TimeSystem::Galileo => "GAL",
        Sp3TimeSystem::Tai => "TAI",
        Sp3TimeSystem::Utc => "UTC",
        Sp3TimeSystem::Qzss => "QZS",
        Sp3TimeSystem::Beidou => "BDT",
        Sp3TimeSystem::Irnss => "IRN",
    }
}

#[test]
fn ephemeris_reexports_sp3_time_system_variants() {
    let sp3 = Sp3::parse(SP3_WITH_GALILEO_TIME.as_bytes()).expect("parse SP3 fixture");

    assert_eq!(
        public_time_system_label(sp3.header.time_system),
        "GAL",
        "downstream users can name and match Sp3TimeSystem variants"
    );
}