use super::{AuPerDay, Ephemeris};
use crate::bodies::solar_system::{Earth, Moon, Sun};
use crate::coordinates::{
cartesian::{Position, Velocity},
centers::{Barycentric, Geocentric, Heliocentric},
frames::EclipticMeanJ2000,
};
use crate::time::JulianDate;
use qtty::{AstronomicalUnit, Kilometer};
#[derive(Debug, Clone, Copy, Default)]
pub struct Vsop87Ephemeris;
impl Ephemeris for Vsop87Ephemeris {
#[inline]
fn sun_barycentric(
jd: JulianDate,
) -> Position<Barycentric, EclipticMeanJ2000, AstronomicalUnit> {
Sun::vsop87e(jd)
}
#[inline]
fn earth_barycentric(
jd: JulianDate,
) -> Position<Barycentric, EclipticMeanJ2000, AstronomicalUnit> {
Earth::vsop87e(jd)
}
#[inline]
fn earth_heliocentric(
jd: JulianDate,
) -> Position<Heliocentric, EclipticMeanJ2000, AstronomicalUnit> {
Earth::vsop87a(jd)
}
#[inline]
fn earth_barycentric_velocity(jd: JulianDate) -> Velocity<EclipticMeanJ2000, AuPerDay> {
Earth::vsop87e_vel(jd)
}
#[inline]
fn moon_geocentric(jd: JulianDate) -> Position<Geocentric, EclipticMeanJ2000, Kilometer> {
Moon::get_geo_position(jd)
}
}