1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use nom::combinator::map;
use strum::FromRepr;

use super::{errors::ParseResult, scalars::word};

#[derive(FromRepr, Debug, Copy, Clone)]
pub enum ChunkType {
    Palette0004 = 0x0004,
    Palette0011 = 0x0011,
    Layer = 0x2004,
    Cel = 0x2005,
    CelExtra = 0x2006,
    ColorProfile = 0x2007,
    ExternalFile = 0x2008,
    Mask = 0x2016,
    Path = 0x2017,
    Tags = 0x2018,
    Palette = 0x2019,
    UserData = 0x2020,
    Slice = 0x2022,
    Tileset = 0x2023,
}

pub fn parse_chunk_type(input: &[u8]) -> ParseResult<'_, Result<ChunkType, u16>> {
    map(word, |n| ChunkType::from_repr(n.into()).ok_or(n))(input)
}