pleiades-backend 0.2.0

Backend traits, request/result contracts, capability metadata, policy summaries, and routing helpers for pleiades ephemeris backends.
Documentation
use crate::*;

#[test]
fn backend_capabilities_validation_rejects_missing_position_or_value_modes() {
    let mut capabilities = BackendCapabilities::default();
    assert!(capabilities.validate().is_ok());

    capabilities.geocentric = false;
    capabilities.topocentric = false;
    let error = capabilities
        .validate()
        .expect_err("capabilities without a position mode should fail validation");
    assert_eq!(
        error.summary_line(),
        "backend capabilities must support geocentric or topocentric positions"
    );
    assert_eq!(error.to_string(), error.summary_line());

    capabilities.geocentric = true;
    capabilities.topocentric = false;
    capabilities.apparent = false;
    capabilities.mean = false;
    let error = capabilities
        .validate()
        .expect_err("capabilities without a value mode should fail validation");
    assert_eq!(
        error.summary_line(),
        "backend capabilities must support mean or apparent output"
    );
    assert_eq!(error.to_string(), error.summary_line());
}

#[test]
fn backend_capabilities_summary_has_a_compact_display() {
    let capabilities = BackendCapabilities::default();

    assert_eq!(capabilities.to_string(), capabilities.summary_line());
    assert_eq!(
        capabilities.validated_summary_line(),
        Ok(capabilities.summary_line())
    );
    assert_eq!(
            capabilities.summary_line(),
            "geocentric=true; topocentric=false; apparent=true; mean=true; batch=true; native_sidereal=false"
        );
    assert!(capabilities.summary_line().contains("geocentric="));
    assert!(capabilities.summary_line().contains("topocentric="));
    assert!(capabilities.summary_line().contains("apparent="));
    assert!(capabilities.summary_line().contains("native_sidereal="));
}

#[test]
fn backend_capabilities_validated_summary_line_rejects_missing_modes() {
    let capabilities = BackendCapabilities {
        geocentric: false,
        topocentric: false,
        apparent: false,
        mean: false,
        ..BackendCapabilities::default()
    };

    assert_eq!(
        capabilities.validated_summary_line(),
        Err(BackendCapabilitiesValidationError::MissingPositionMode)
    );
}