From 25d110f8fe6c787d3e2597c9017dd05fe904de83 Mon Sep 17 00:00:00 2001 From: David Koloski Date: Mon, 29 Nov 2021 13:32:01 -0500 Subject: [PATCH] Add serialize method that takes a supplied vec --- src/ser/mod.rs | 12 ++++++++++++ src/ser/raw/mod.rs | 7 ++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/ser/mod.rs b/src/ser/mod.rs index a15065e8..ff59340d 100644 --- a/src/ser/mod.rs +++ b/src/ser/mod.rs @@ -283,6 +283,18 @@ where Ok(serializer.into_vec()) } +/// Serialize the given `T` as a BSON byte vector into the provided `Vec`. +#[inline] +pub fn into_vec(value: &T, vec: Vec) -> Result> +where + T: Serialize, +{ + let mut serializer = raw::Serializer::with_vec(vec); + value.serialize(&mut serializer)?; + Ok(serializer.into_vec()) +} + + /// Serialize the given `T` as a [`RawDocumentBuf`]. /// /// ```rust diff --git a/src/ser/raw/mod.rs b/src/ser/raw/mod.rs index 960c5a46..41f062f3 100644 --- a/src/ser/raw/mod.rs +++ b/src/ser/raw/mod.rs @@ -56,8 +56,13 @@ impl SerializerHint { impl Serializer { pub(crate) fn new() -> Self { + Self::with_vec(Vec::new()) + } + + pub(crate) fn with_vec(mut bytes: Vec) -> Self { + bytes.clear(); Self { - bytes: Vec::new(), + bytes, type_index: 0, hint: SerializerHint::None, }