use crate::{Parser, ParserInput, ParserResult, ParsingError};
#[derive(Clone, Copy)]
pub struct Just {
str: &'static str,
}
impl Just {
pub const fn new(str: &'static str) -> Self {
Self { str }
}
}
impl Parser<&'static str> for Just {
fn parse_inner(&self, input: &mut ParserInput) -> ParserResult<&'static str> {
let start = input.at();
let span = input
.try_eat(self.str.len())
.ok_or_else(|| ParsingError::expected_str(start.range(0), self.str))?;
if span.data == self.str {
Ok(span.forge_here(self.str))
} else {
Err(ParsingError::expected_str(
start.range(span.at.len),
self.str,
))
}
}
}