Skip to content

Commit 3b7e988

Browse files
RUST-2229 Expose raw deserializer (#584)
1 parent 2e4f285 commit 3b7e988

File tree

5 files changed

+20
-20
lines changed

5 files changed

+20
-20
lines changed

src/de.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
//! Deserializer
2323
24-
mod raw;
24+
pub(crate) mod raw;
2525
mod serde;
2626

2727
pub use self::serde::Deserializer;
@@ -40,9 +40,6 @@ use ::serde::{de::DeserializeOwned, Deserialize};
4040

4141
pub(crate) use self::serde::{convert_unsigned_to_signed_raw, BsonVisitor};
4242

43-
#[cfg(test)]
44-
pub(crate) use self::raw::Deserializer as RawDeserializer;
45-
4643
/// Hint provided to the deserializer via `deserialize_newtype_struct` as to the type of thing
4744
/// being deserialized.
4845
#[derive(Debug, Clone, Copy)]
@@ -108,11 +105,11 @@ pub fn deserialize_from_slice<'de, T>(bytes: &'de [u8]) -> Result<T>
108105
where
109106
T: Deserialize<'de>,
110107
{
111-
deserialize_from_raw(raw::Deserializer::new(bytes)?)
108+
deserialize_from_raw(raw::RawDeserializer::new(bytes)?)
112109
}
113110

114111
pub(crate) fn deserialize_from_raw<'de, T: Deserialize<'de>>(
115-
deserializer: raw::Deserializer<'de>,
112+
deserializer: raw::RawDeserializer<'de>,
116113
) -> Result<T> {
117114
#[cfg(feature = "serde_path_to_error")]
118115
{

src/de/raw.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ use crate::{
3737
use super::{DeserializerHint, Error, Result};
3838
use crate::de::serde::MapDeserializer;
3939

40-
/// Deserializer mapping from raw bson to serde's data model.
41-
pub(crate) struct Deserializer<'de> {
40+
/// Deserializer for deserializing raw BSON bytes.
41+
pub struct RawDeserializer<'de> {
4242
element: RawElement<'de>,
4343
options: DeserializerOptions,
4444
}
@@ -49,8 +49,10 @@ struct DeserializerOptions {
4949
human_readable: bool,
5050
}
5151

52-
impl<'de> Deserializer<'de> {
53-
pub(crate) fn new(buf: &'de [u8]) -> Result<Self> {
52+
impl<'de> RawDeserializer<'de> {
53+
/// Construct a `RawDeserializer` with the provided bytes. Returns an error if the basic
54+
/// structure of the bytes is invalid.
55+
pub fn new(buf: &'de [u8]) -> Result<Self> {
5456
Ok(Self {
5557
element: RawElement::toplevel(buf)?,
5658
options: DeserializerOptions {
@@ -199,7 +201,7 @@ impl<'de> Deserializer<'de> {
199201
}
200202
}
201203

202-
impl<'de> serde::de::Deserializer<'de> for Deserializer<'de> {
204+
impl<'de> serde::de::Deserializer<'de> for RawDeserializer<'de> {
203205
type Error = Error;
204206

205207
#[inline]
@@ -336,7 +338,7 @@ impl<'de> DocumentAccess<'de> {
336338
Ok(())
337339
}
338340

339-
fn deserializer(self) -> Result<Deserializer<'de>> {
341+
fn deserializer(self) -> Result<RawDeserializer<'de>> {
340342
let elem = match self.elem {
341343
Some(e) => e,
342344
None => {
@@ -345,7 +347,7 @@ impl<'de> DocumentAccess<'de> {
345347
))
346348
}
347349
};
348-
Ok(Deserializer {
350+
Ok(RawDeserializer {
349351
element: elem,
350352
options: self.options,
351353
})
@@ -374,7 +376,7 @@ impl<'de> serde::de::MapAccess<'de> for DocumentAccess<'de> {
374376
{
375377
match &self.elem {
376378
None => Err(Error::deserialization("too many values requested")),
377-
Some(elem) => seed.deserialize(Deserializer {
379+
Some(elem) => seed.deserialize(RawDeserializer {
378380
element: elem.clone(),
379381
options: self.options.clone(),
380382
}),
@@ -396,7 +398,7 @@ impl<'de> serde::de::SeqAccess<'de> for DocumentAccess<'de> {
396398
match &self.elem {
397399
None => Ok(None),
398400
Some(elem) => seed
399-
.deserialize(Deserializer {
401+
.deserialize(RawDeserializer {
400402
element: elem.clone(),
401403
options: self.options.clone(),
402404
})

src/de/serde.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ where
588588
}
589589
}
590590

591-
/// Serde Deserializer
591+
/// Deserializer for deserializing a [`Bson`] value.
592592
pub struct Deserializer {
593593
value: Option<Bson>,
594594
options: DeserializerOptions,
@@ -604,7 +604,7 @@ pub(crate) struct DeserializerOptions {
604604
}
605605

606606
impl Deserializer {
607-
/// Construct a new [`Deserializer`] using the default options.
607+
/// Construct a `Deserializer` with the provided [`Bson`] value.
608608
pub fn new(value: Bson) -> Deserializer {
609609
Deserializer::new_with_options(value, Default::default())
610610
}

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,7 @@ pub use self::{
407407
deserialize_from_document,
408408
deserialize_from_reader,
409409
deserialize_from_slice,
410+
raw::RawDeserializer,
410411
Deserializer,
411412
},
412413
ser::{

src/tests/spec/corpus.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ fn run_test(test: TestFile) {
185185
if !description.contains("$regex query operator") {
186186
// deserialize the field from raw Bytes into a RawBson
187187
let deserializer_raw =
188-
crate::de::RawDeserializer::new(canonical_bson.as_slice()).unwrap();
188+
crate::RawDeserializer::new(canonical_bson.as_slice()).unwrap();
189189
let raw_bson_field = deserializer_raw
190190
.deserialize_any(FieldVisitor(test_key.as_str(), PhantomData::<RawBsonRef>))
191191
.expect(&description);
@@ -197,7 +197,7 @@ fn run_test(test: TestFile) {
197197

198198
// deserialize the field from raw Bytes into an OwnedRawBson
199199
let deserializer_raw =
200-
crate::de::RawDeserializer::new(canonical_bson.as_slice()).unwrap();
200+
crate::RawDeserializer::new(canonical_bson.as_slice()).unwrap();
201201
let owned_raw_bson_field = deserializer_raw
202202
.deserialize_any(FieldVisitor(test_key.as_str(), PhantomData::<RawBson>))
203203
.expect(&description);
@@ -207,7 +207,7 @@ fn run_test(test: TestFile) {
207207

208208
// deserialize the field from raw Bytes into a Bson
209209
let deserializer_value =
210-
crate::de::RawDeserializer::new(canonical_bson.as_slice()).unwrap();
210+
crate::RawDeserializer::new(canonical_bson.as_slice()).unwrap();
211211
let bson_field = deserializer_value
212212
.deserialize_any(FieldVisitor(test_key.as_str(), PhantomData::<Bson>))
213213
.expect(&description);

0 commit comments

Comments
 (0)