udled 0.10.1

Tokenizer and parser
Documentation
use crate::{Buffer, Reader, Result, Tokenizer};

#[deprecated(
    since = "0.10.0",
    note = "PeekFull is deprecated and will be removed in a future version. Use `TokenizerExt::peek` instead."
)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub struct PeekFull<T>(pub T);

impl<'input, T, B> Tokenizer<'input, B> for PeekFull<T>
where
    T: Tokenizer<'input, B>,
    B: Buffer<'input>,
{
    type Token = T::Token;

    fn to_token(&self, reader: &mut Reader<'_, 'input, B>) -> Result<Self::Token> {
        self.0.to_token(reader)
    }

    fn eat(&self, reader: &mut Reader<'_, 'input, B>) -> Result<()> {
        self.0.eat(reader)
    }

    fn peek(&self, reader: &mut Reader<'_, 'input, B>) -> bool {
        self.eat(reader).is_ok()
    }
}

pub struct Peek<T1, T2>(pub T1, pub T2);

impl<'input, T1, T2, B> Tokenizer<'input, B> for Peek<T1, T2>
where
    B: Buffer<'input>,
    T1: Tokenizer<'input, B>,
    T2: Tokenizer<'input, B>,
{
    type Token = (T1::Token, T2::Token);

    fn to_token(&self, reader: &mut Reader<'_, 'input, B>) -> Result<Self::Token> {
        reader.parse((&self.0, &self.1))
    }

    fn eat(&self, reader: &mut Reader<'_, 'input, B>) -> Result<()> {
        reader.eat((&self.0, &self.1))
    }

    fn peek(&self, reader: &mut Reader<'_, 'input, B>) -> bool {
        if reader.eat(&self.0).is_err() {
            return false;
        }
        reader.is(&self.1)
    }
}