use super::{BoxedParserFn, NodeParserResult};
use crate::parser::state::ParserState;
pub fn map<'src, PF, MF, O1, O2>(parser_function: PF, map_function: MF) -> BoxedParserFn<'src, O2>
where
PF: (Fn(&mut ParserState<'src>) -> O1) + 'static,
MF: (Fn(O1) -> O2) + 'static,
{
Box::new(move |parser_state: &mut ParserState| (map_function)((parser_function)(parser_state)))
}
pub fn map_node_type<'src, PF, MF, N1, N2>(
parser_function: PF,
map_function: MF,
) -> BoxedParserFn<'src, NodeParserResult<N2>>
where
PF: (Fn(&mut ParserState<'src>) -> NodeParserResult<N1>) + 'src,
MF: (Fn(N1) -> N2) + 'src,
{
Box::new(move |parser_state: &mut ParserState<'_>| {
let parser_result = (parser_function)(parser_state);
#[allow(clippy::redundant_closure)]
parser_result.map(|node| (map_function)(node))
})
}