vectie/moonmoon/src/lunar_ephemeris does not have a README file

    ObserverGeometrySample

    pub(all) struct ObserverGeometrySample {
    timestamp_utc : String
    ephemeris_time_s : Double
    sun_body_fixed : Vector3
    earth_body_fixed : Vector3
    sun_altitude_deg : Double
    sun_azimuth_deg : Double
    earth_altitude_deg : Double
    earth_azimuth_deg : Double
    earth_illuminated_fraction : Double
    } derive(Eq, ToJson,
    Debug
    ,
    FromJson
    )

    ObserverGeometryTimeline

    pub(all) struct ObserverGeometryTimeline {
    method_id : String
    frame_id : String
    source_path : String
    orientation_source_path : String
    target_lat_deg : Double
    target_lon_deg : Double
    sample_step_minutes : Int
    aggregate_step_minutes : Int
    min_sun_altitude_deg : Double
    max_sun_altitude_deg : Double
    sunlit_hours : Double
    dark_hours : Double
    available_energy_wh : Double
    hourly_solar_track : SolarGeometryTrack
    samples : Array[ObserverGeometrySample]
    } derive(Eq, ToJson,
    Debug
    ,
    FromJson
    )

    SolarGeometryTrack

    pub(all) struct SolarGeometryTrack {
    time_start_utc : String
    step_minutes : Int
    sun_altitude_deg : Array[Double]
    sun_azimuth_deg : Array[Double]
    } derive(Eq, ToJson,
    Debug
    ,
    FromJson
    )

    Vector3

    pub(all) struct Vector3 {
    x : Double
    y : Double
    z : Double
    } derive(Eq, ToJson,
    Debug
    ,
    FromJson
    )

    compute_first_trusted_square_observer_timeline

    fn compute_first_trusted_square_observer_timeline(de440s : Bytes) -> Result[ObserverGeometryTimeline, String]

    compute_solar_geometry_track

    fn compute_solar_geometry_track(de440s : Bytes, start_unix_s : Int64, duration_hours : Int, latitude_deg : Double, longitude_deg : Double) -> Result[SolarGeometryTrack, String]

    first_trusted_square_observer_timeline_fixture

    fn first_trusted_square_observer_timeline_fixture() -> ObserverGeometryTimeline