use crate::coordinates::spherical::direction;
use crate::coordinates::{centers::Geocentric, frames::EquatorialMeanJ2000, spherical::Position};
use crate::targets::CoordinateWithPM;
use qtty::length::nominal::SolarRadiuses;
use qtty::*;
use std::borrow::Cow;
#[derive(Clone, Debug)]
pub struct Star<'a> {
pub name: Cow<'a, str>,
pub distance: LightYears,
pub mass: SolarMasses,
pub radius: SolarRadiuses,
pub luminosity: SolarLuminosities,
pub coordinate: CoordinateWithPM<Position<Geocentric, EquatorialMeanJ2000, LightYear>>,
}
impl<'a> Star<'a> {
pub const fn new_const(
name: &'static str,
distance: LightYears,
mass: SolarMasses,
radius: SolarRadiuses,
luminosity: SolarLuminosities,
coordinate: CoordinateWithPM<Position<Geocentric, EquatorialMeanJ2000, LightYear>>,
) -> Star<'static> {
Star {
name: Cow::Borrowed(name),
distance,
mass,
radius,
luminosity,
coordinate,
}
}
pub fn new<N>(
name: N,
distance: LightYears,
mass: SolarMasses,
radius: SolarRadiuses,
luminosity: SolarLuminosities,
coordinate: CoordinateWithPM<Position<Geocentric, EquatorialMeanJ2000, LightYear>>,
) -> Star<'a>
where
N: Into<Cow<'a, str>>,
{
Star {
name: name.into(),
distance,
mass,
radius,
luminosity,
coordinate,
}
}
}
impl From<&Star<'_>> for direction::ICRS {
fn from(star: &Star<'_>) -> Self {
let pos = star.coordinate.get_position();
Self::new(pos.azimuth, pos.polar)
}
}