use crate::error::{CoreOperation, ExpectedLength};
use crate::input::PrivateExt;
use super::StringReader;
impl<'i, E> StringReader<'i, E> {
#[inline]
pub fn read_char(&mut self) -> Result<char, E>
where
E: From<ExpectedLength<'i>>,
{
self.try_advance(|input| input.split_token(CoreOperation::ReadChar))
}
#[inline]
pub fn read_char_opt(&mut self) -> Option<char> {
self.advance_opt(PrivateExt::split_token_opt)
}
#[inline]
pub fn peek_char(&self) -> Result<char, E>
where
E: From<ExpectedLength<'i>>,
{
self.input
.clone()
.split_token(CoreOperation::PeekChar)
.map(|(token, _)| token)
}
#[inline]
#[must_use = "peek result must be used"]
pub fn peek_char_opt(&self) -> Option<char> {
self.input.clone().split_token_opt().map(|(token, _)| token)
}
}