mirror of https://git.sr.ht/~stygianentity/bincode
add remaining _seed variants of deserialize functions
This commit is contained in:
parent
30ada4acda
commit
ecbef8d1bb
|
|
@ -290,6 +290,18 @@ impl Config {
|
||||||
config_map!(self, opts => ::internal::deserialize_from(reader, opts))
|
config_map!(self, opts => ::internal::deserialize_from(reader, opts))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Deserializes an object directly from a `Read`er with state `seed` using this configuration
|
||||||
|
///
|
||||||
|
/// If this returns an `Error`, `reader` may be in an invalid state.
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn deserialize_from_seed<'a, R: Read, T: serde::de::DeserializeSeed<'a>>(
|
||||||
|
&self,
|
||||||
|
seed: T,
|
||||||
|
reader: R,
|
||||||
|
) -> Result<T::Value> {
|
||||||
|
config_map!(self, opts => ::internal::deserialize_from_seed(seed, reader, opts))
|
||||||
|
}
|
||||||
|
|
||||||
/// Deserializes an object from a custom `BincodeRead`er using the default configuration.
|
/// Deserializes an object from a custom `BincodeRead`er using the default configuration.
|
||||||
/// It is highly recommended to use `deserialize_from` unless you need to implement
|
/// It is highly recommended to use `deserialize_from` unless you need to implement
|
||||||
/// `BincodeRead` for performance reasons.
|
/// `BincodeRead` for performance reasons.
|
||||||
|
|
@ -303,6 +315,24 @@ impl Config {
|
||||||
config_map!(self, opts => ::internal::deserialize_from_custom(reader, opts))
|
config_map!(self, opts => ::internal::deserialize_from_custom(reader, opts))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Deserializes an object from a custom `BincodeRead`er with state `seed` using the default
|
||||||
|
/// configuration. It is highly recommended to use `deserialize_from` unless you need to
|
||||||
|
/// implement `BincodeRead` for performance reasons.
|
||||||
|
///
|
||||||
|
/// If this returns an `Error`, `reader` may be in an invalid state.
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn deserialize_from_custom_seed<
|
||||||
|
'a,
|
||||||
|
R: BincodeRead<'a>,
|
||||||
|
T: serde::de::DeserializeSeed<'a>,
|
||||||
|
>(
|
||||||
|
&self,
|
||||||
|
seed: T,
|
||||||
|
reader: R,
|
||||||
|
) -> Result<T::Value> {
|
||||||
|
config_map!(self, opts => ::internal::deserialize_from_custom_seed(seed, reader, opts))
|
||||||
|
}
|
||||||
|
|
||||||
/// Executes the acceptor with a serde::Deserializer instance.
|
/// Executes the acceptor with a serde::Deserializer instance.
|
||||||
/// NOT A PART OF THE STABLE PUBLIC API
|
/// NOT A PART OF THE STABLE PUBLIC API
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
|
|
|
||||||
|
|
@ -150,13 +150,13 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<R> BincodeRead<'static> for IoReader<R>
|
impl<'a, R> BincodeRead<'a> for IoReader<R>
|
||||||
where
|
where
|
||||||
R: io::Read,
|
R: io::Read,
|
||||||
{
|
{
|
||||||
fn forward_read_str<V>(&mut self, length: usize, visitor: V) -> Result<V::Value>
|
fn forward_read_str<V>(&mut self, length: usize, visitor: V) -> Result<V::Value>
|
||||||
where
|
where
|
||||||
V: serde::de::Visitor<'static>,
|
V: serde::de::Visitor<'a>,
|
||||||
{
|
{
|
||||||
self.fill_buffer(length)?;
|
self.fill_buffer(length)?;
|
||||||
|
|
||||||
|
|
@ -176,7 +176,7 @@ where
|
||||||
|
|
||||||
fn forward_read_bytes<V>(&mut self, length: usize, visitor: V) -> Result<V::Value>
|
fn forward_read_bytes<V>(&mut self, length: usize, visitor: V) -> Result<V::Value>
|
||||||
where
|
where
|
||||||
V: serde::de::Visitor<'static>,
|
V: serde::de::Visitor<'a>,
|
||||||
{
|
{
|
||||||
self.fill_buffer(length)?;
|
self.fill_buffer(length)?;
|
||||||
let r = visitor.visit_bytes(&self.temp_buffer[..]);
|
let r = visitor.visit_bytes(&self.temp_buffer[..]);
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
use serde;
|
use serde;
|
||||||
use std::io::{Read, Write};
|
use std::io::{Read, Write};
|
||||||
|
use std::marker::PhantomData;
|
||||||
|
|
||||||
use config::{Options, OptionsExt};
|
use config::{Options, OptionsExt};
|
||||||
use de::read::BincodeRead;
|
use de::read::BincodeRead;
|
||||||
|
|
@ -77,10 +78,18 @@ where
|
||||||
R: Read,
|
R: Read,
|
||||||
T: serde::de::DeserializeOwned,
|
T: serde::de::DeserializeOwned,
|
||||||
O: Options,
|
O: Options,
|
||||||
|
{
|
||||||
|
deserialize_from_seed(PhantomData, reader, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn deserialize_from_seed<'a, R, T, O>(seed: T, reader: R, options: O) -> Result<T::Value>
|
||||||
|
where
|
||||||
|
R: Read,
|
||||||
|
T: serde::de::DeserializeSeed<'a>,
|
||||||
|
O: Options,
|
||||||
{
|
{
|
||||||
let reader = ::de::read::IoReader::new(reader);
|
let reader = ::de::read::IoReader::new(reader);
|
||||||
let mut deserializer = ::de::Deserializer::<_, O>::new(reader, options);
|
deserialize_from_custom_seed(seed, reader, options)
|
||||||
serde::Deserialize::deserialize(&mut deserializer)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn deserialize_from_custom<'a, R, T, O>(reader: R, options: O) -> Result<T>
|
pub(crate) fn deserialize_from_custom<'a, R, T, O>(reader: R, options: O) -> Result<T>
|
||||||
|
|
@ -88,9 +97,22 @@ where
|
||||||
R: BincodeRead<'a>,
|
R: BincodeRead<'a>,
|
||||||
T: serde::de::DeserializeOwned,
|
T: serde::de::DeserializeOwned,
|
||||||
O: Options,
|
O: Options,
|
||||||
|
{
|
||||||
|
deserialize_from_custom_seed(PhantomData, reader, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn deserialize_from_custom_seed<'a, R, T, O>(
|
||||||
|
seed: T,
|
||||||
|
reader: R,
|
||||||
|
options: O,
|
||||||
|
) -> Result<T::Value>
|
||||||
|
where
|
||||||
|
R: BincodeRead<'a>,
|
||||||
|
T: serde::de::DeserializeSeed<'a>,
|
||||||
|
O: Options,
|
||||||
{
|
{
|
||||||
let mut deserializer = ::de::Deserializer::<_, O>::new(reader, options);
|
let mut deserializer = ::de::Deserializer::<_, O>::new(reader, options);
|
||||||
serde::Deserialize::deserialize(&mut deserializer)
|
seed.deserialize(&mut deserializer)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn deserialize_in_place<'a, R, T, O>(reader: R, options: O, place: &mut T) -> Result<()>
|
pub(crate) fn deserialize_in_place<'a, R, T, O>(reader: R, options: O, place: &mut T) -> Result<()>
|
||||||
|
|
@ -108,10 +130,7 @@ where
|
||||||
T: serde::de::Deserialize<'a>,
|
T: serde::de::Deserialize<'a>,
|
||||||
O: Options,
|
O: Options,
|
||||||
{
|
{
|
||||||
let reader = ::de::read::SliceReader::new(bytes);
|
deserialize_seed(PhantomData, bytes, options)
|
||||||
let options = ::config::WithOtherLimit::new(options, Infinite);
|
|
||||||
let mut deserializer = ::de::Deserializer::new(reader, options);
|
|
||||||
serde::Deserialize::deserialize(&mut deserializer)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn deserialize_seed<'a, T, O>(seed: T, bytes: &'a [u8], options: O) -> Result<T::Value>
|
pub(crate) fn deserialize_seed<'a, T, O>(seed: T, bytes: &'a [u8], options: O) -> Result<T::Value>
|
||||||
|
|
@ -121,8 +140,7 @@ where
|
||||||
{
|
{
|
||||||
let reader = ::de::read::SliceReader::new(bytes);
|
let reader = ::de::read::SliceReader::new(bytes);
|
||||||
let options = ::config::WithOtherLimit::new(options, Infinite);
|
let options = ::config::WithOtherLimit::new(options, Infinite);
|
||||||
let mut deserializer = ::de::Deserializer::new(reader, options);
|
deserialize_from_custom_seed(seed, reader, options)
|
||||||
seed.deserialize(&mut deserializer)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) trait SizeLimit: Clone {
|
pub(crate) trait SizeLimit: Clone {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue