incpa 0.0.1

An INCremental PArser composition crate.
Documentation
use std::fmt::Debug;

use test_case::test_case;

use crate::parsing::Outcome::{Next, Parsed};
use crate::parsing::{Buffer, ParserState, Update};

use super::Literal;

#[test_case("Hello", "Hello World!")]
#[test_case(b"Hello", b"Hello World!".as_slice())]
fn literal_ok<L, I>(literal: L, input: &I) -> anyhow::Result<()>
where
    L: Literal<I> + PartialEq + Debug,
    L::Error: std::error::Error + Send + Sync + 'static,
    L::State: Debug,
    I: ?Sized + Buffer,
{
    let Update { consumed, outcome } = literal.into_parser().feed(input)?;
    assert_eq!(consumed, literal.literal_len());
    match outcome {
        Next(p) => panic!("unexpected {p:?}"),
        Parsed(output) => {
            assert_eq!(literal, output);
            Ok(())
        }
    }
}