Skip to main content

flash_lso/
nom_utils.rs

1use crate::errors::Error;
2use nom::Parser;
3use nom::bytes::complete::take;
4use nom::combinator::map_res;
5
6use crate::write::WriteExt;
7use nom::IResult;
8use std::io::Write;
9
10/// The result type of all AMF parsers
11pub type AMFResult<'a, T> = IResult<&'a [u8], T, Error<'a>>;
12
13pub(crate) fn write_string<'a, 'b: 'a, W: Write + 'a>(
14    writer: &mut W,
15    s: &'b str,
16) -> std::io::Result<()> {
17    writer.write_u16(s.len() as u16)?;
18    writer.write_all(s.as_bytes())?;
19    Ok(())
20}
21
22pub(crate) fn take_str(i: &[u8], length: u16) -> AMFResult<'_, &str> {
23    map_res(take(length), std::str::from_utf8).parse(i)
24}