use thiserror::Error;
use crate::lattice::LatticeKind;
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum GridTask {
Detection,
Consistency,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum EvidenceKind {
Positions,
Oriented1,
Oriented2,
Oriented3,
CoordinateHypotheses,
}
#[derive(Clone, Debug, Error, PartialEq, Eq)]
#[non_exhaustive]
pub enum GridError {
#[error("unsupported combination: task={task:?}, lattice={lattice:?}, evidence={evidence:?}")]
UnsupportedCombination {
task: GridTask,
lattice: LatticeKind,
evidence: EvidenceKind,
},
#[error("insufficient evidence")]
InsufficientEvidence,
#[error("inconsistent input: {0}")]
InconsistentInput(String),
#[error("degenerate geometry")]
DegenerateGeometry,
}
pub type Result<T> = std::result::Result<T, GridError>;