pub enum AdtError {
Show 17 variants
Io(Error),
InvalidMagic {
expected: ChunkId,
found: ChunkId,
offset: u64,
},
MissingRequiredChunk(ChunkId),
InvalidChunkCombination {
chunk1: ChunkId,
chunk2: ChunkId,
},
OffsetOutOfBounds {
chunk: ChunkId,
offset: u32,
file_position: u64,
},
InvalidChunkSize {
chunk: ChunkId,
expected: usize,
actual: usize,
},
InvalidSubchunkOffset {
parent: ChunkId,
offset: u32,
chunk_size: u32,
},
InvalidWaterStructure(String),
InvalidTextureReference {
index: u32,
count: u32,
},
InvalidModelReference {
index: u32,
count: u32,
},
InvalidMcinEntry {
index: usize,
},
ChunkParseError {
chunk: ChunkId,
offset: u64,
details: String,
},
BinrwError(String),
Utf8Error(String),
UnknownChunk {
magic: [u8; 4],
offset: u64,
},
MemoryLimitExceeded {
requested: usize,
limit: usize,
},
VersionDetectionFailed(String),
}Expand description
Errors that can occur during ADT file parsing and validation.
This enum uses the fail-fast strategy: parsing halts at the first critical error. This prevents cascading failures and ensures that subsequent operations don’t work with corrupted or incomplete data.
Variants§
Io(Error)
Underlying I/O error occurred while reading ADT file.
This is a critical error that halts parsing immediately.
InvalidMagic
Chunk magic bytes don’t match expected format specification.
This is a critical error indicating the file is corrupted or not a valid ADT.
§Example
Expected MCNK chunk at offset 0x1000, but found MCLQ instead.Fields
MissingRequiredChunk(ChunkId)
Required chunk is missing from ADT file.
This is a critical error. ADT files must contain certain chunks (MVER, MHDR, MCIN, MCNK) to be considered valid.
§Example
ADT file is missing required MHDR chunk - cannot parse terrain metadata.InvalidChunkCombination
Mutually exclusive chunks are present in the same file.
This is a critical error. Some chunks cannot coexist because they represent incompatible format versions or conflicting data structures.
§Example
File contains both MCLQ (old water) and MH2O (new water) chunks.OffsetOutOfBounds
Chunk offset exceeds file boundaries.
This is a critical error indicating corrupted offset data or truncated file.
§Example
MCIN entry references MCNK at offset 0x50000, but file is only 0x40000 bytes.Fields
InvalidChunkSize
Chunk size doesn’t match format specification.
This is a critical error. Fixed-size chunks must have exact expected sizes.
§Example
MVER chunk must be exactly 4 bytes, found 8 bytes instead.Fields
InvalidSubchunkOffset
Subchunk offset exceeds parent chunk boundaries.
This is a critical error. Subchunk offsets must be relative to parent chunk start and cannot exceed parent chunk size.
§Example
MCNK subchunk offset 0x2000 exceeds MCNK chunk size of 0x1FC0.Fields
InvalidWaterStructure(String)
Water data structure is malformed or contains invalid data.
This is a critical error for tiles with water features.
§Example
MH2O chunk has water layers but missing height data.InvalidTextureReference
Texture index exceeds available texture count.
This is a critical error. All texture references must be valid indices into the texture list defined in MTEX chunk.
§Example
Layer references texture index 15, but only 10 textures are defined in MTEX.InvalidModelReference
Model index exceeds available model count.
This is a critical error. All model references must be valid indices into the model lists defined in MMDX/MMID or MWMO/MWID chunks.
§Example
MCRF references M2 model index 50, but only 30 models defined in MMDX.InvalidMcinEntry
MCIN entry references non-existent MCNK chunk.
This is a critical error. MCIN (chunk index) entries must reference valid MCNK chunks. ADT files should have exactly 256 MCNK chunks (16x16 grid).
§Example
MCIN entry 100 has non-zero offset but corresponding MCNK chunk is missing.ChunkParseError
Generic chunk parsing error with context.
This is a critical error used when more specific error types don’t apply.
§Example
Failed to parse MCLY chunk at offset 0x3000: layer count mismatch.Fields
BinrwError(String)
Binary parsing library error.
This is a critical error from the underlying binrw library.
Utf8Error(String)
UTF-8 conversion error encountered in string data.
This is a WARNING, not a critical error. When invalid UTF-8 is encountered, lossy conversion is applied (invalid sequences replaced with �) and parsing continues.
§Example
Texture filename contains invalid UTF-8 byte 0xFF, using lossy conversion.UnknownChunk
Unknown chunk encountered during parsing.
This is a WARNING, not a critical error. Unknown chunks are skipped and parsing continues. This allows for forward compatibility with newer ADT format versions.
§Example
Unknown chunk 'MXYZ' at offset 0x5000, skipping to next chunk.Fields
MemoryLimitExceeded
Memory allocation exceeds safety limits.
This is a critical error to prevent memory exhaustion attacks from malicious or corrupted files claiming enormous allocation sizes.
§Example
Chunk claims to need 2GB allocation, exceeds 100MB limit.VersionDetectionFailed(String)
Cannot determine ADT format version.
This is a critical error. Version detection is required to parse format-specific chunks.
§Example
MVER chunk contains unknown version 19, expected 18 (WotLK).