#[cfg(test)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum ParseError {
InvalidImage(crate::ImagePayloadError),
Truncated,
BadMagic,
UnsupportedVersion { major: u8, minor: u8 },
UnknownLayout(u8),
HeaderCrcMismatch { expected: u32, actual: u32 },
UnknownColorFormat(u8),
DimensionOverflow,
UnknownCriticalChunk(u16),
ReservedNonZero,
}
use crate::font::FontError;
use crate::frames::FramesError;
use crate::meta::{MetaDecodeError, MetaEncodeError};
use crate::model::{ChunkType, InvalidChunkType};
use crate::palette::{PaletteDecodeError, PaletteEncodeError};
use crate::payload::image::ImagePayloadError;
use crate::reader::PayloadValidationError;
use crate::scene::{VectorEncodeError, VectorReadError};
#[derive(Clone, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum ReadError {
Truncated {
needed: usize,
available: usize,
},
BadMagic,
UnsupportedVersion {
major: u8,
minor: u8,
},
UnknownLayout(u8),
ReservedNonZero {
offset: usize,
},
HeaderCrcMismatch {
expected: u32,
actual: u32,
},
UnknownColorFormat(u8),
StrideTooSmall {
minimum: u32,
actual: u32,
},
SizeOverflow,
InvalidFileSize {
declared: u32,
minimum: u32,
},
TrailingBytes {
logical_len: usize,
actual_len: usize,
},
TooManyChunks {
count: u16,
limit: u16,
},
ChunkTableBeforeHeader {
offset: u32,
},
ChunkTableOutOfBounds {
offset: u32,
count: u16,
file_size: u32,
},
ChunkPayloadOutOfBounds {
index: u16,
offset: u32,
size: u32,
},
ChunkPayloadOverlapsHeader {
index: u16,
offset: u32,
size: u32,
},
ChunkPayloadOverlapsTable {
index: u16,
offset: u32,
size: u32,
},
CriticalPayload(PayloadValidationError),
UnknownCriticalChunk {
index: u16,
chunk_type: ChunkType,
payload_offset: u32,
},
InvalidChunkType,
}
impl From<InvalidChunkType> for ReadError {
fn from(_: InvalidChunkType) -> Self {
Self::InvalidChunkType
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum DocumentError {
Read(ReadError),
AllocationFailed,
}
impl From<ReadError> for DocumentError {
fn from(value: ReadError) -> Self {
Self::Read(value)
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum EditError {
PreservedTrailingBytesReadOnly,
InvalidChunkId,
InvalidChunkType,
ChunkLayoutRequired,
FlatLayoutRequired,
NotRepresentableAsFlat,
WouldShadowPrimary,
PrimaryHintsRequired {
chunk_type: ChunkType,
},
InvalidPrimaryHints {
chunk_type: ChunkType,
},
ChunkIdExhausted,
AllocationFailed,
RelocationAssumptionRequired {
chunk_type: ChunkType,
},
CriticalAssumptionRequired {
chunk_type: ChunkType,
},
ReservedFlagBits {
bits: u16,
},
InvalidPayload(ImagePayloadError),
InvalidFont(FontError),
InvalidVector(VectorEncodeError),
InvalidMeta(MetaEncodeError),
InvalidPalette(PaletteEncodeError),
InvalidFrames(FramesError),
NonContiguousPayload {
chunk_type: ChunkType,
},
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum FontAccessError {
ChunkLayoutRequired,
InvalidChunkId,
UnexpectedChunkType { actual: ChunkType },
NonContiguousPayload,
InvalidPayload(FontError),
AllocationFailed,
}
impl From<FontError> for FontAccessError {
fn from(value: FontError) -> Self {
match value {
FontError::AllocationFailed => Self::AllocationFailed,
error => Self::InvalidPayload(error),
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum VectorAccessError {
ChunkLayoutRequired,
InvalidChunkId,
UnexpectedChunkType { actual: ChunkType },
NonContiguousPayload,
InvalidPayload(VectorReadError),
AllocationFailed,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum MetaAccessError {
ChunkLayoutRequired,
InvalidChunkId,
UnexpectedChunkType { actual: ChunkType },
NonContiguousPayload,
InvalidPayload(MetaDecodeError),
}
impl From<MetaDecodeError> for MetaAccessError {
fn from(value: MetaDecodeError) -> Self {
Self::InvalidPayload(value)
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum PaletteAccessError {
ChunkLayoutRequired,
InvalidChunkId,
UnexpectedChunkType { actual: ChunkType },
NonContiguousPayload,
InvalidPayload(PaletteDecodeError),
}
impl From<PaletteDecodeError> for PaletteAccessError {
fn from(value: PaletteDecodeError) -> Self {
Self::InvalidPayload(value)
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum FramesAccessError {
ChunkLayoutRequired,
InvalidChunkId,
UnexpectedChunkType { actual: ChunkType },
NonContiguousPayload,
InvalidPayload(FramesError),
}
impl From<FramesError> for FramesAccessError {
fn from(value: FramesError) -> Self {
Self::InvalidPayload(value)
}
}
impl From<VectorReadError> for VectorAccessError {
fn from(value: VectorReadError) -> Self {
match value {
VectorReadError::AllocationFailed => Self::AllocationFailed,
error => Self::InvalidPayload(error),
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum ImageAccessError {
ChunkLayoutRequired,
InvalidChunkId,
UnexpectedChunkType { actual: ChunkType },
InvalidPayload(ImagePayloadError),
}
impl From<ImagePayloadError> for ImageAccessError {
fn from(value: ImagePayloadError) -> Self {
Self::InvalidPayload(value)
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum EncodeError {
PreservedTrailingBytesReadOnly,
NotRepresentableAsFlat,
TooManyChunks {
count: usize,
},
PrimaryHintsRequired {
chunk_type: ChunkType,
},
RelocationAssumptionRequired {
index: u16,
chunk_type: ChunkType,
},
CriticalAssumptionRequired {
index: u16,
chunk_type: ChunkType,
},
ReservedFlagBits {
index: u16,
chunk_type: ChunkType,
bits: u16,
},
InvalidPayload {
chunk_type: ChunkType,
},
SizeOverflow,
BufferTooSmall {
needed: usize,
available: usize,
},
AllocationFailed,
}