deep-time 0.1.0-beta.21

High-precision, no-std, no-alloc date-time library, leap-seconds, time scales, relativistic time, and a powerful date & duration parser
Documentation
#![cfg(feature = "serde")]

use deep_time::{Dt, DtErr, Scale, YmdHms};

#[test]
fn dt_roundtrip() {
    let original = Dt::from_ymd(2025, 6, 29, Scale::UTC, 14, 30, 45, 123456789012345678);

    let json = serde_json::to_string(&original).unwrap();
    // eprintln!("Dt serialized: {}", json);

    let deserialized: Dt = serde_json::from_str(&json).unwrap();
    assert_eq!(original, deserialized);
}

#[test]
fn dt_negative_year_roundtrip() {
    let original = Dt::from_ymd(-1234, 12, 31, Scale::TAI, 23, 59, 59, 0);

    let json = serde_json::to_string(&original).unwrap();
    // eprintln!("Dt (negative year) serialized: {}", json);

    let deserialized: Dt = serde_json::from_str(&json).unwrap();
    assert_eq!(original, deserialized);
}

#[test]
fn ymdhms_roundtrip() {
    let dt = Dt::from_ymd(2030, 1, 15, Scale::GPS, 8, 45, 0, 987654321000000000);
    let original: YmdHms = dt.to_ymd();

    let json = serde_json::to_string(&original).unwrap();
    // eprintln!("YmdHms serialized: {}", json);

    let deserialized: YmdHms = serde_json::from_str(&json).unwrap();
    assert_eq!(original, deserialized);
}

#[test]
fn scale_roundtrip() {
    let scales = [Scale::TAI, Scale::UTC, Scale::TT, Scale::TDB, Scale::GPS];

    for scale in scales {
        let json = serde_json::to_string(&scale).unwrap();
        // eprintln!("Scale::{:?} → {}", scale, json);

        let deserialized: Scale = serde_json::from_str(&json).unwrap();
        assert_eq!(scale, deserialized);
    }
}

#[test]
fn dt_err_roundtrip() {
    let err: DtErr = deep_time::an_err!(deep_time::DtErrKind::InvalidInput, "test error");

    let json = serde_json::to_string(&err).unwrap();
    // eprintln!("DtErr serialized: {}", json);

    let deserialized: DtErr = serde_json::from_str(&json).unwrap();
    assert_eq!(err.to_string(), deserialized.to_string());
}