use crate::{anomaly, elements, lambert, problem};
#[derive(Debug, thiserror::Error)]
pub enum KeplerError {
#[error(transparent)]
Anomaly(anomaly::AnomalyError),
#[error(transparent)]
Conversion(elements::ConversionError),
#[error(transparent)]
Propagation(problem::PropagationError),
#[error(transparent)]
Lambert(lambert::LambertError),
}
impl From<anomaly::AnomalyError> for KeplerError {
fn from(value: anomaly::AnomalyError) -> Self {
Self::Anomaly(value)
}
}
impl From<elements::ConversionError> for KeplerError {
fn from(value: elements::ConversionError) -> Self {
Self::Conversion(value)
}
}
impl From<problem::PropagationError> for KeplerError {
fn from(value: problem::PropagationError) -> Self {
Self::Propagation(value)
}
}
impl From<lambert::LambertError> for KeplerError {
fn from(value: lambert::LambertError) -> Self {
Self::Lambert(value)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn kepler_error_from_anomaly() {
let inner = anomaly::AnomalyError::InvalidEccentricity(1.5);
let e = KeplerError::from(inner);
assert!(matches!(e, KeplerError::Anomaly(_)));
}
#[test]
fn kepler_error_from_conversion() {
let inner = elements::ConversionError::InvalidEccentricity(-1.0);
let e = KeplerError::from(inner);
assert!(matches!(e, KeplerError::Conversion(_)));
}
#[test]
fn kepler_error_from_propagation() {
let inner = problem::PropagationError::ParabolicUnsupported;
let e = KeplerError::from(inner);
assert!(matches!(e, KeplerError::Propagation(_)));
}
#[test]
fn kepler_error_from_lambert() {
let inner = lambert::LambertError::ZeroPosition;
let e = KeplerError::from(inner);
assert!(matches!(e, KeplerError::Lambert(_)));
}
}