#[derive(Debug, Clone, thiserror::Error)]
pub enum SphereQlError {
#[error("invalid radius {0}: must be >= 0")]
InvalidRadius(f64),
#[error("invalid theta {0}: must be in [0, 2π)")]
InvalidTheta(f64),
#[error("invalid phi {0}: must be in [0, π]")]
InvalidPhi(f64),
#[error("invalid latitude {0}: must be in [-90, 90]")]
InvalidLatitude(f64),
#[error("invalid longitude {0}: must be in [-180, 180]")]
InvalidLongitude(f64),
#[error("invalid altitude {0}: must be >= 0")]
InvalidAltitude(f64),
#[error("invalid shell bounds: inner {inner} must be < outer {outer}")]
InvalidShellBounds { inner: f64, outer: f64 },
#[error("invalid band bounds: phi_min {phi_min} must be < phi_max {phi_max}")]
InvalidBandBounds { phi_min: f64, phi_max: f64 },
#[error("invalid cone: half_angle {0} must be in (0, π]")]
InvalidConeAngle(f64),
#[error("invalid cap: half_angle {0} must be in (0, π]")]
InvalidCapAngle(f64),
#[error(
"invalid wedge bounds: theta_min {theta_min} and theta_max {theta_max} must be in [0, 2π)"
)]
InvalidWedgeBounds { theta_min: f64, theta_max: f64 },
#[error("zero vector cannot be normalized")]
ZeroVector,
}