From fdb0a78ec3846780e282de32a1fcd0d994588010 Mon Sep 17 00:00:00 2001 From: Abraham Egnor Date: Mon, 28 Aug 2023 14:39:21 -0400 Subject: [PATCH 1/2] RUST-1743 Fix gridfs numeric type serialization --- src/gridfs.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/gridfs.rs b/src/gridfs.rs index b0e46a75d..3302224ac 100644 --- a/src/gridfs.rs +++ b/src/gridfs.rs @@ -31,11 +31,19 @@ pub(crate) struct Chunk<'a> { #[serde(rename = "_id")] id: ObjectId, files_id: Bson, + #[serde(serialize_with = "u32_as_i32")] n: u32, #[serde(borrow)] data: RawBinaryRef<'a>, } +fn u32_as_i32(value: &u32, ser: S) -> std::result::Result +where + S: serde::Serializer, +{ + ser.serialize_i32((*value).try_into().map_err(serde::ser::Error::custom)?) +} + /// A model for the documents stored in a GridFS bucket's files /// collection. #[derive(Clone, Debug, Deserialize, Serialize)] @@ -51,7 +59,7 @@ pub struct FilesCollectionDocument { pub length: u64, /// The size of the file's chunks in bytes. - #[serde(rename = "chunkSize")] + #[serde(rename = "chunkSize", serialize_with = "u32_as_i32")] pub chunk_size_bytes: u32, /// The time at which the file was uploaded. From 69347fdf337d2bd985f83c89909ce8acd991cadf Mon Sep 17 00:00:00 2001 From: Abraham Egnor Date: Tue, 29 Aug 2023 13:30:00 -0400 Subject: [PATCH 2/2] use existing helper --- src/gridfs.rs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/gridfs.rs b/src/gridfs.rs index 3302224ac..29c757581 100644 --- a/src/gridfs.rs +++ b/src/gridfs.rs @@ -31,19 +31,12 @@ pub(crate) struct Chunk<'a> { #[serde(rename = "_id")] id: ObjectId, files_id: Bson, - #[serde(serialize_with = "u32_as_i32")] + #[serde(serialize_with = "bson::serde_helpers::serialize_u32_as_i32")] n: u32, #[serde(borrow)] data: RawBinaryRef<'a>, } -fn u32_as_i32(value: &u32, ser: S) -> std::result::Result -where - S: serde::Serializer, -{ - ser.serialize_i32((*value).try_into().map_err(serde::ser::Error::custom)?) -} - /// A model for the documents stored in a GridFS bucket's files /// collection. #[derive(Clone, Debug, Deserialize, Serialize)] @@ -59,7 +52,10 @@ pub struct FilesCollectionDocument { pub length: u64, /// The size of the file's chunks in bytes. - #[serde(rename = "chunkSize", serialize_with = "u32_as_i32")] + #[serde( + rename = "chunkSize", + serialize_with = "bson::serde_helpers::serialize_u32_as_i32" + )] pub chunk_size_bytes: u32, /// The time at which the file was uploaded.