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
27
28
29
use super::*;
use crate::common::AlignedParser;
use nom::combinator::map_res;
use nom::error::{FromExternalError, ParseError};
use nom::number::complete::le_u32;
use nom::IResult;

pub fn parse_ole_color<'a, E: ParseError<&'a [u8]>>(
    input: &'a [u8],
) -> IResult<&'a [u8], OleColor, E>
where
    E: FromExternalError<&'a [u8], u32>,
{
    map_res(le_u32, OleColor::try_from)(input)
}

/// Trait to parse a color
impl AlignedParser {
    pub(crate) fn ole_color<'a, E>(&self, input: &'a [u8]) -> IResult<&'a [u8], OleColor, E>
    where
        E: ParseError<&'a [u8]>,
        E: FromExternalError<&'a [u8], u32>,
    {
        let (input, _) = self.align(input, 4)?;
        let (input, x) = parse_ole_color(input)?;
        self.inc(4);
        Ok((input, x))
    }
}