flash-lso 0.7.0

Fast and safe SOL/AMF0/AMF3 parsing. Supports serde, Adobe flex and cyclic references
Documentation
use crate::errors::Error;
use nom::Parser;
use nom::bytes::complete::take;
use nom::combinator::map_res;

use crate::write::WriteExt;
use nom::IResult;
use std::io::Write;

/// The result type of all AMF parsers
pub type AMFResult<'a, T> = IResult<&'a [u8], T, Error<'a>>;

pub(crate) fn write_string<'a, 'b: 'a, W: Write + 'a>(
    writer: &mut W,
    s: &'b str,
) -> std::io::Result<()> {
    writer.write_u16(s.len() as u16)?;
    writer.write_all(s.as_bytes())?;
    Ok(())
}

pub(crate) fn take_str(i: &[u8], length: u16) -> AMFResult<'_, &str> {
    map_res(take(length), std::str::from_utf8).parse(i)
}