use thiserror::Error;
#[derive(Debug, Clone, PartialEq, Error)]
#[non_exhaustive]
pub enum Error {
#[error("invalid optics: {0}")]
InvalidOptics(String),
#[error("invalid footprint {provenance:?}: {reason}")]
InvalidFootprint {
provenance: String,
reason: String,
},
#[error("footprint coordinates must use one epoch")]
FootprintEpochMismatch,
#[error("antipodal geometry has no unique common tangent plane")]
AntipodalGeometry,
#[error("gnomonic projection failed for {0}")]
ProjectionFailed(String),
#[error("footprint union requires at least one footprint")]
EmptyFootprintSet,
#[error("duplicate footprint provenance: {0}")]
DuplicateFootprintProvenance(String),
#[error("invalid coverage band: {0}")]
InvalidCoverageBand(String),
#[error("invalid rotation search: {0}")]
InvalidRotationSearch(String),
#[error("invalid ellipse: {0}")]
InvalidEllipse(String),
#[error("invalid object geometry: {0}")]
InvalidObjectGeometry(String),
}
pub type Result<T> = core::result::Result<T, Error>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn display_messages() {
assert_eq!(
Error::InvalidOptics("focal <= 0".into()).to_string(),
"invalid optics: focal <= 0"
);
assert_eq!(
Error::AntipodalGeometry.to_string(),
"antipodal geometry has no unique common tangent plane"
);
}
}