use crate::time::{ModifiedJulianDate, Period, MJD};
use qtty::*;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CrossingDirection {
Rising,
Setting,
}
impl std::fmt::Display for CrossingDirection {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Rising => write!(f, "Rising"),
Self::Setting => write!(f, "Setting"),
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct CrossingEvent {
pub mjd: ModifiedJulianDate,
pub direction: CrossingDirection,
}
impl std::fmt::Display for CrossingEvent {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{} at {}", self.direction, self.mjd)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CulminationKind {
Max,
Min,
}
impl std::fmt::Display for CulminationKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Max => write!(f, "Upper Transit"),
Self::Min => write!(f, "Lower Transit"),
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct CulminationEvent {
pub mjd: ModifiedJulianDate,
pub altitude: Degrees,
pub kind: CulminationKind,
}
impl std::fmt::Display for CulminationEvent {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{} at {} (alt: {})", self.kind, self.mjd, self.altitude)
}
}
#[derive(Debug, Clone, Copy)]
pub struct AltitudeQuery {
pub observer: crate::coordinates::centers::Geodetic<crate::coordinates::frames::ECEF>,
pub window: Period<MJD>,
pub min_altitude: Degrees,
pub max_altitude: Degrees,
}