use nom::IResult;
pub use nom_both_macros::both_parser;
pub fn some<'a, I, O, F>(f: F) -> impl Fn(I) -> IResult<I, Option<O>>
where
F: Fn(I) -> IResult<I, O>,
{
move |i: I| {
let (i, x) = f(i)?;
Ok((i, Some(x)))
}
}
pub fn none<'a, I, O, F>(_f: F) -> impl Fn(I) -> IResult<I, Option<O>>
where
F: Fn(I) -> IResult<I, O>,
{
move |i: I| Ok((i, None))
}
pub fn alt_left<'a, I, O, F, G>(f: F, _g: G) -> impl Fn(I) -> IResult<I, O>
where
F: Fn(I) -> IResult<I, O>,
G: Fn(I) -> IResult<I, O>,
{
move |i: I| {
let (i, x) = f(i)?;
Ok((i, x))
}
}
pub fn alt_right<'a, I, O, F, G>(_f: F, g: G) -> impl Fn(I) -> IResult<I, O>
where
F: Fn(I) -> IResult<I, O>,
G: Fn(I) -> IResult<I, O>,
{
move |i: I| {
let (i, x) = g(i)?;
Ok((i, x))
}
}