1
Fork 0

Move raw bytes handling to Encoder/Decoder.

This commit is contained in:
Camille GILLOT 2021-03-11 22:06:45 +01:00
parent e5d09fbbe9
commit 09a638820e
9 changed files with 84 additions and 49 deletions

View file

@ -188,6 +188,7 @@ use std::collections::{BTreeMap, HashMap};
use std::io;
use std::io::prelude::*;
use std::mem::swap;
use std::mem::MaybeUninit;
use std::num::FpCategory as Fp;
use std::ops::Index;
use std::str::FromStr;
@ -553,6 +554,12 @@ impl<'a> crate::Encoder for Encoder<'a> {
fn emit_str(&mut self, v: &str) -> EncodeResult {
escape_str(self.writer, v)
}
fn emit_raw_bytes(&mut self, s: &[u8]) -> Result<(), Self::Error> {
for &c in s.iter() {
self.emit_u8(c)?;
}
Ok(())
}
fn emit_enum<F>(&mut self, _name: &str, f: F) -> EncodeResult
where
@ -879,6 +886,12 @@ impl<'a> crate::Encoder for PrettyEncoder<'a> {
fn emit_str(&mut self, v: &str) -> EncodeResult {
escape_str(self.writer, v)
}
fn emit_raw_bytes(&mut self, s: &[u8]) -> Result<(), Self::Error> {
for &c in s.iter() {
self.emit_u8(c)?;
}
Ok(())
}
fn emit_enum<F>(&mut self, _name: &str, f: F) -> EncodeResult
where
@ -2354,6 +2367,14 @@ impl crate::Decoder for Decoder {
expect!(self.pop(), String).map(Cow::Owned)
}
fn read_raw_bytes(&mut self, s: &mut [MaybeUninit<u8>]) -> Result<(), Self::Error> {
for c in s.iter_mut() {
let h = self.read_u8()?;
unsafe { *c.as_mut_ptr() = h };
}
Ok(())
}
fn read_enum<T, F>(&mut self, _name: &str, f: F) -> DecodeResult<T>
where
F: FnOnce(&mut Decoder) -> DecodeResult<T>,