Provide raw &str access from Decoder
This commit is contained in:
parent
68369a041c
commit
da3b2ca956
2 changed files with 4 additions and 5 deletions
|
@ -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]
|
||||||
|
|
|
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue