1
Fork 0

Provide raw &str access from Decoder

This commit is contained in:
Mark Rousskov 2022-02-22 18:05:51 -05:00
parent 68369a041c
commit da3b2ca956
2 changed files with 4 additions and 5 deletions

View file

@ -1,6 +1,5 @@
use crate::leb128::{self, max_leb128_len}; use crate::leb128::{self, max_leb128_len};
use crate::serialize::{self, Encoder as _}; use crate::serialize::{self, Encoder as _};
use std::borrow::Cow;
use std::convert::TryInto; use std::convert::TryInto;
use std::fs::File; use std::fs::File;
use std::io::{self, Write}; use std::io::{self, Write};
@ -663,7 +662,7 @@ impl<'a> serialize::Decoder for Decoder<'a> {
} }
#[inline] #[inline]
fn read_str(&mut self) -> Cow<'_, str> { fn read_str(&mut self) -> &str {
let len = self.read_usize(); let len = self.read_usize();
let sentinel = self.data[self.position + len]; let sentinel = self.data[self.position + len];
assert!(sentinel == STR_SENTINEL); assert!(sentinel == STR_SENTINEL);
@ -671,7 +670,7 @@ impl<'a> serialize::Decoder for Decoder<'a> {
std::str::from_utf8_unchecked(&self.data[self.position..self.position + len]) std::str::from_utf8_unchecked(&self.data[self.position..self.position + len])
}; };
self.position += len + 1; self.position += len + 1;
Cow::Borrowed(s) s
} }
#[inline] #[inline]

View file

@ -198,7 +198,7 @@ pub trait Decoder {
fn read_f64(&mut self) -> f64; fn read_f64(&mut self) -> f64;
fn read_f32(&mut self) -> f32; fn read_f32(&mut self) -> f32;
fn read_char(&mut self) -> char; fn read_char(&mut self) -> char;
fn read_str(&mut self) -> Cow<'_, str>; fn read_str(&mut self) -> &str;
fn read_raw_bytes_into(&mut self, s: &mut [u8]); fn read_raw_bytes_into(&mut self, s: &mut [u8]);
} }
@ -313,7 +313,7 @@ impl<S: Encoder> Encodable<S> for String {
impl<D: Decoder> Decodable<D> for String { impl<D: Decoder> Decodable<D> for String {
fn decode(d: &mut D) -> String { fn decode(d: &mut D) -> String {
d.read_str().into_owned() d.read_str().to_owned()
} }
} }