1use std::io;
2use thiserror::Error;
3
4#[derive(Error, Debug)]
6pub enum M2Error {
7 #[error("I/O error: {0}")]
9 Io(#[from] io::Error),
10
11 #[error("Invalid magic number: expected '{expected}', got '{actual}'")]
13 InvalidMagic { expected: String, actual: String },
14
15 #[error("Unsupported version: {0}")]
17 UnsupportedVersion(String),
18
19 #[error("Parse error: {0}")]
21 ParseError(String),
22
23 #[error("Validation error: {0}")]
25 ValidationError(String),
26
27 #[error("Conversion error: cannot convert from version {from} to {to}: {reason}")]
29 ConversionError { from: u32, to: u32, reason: String },
30
31 #[error("Chunk error: {0}")]
33 ChunkError(String),
34
35 #[error("Reference error: {0}")]
37 ReferenceError(String),
38
39 #[error("Internal error: {0}")]
41 InternalError(String),
42}
43
44pub type Result<T> = std::result::Result<T, M2Error>;