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)
}
}