48 lines
780 B
Rust
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> {
|
|
|
|
// }
|
|
} |