1use std::fmt::{Display, Formatter};
2
3#[derive(Clone, Debug, PartialEq)]
4pub enum RecognitionError {
6 InvalidMesh(String),
8 InvalidOptions(String),
10 InvalidSelection(String),
12 DegenerateData(String),
14 FitFailed {
16 surface: Option<&'static str>,
18 reason: String,
20 },
21}
22
23impl Display for RecognitionError {
24 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
25 match self {
26 Self::InvalidMesh(message) => write!(f, "invalid mesh: {message}"),
27 Self::InvalidOptions(message) => write!(f, "invalid recognition options: {message}"),
28 Self::InvalidSelection(message) => write!(f, "invalid selection: {message}"),
29 Self::DegenerateData(message) => write!(f, "degenerate geometry: {message}"),
30 Self::FitFailed { surface, reason } => match surface {
31 Some(kind) => write!(f, "{kind} fit failed: {reason}"),
32 None => write!(f, "surface fit failed: {reason}"),
33 },
34 }
35 }
36}
37
38impl std::error::Error for RecognitionError {}