aseprite_loader/binary/
errors.rs1use std::str::Utf8Error;
2
3use nom::IResult;
4
5use super::{
6 palette::PaletteError,
7 scalars::{Dword, Word},
8};
9
10#[derive(Debug, strum::Display)]
11pub enum ParseError<'a> {
12 DwordToUsize(Dword),
16 InvalidFrameSize(Dword),
18 InvalidChunkSize(Dword),
20 Utf8Error(Utf8Error),
23 PaletteError(PaletteError),
26 InvalidFrameRange(Word, Word),
28 LayerIndexOutOfBounds,
31 InvalidPropertyType(Word),
34 Nom(nom::error::Error<&'a [u8]>),
37}
38
39impl<'a> std::error::Error for ParseError<'a> {}
40
41impl<'a> nom::error::ParseError<&'a [u8]> for ParseError<'a> {
42 fn from_error_kind(input: &'a [u8], kind: nom::error::ErrorKind) -> Self {
43 Self::Nom(nom::error::Error::from_error_kind(input, kind))
44 }
45 fn append(_input: &[u8], _kind: nom::error::ErrorKind, other: Self) -> Self {
46 other
47 }
48}
49
50impl<'a> nom::error::FromExternalError<&'a [u8], Utf8Error> for ParseError<'a> {
51 fn from_external_error(_input: &'a [u8], _kind: nom::error::ErrorKind, e: Utf8Error) -> Self {
52 ParseError::Utf8Error(e)
53 }
54}
55
56pub type ParseResult<'a, O> = IResult<&'a [u8], O, ParseError<'a>>;