Skip to content

Commit 5c8919f

Browse files
RUST-1748 Fix use of functions from bson::serde_helpers (#1434)
1 parent 2a0d65a commit 5c8919f

File tree

7 files changed

+46
-22
lines changed

7 files changed

+46
-22
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/coll/options.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use serde_with::skip_serializing_none;
66
use typed_builder::TypedBuilder;
77

88
use crate::{
9-
bson::{doc, serde_helpers, Bson, Document, RawBson, RawDocumentBuf},
9+
bson::{doc, Bson, Document, RawBson, RawDocumentBuf},
1010
concern::{ReadConcern, WriteConcern},
1111
error::Result,
1212
options::Collation,
@@ -1186,7 +1186,7 @@ impl Serialize for CommitQuorum {
11861186
S: Serializer,
11871187
{
11881188
match self {
1189-
CommitQuorum::Nodes(n) => serde_helpers::serialize_u32_as_i32(n, serializer),
1189+
CommitQuorum::Nodes(n) => serde_util::serialize_u32_as_i32(n, serializer),
11901190
CommitQuorum::VotingMembers => serializer.serialize_str("votingMembers"),
11911191
CommitQuorum::Majority => serializer.serialize_str("majority"),
11921192
CommitQuorum::Custom(s) => serializer.serialize_str(s),

src/concern.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use serde_with::skip_serializing_none;
1010
use typed_builder::TypedBuilder;
1111

1212
use crate::{
13-
bson::{doc, serde_helpers, Timestamp},
13+
bson::{doc, Timestamp},
1414
error::{ErrorKind, Result},
1515
serde_util,
1616
};
@@ -244,7 +244,7 @@ impl Serialize for Acknowledgment {
244244
{
245245
match self {
246246
Acknowledgment::Majority => serializer.serialize_str("majority"),
247-
Acknowledgment::Nodes(n) => serde_helpers::serialize_u32_as_i32(n, serializer),
247+
Acknowledgment::Nodes(n) => serde_util::serialize_u32_as_i32(n, serializer),
248248
Acknowledgment::Custom(name) => serializer.serialize_str(name),
249249
}
250250
}

src/gridfs.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use crate::{
1414
checked::Checked,
1515
error::Error,
1616
options::{CollectionOptions, ReadConcern, SelectionCriteria, WriteConcern},
17+
serde_util,
1718
Collection,
1819
Database,
1920
};
@@ -31,7 +32,7 @@ pub(crate) struct Chunk<'a> {
3132
#[serde(rename = "_id")]
3233
id: ObjectId,
3334
files_id: Bson,
34-
#[serde(serialize_with = "crate::bson::serde_helpers::serialize_u32_as_i32")]
35+
#[serde(serialize_with = "serde_util::serialize_u32_as_i32")]
3536
n: u32,
3637
#[serde(borrow)]
3738
data: RawBinaryRef<'a>,
@@ -54,7 +55,7 @@ pub struct FilesCollectionDocument {
5455
/// The size of the file's chunks in bytes.
5556
#[serde(
5657
rename = "chunkSize",
57-
serialize_with = "crate::bson::serde_helpers::serialize_u32_as_i32"
58+
serialize_with = "serde_util::serialize_u32_as_i32"
5859
)]
5960
pub chunk_size_bytes: u32,
6061

src/index/options.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
use std::time::Duration;
22

3-
use crate::{
4-
bson::{serde_helpers, Document},
5-
collation::Collation,
6-
serde_util,
7-
};
3+
use crate::{bson::Document, collation::Collation, serde_util};
84

95
use serde::{Deserialize, Deserializer, Serialize, Serializer};
106
use typed_builder::TypedBuilder;
@@ -157,7 +153,7 @@ impl Serialize for IndexVersion {
157153
IndexVersion::V0 => serializer.serialize_i32(0),
158154
IndexVersion::V1 => serializer.serialize_i32(1),
159155
IndexVersion::V2 => serializer.serialize_i32(2),
160-
IndexVersion::Custom(i) => serde_helpers::serialize_u32_as_i32(i, serializer),
156+
IndexVersion::Custom(i) => serde_util::serialize_u32_as_i32(i, serializer),
161157
}
162158
}
163159
}
@@ -203,7 +199,7 @@ impl Serialize for TextIndexVersion {
203199
TextIndexVersion::V1 => serializer.serialize_i32(1),
204200
TextIndexVersion::V2 => serializer.serialize_i32(2),
205201
TextIndexVersion::V3 => serializer.serialize_i32(3),
206-
TextIndexVersion::Custom(i) => serde_helpers::serialize_u32_as_i32(i, serializer),
202+
TextIndexVersion::Custom(i) => serde_util::serialize_u32_as_i32(i, serializer),
207203
}
208204
}
209205
}
@@ -244,7 +240,7 @@ impl Serialize for Sphere2DIndexVersion {
244240
match self {
245241
Sphere2DIndexVersion::V2 => serializer.serialize_i32(2),
246242
Sphere2DIndexVersion::V3 => serializer.serialize_i32(3),
247-
Sphere2DIndexVersion::Custom(i) => serde_helpers::serialize_u32_as_i32(i, serializer),
243+
Sphere2DIndexVersion::Custom(i) => serde_util::serialize_u32_as_i32(i, serializer),
248244
}
249245
}
250246
}

src/results.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use serde::{Deserialize, Serialize};
88
use serde_with::skip_serializing_none;
99

1010
use crate::{
11-
bson::{serde_helpers, Binary, Bson, Document, RawDocumentBuf},
11+
bson::{Binary, Bson, Document, RawDocumentBuf},
1212
change_stream::event::ResumeToken,
1313
db::options::CreateCollectionOptions,
1414
serde_util,
@@ -53,11 +53,11 @@ pub struct InsertManyResult {
5353
#[non_exhaustive]
5454
pub struct UpdateResult {
5555
/// The number of documents that matched the filter.
56-
#[serde(serialize_with = "crate::bson::serde_helpers::serialize_u64_as_i64")]
56+
#[serde(serialize_with = "serde_util::serialize_u64_as_i64")]
5757
pub matched_count: u64,
5858

5959
/// The number of documents that were modified by the operation.
60-
#[serde(serialize_with = "crate::bson::serde_helpers::serialize_u64_as_i64")]
60+
#[serde(serialize_with = "serde_util::serialize_u64_as_i64")]
6161
pub modified_count: u64,
6262

6363
/// The `_id` field of the upserted document.
@@ -71,7 +71,7 @@ pub struct UpdateResult {
7171
#[non_exhaustive]
7272
pub struct DeleteResult {
7373
/// The number of documents deleted by the operation.
74-
#[serde(serialize_with = "crate::bson::serde_helpers::serialize_u64_as_i64")]
74+
#[serde(serialize_with = "serde_util::serialize_u64_as_i64")]
7575
pub deleted_count: u64,
7676
}
7777

@@ -182,7 +182,7 @@ pub struct DatabaseSpecification {
182182
/// The amount of disk space in bytes that is consumed by the database.
183183
#[serde(
184184
deserialize_with = "serde_util::deserialize_u64_from_bson_number",
185-
serialize_with = "serde_helpers::serialize_u64_as_i64"
185+
serialize_with = "serde_util::serialize_u64_as_i64"
186186
)]
187187
pub size_on_disk: u64,
188188

src/serde_util.rs

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use crate::{
77
bson_util::get_u64,
88
error::{Error, Result},
99
options::WriteConcern,
10+
serde_util,
1011
};
1112

1213
pub(crate) mod duration_option_as_int_seconds {
@@ -73,7 +74,7 @@ pub(crate) fn serialize_u32_option_as_i32<S: Serializer>(
7374
serializer: S,
7475
) -> std::result::Result<S::Ok, S::Error> {
7576
match val {
76-
Some(ref val) => crate::bson::serde_helpers::serialize_u32_as_i32(val, serializer),
77+
Some(ref val) => serde_util::serialize_u32_as_i32(val, serializer),
7778
None => serializer.serialize_none(),
7879
}
7980
}
@@ -101,7 +102,7 @@ pub(crate) fn serialize_u64_option_as_i64<S: Serializer>(
101102
serializer: S,
102103
) -> std::result::Result<S::Ok, S::Error> {
103104
match val {
104-
Some(ref v) => crate::bson::serde_helpers::serialize_u64_as_i64(v, serializer),
105+
Some(ref v) => serde_util::serialize_u64_as_i64(v, serializer),
105106
None => serializer.serialize_none(),
106107
}
107108
}
@@ -225,3 +226,29 @@ pub(crate) fn serialize_bool_or_true<S: Serializer>(
225226
let val = val.unwrap_or(true);
226227
serializer.serialize_bool(val)
227228
}
229+
230+
pub(crate) fn serialize_u32_as_i32<S: Serializer>(
231+
n: &u32,
232+
serializer: S,
233+
) -> std::result::Result<S::Ok, S::Error> {
234+
match i32::try_from(*n) {
235+
Ok(n) => n.serialize(serializer),
236+
Err(_) => Err(serde::ser::Error::custom(format!(
237+
"cannot serialize u32 {} as i32",
238+
n
239+
))),
240+
}
241+
}
242+
243+
pub(crate) fn serialize_u64_as_i64<S: Serializer>(
244+
n: &u64,
245+
serializer: S,
246+
) -> std::result::Result<S::Ok, S::Error> {
247+
match i64::try_from(*n) {
248+
Ok(n) => n.serialize(serializer),
249+
Err(_) => Err(serde::ser::Error::custom(format!(
250+
"cannot serialize u64 {} as i64",
251+
n
252+
))),
253+
}
254+
}

0 commit comments

Comments
 (0)