Move raw bytes handling to Encoder/Decoder.
This commit is contained in:
parent
e5d09fbbe9
commit
09a638820e
9 changed files with 84 additions and 49 deletions
|
@ -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>,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue