use thiserror::Error;
#[derive(Debug, Error)]
pub enum ParseError {
#[error("missing field {field}")]
MissingField {
field: usize,
},
#[error("bad field {field}: {value}")]
BadField {
field: usize,
value: String,
},
#[error("bad line: {0}")]
BadLine(String),
}
#[derive(Debug, Error)]
pub enum LoadError {
#[error(transparent)]
Io(#[from] std::io::Error),
#[error("bad MP3D house header: {found}")]
BadHeader {
found: String,
},
#[error("parse error on line {line_number}: {source}; line: {line}")]
ParseLine {
line_number: usize,
line: String,
source: ParseError,
},
#[error("missing {kind} parent index {index} on line {line_number}")]
MissingParent {
line_number: usize,
kind: &'static str,
index: i32,
},
#[error("missing category index {index} on line {line_number}")]
MissingCategory {
line_number: usize,
index: i32,
},
#[error("duplicate semantic segment id {segment_id} on line {line_number}")]
DuplicateSegmentId {
line_number: usize,
segment_id: i32,
},
#[error("unsupported option: {0}")]
UnsupportedOption(&'static str),
}