use crate::object::Value;
#[derive(Debug, Clone, PartialEq)]
pub enum Next<T> {
Value(T),
NeedMore,
Eof,
}
pub trait ValueParser<I: ?Sized> {
type Error;
fn new() -> Self;
fn feed(&mut self, input: &I) -> Result<(), Self::Error>;
fn end_of_input(&mut self);
fn parse_one(input: &I) -> Result<Value, Self::Error>
where
Self: Sized,
{
let mut p = Self::new();
p.feed(input)?;
p.end_of_input();
p.parse_full()
}
fn parse_full(&mut self) -> Result<Value, Self::Error>;
fn fparse(&mut self) -> Result<Value, Self::Error> {
self.parse_full()
}
fn parse_next(&mut self) -> Result<Next<Value>, Self::Error>;
fn pparse(&mut self) -> Result<Next<Value>, Self::Error> {
self.parse_next()
}
fn pos(&self) -> usize {
0
}
}