rust-sen/sehn/src/de/base/mod.rs

48 lines
780 B
Rust

use super::{
Read,
Deserializer
};
pub struct BaseDeserializer<R> {
src: R,
peeked_byte: Option<u8>
}
impl<'de, R> BaseDeserializer<R>
where R: Read<'de>
{
pub fn new(src: R) -> Self {
Self {
src,
peeked_byte: None
}
}
fn peek_byte(&mut self) -> Result<u8, R::Error> {
match self.peeked_byte {
Some(byte) => Ok(byte),
None => {
let byte = self.src.read()?;
self.peeked_byte = Some(byte);
Ok(byte)
}
}
}
fn read_byte(&mut self) -> Result<u8, R::Error> {
match self.peeked_byte.take() {
Some(byte) => Ok(byte),
None => self.src.read()
}
}
}
impl<'de, R> Deserializer<'de> for &mut BaseDeserializer<R>
where R: Read<'de>
{
type Error = R::Error;
// fn deserialize_str(self) -> Result<&'de str, Self::Error> {
// }
}