1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// SPDX-License-Identifier: AGPL-3.0-only
// Copyright (C) 2026 Vallés Puig, Ramon
//! # Body-parameterised planetary heliocentric states
//!
//! ## Scientific scope
//!
//! The core [`Ephemeris`](super::Ephemeris) trait covers Sun, Earth, and Moon —
//! the bodies required by the coordinate-transform and aberration pipelines.
//! Physical orientation of a major planet additionally needs that body's
//! heliocentric ecliptic state so geocentric (or topocentric) directions can be
//! formed with the **same** compile-time backend that supplies Earth.
//!
//! ## Technical scope
//!
//! [`PlanetState<Body>`] extends [`Ephemeris`](super::Ephemeris) with a single
//! heliocentric accessor for a phantom body type. Backends implement the trait
//! per body they can evaluate; orientation entry points require
//! `E: PlanetState<Body>` and therefore cannot silently mix VSOP87 with another
//! planetary source. [`Vsop87Ephemeris`](super::Vsop87Ephemeris) implements
//! `PlanetState` for Mercury–Neptune. [`RuntimeEphemeris`](super::RuntimeEphemeris)
//! currently indexes only Sun/Earth/Moon segments and does **not** implement it.
//!
//! ## References
//!
//! - Bretagnon, P. & Francou, G. (1988). "Planetary theories in rectangular and
//! spherical variables: VSOP87 solutions". *A&A*, 202, 309–315.
//! - Archinal, B. A. et al., IAU Working Group on Cartographic Coordinates and
//! Rotational Elements reports.
use Ephemeris;
use crate;
use crateAstronomicalUnit;
use crateJulianDate;
/// Compile-time capability: ephemeris backend `Self` can supply heliocentric
/// ecliptic states for phantom body `Body`.
///
/// Implementors must evaluate `Body` with the **same** theory/data set used by
/// their [`Ephemeris`](super::Ephemeris) Earth methods.