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
10pub 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}