2
2
3
3
use std:: { convert:: TryFrom , result:: Result } ;
4
4
5
- use serde:: { ser, Serialize , Serializer } ;
6
-
7
- use crate :: oid:: ObjectId ;
5
+ use serde:: { ser, Serializer } ;
8
6
9
7
pub use bson_datetime_as_iso_string:: {
10
8
deserialize as deserialize_bson_datetime_from_iso_string,
@@ -14,21 +12,22 @@ pub use chrono_datetime_as_bson_datetime::{
14
12
deserialize as deserialize_chrono_datetime_from_bson_datetime,
15
13
serialize as serialize_chrono_datetime_as_bson_datetime,
16
14
} ;
15
+ pub use hex_string_as_object_id:: {
16
+ deserialize as deserialize_hex_string_from_object_id,
17
+ serialize as serialize_hex_string_as_object_id,
18
+ } ;
17
19
pub use iso_string_as_bson_datetime:: {
18
20
deserialize as deserialize_iso_string_from_bson_datetime,
19
21
serialize as serialize_iso_string_as_bson_datetime,
20
22
} ;
21
23
pub use timestamp_as_u32:: {
22
- deserialize as deserialize_timestamp_from_u32,
23
- serialize as serialize_timestamp_as_u32,
24
+ deserialize as deserialize_timestamp_from_u32, serialize as serialize_timestamp_as_u32,
24
25
} ;
25
26
pub use u32_as_timestamp:: {
26
- deserialize as deserialize_u32_from_timestamp,
27
- serialize as serialize_u32_as_timestamp,
27
+ deserialize as deserialize_u32_from_timestamp, serialize as serialize_u32_as_timestamp,
28
28
} ;
29
29
pub use uuid_as_binary:: {
30
- deserialize as deserialize_uuid_from_binary,
31
- serialize as serialize_uuid_as_binary,
30
+ deserialize as deserialize_uuid_from_binary, serialize as serialize_uuid_as_binary,
32
31
} ;
33
32
34
33
/// Attempts to serialize a u32 as an i32. Errors if an exact conversion is not possible.
@@ -167,17 +166,40 @@ pub mod bson_datetime_as_iso_string {
167
166
}
168
167
}
169
168
170
- /// Serializes a hex string as an ObjectId.
171
- pub fn serialize_hex_string_as_object_id < S : Serializer > (
172
- val : & str ,
173
- serializer : S ,
174
- ) -> Result < S :: Ok , S :: Error > {
175
- match ObjectId :: with_string ( val) {
176
- Ok ( oid) => oid. serialize ( serializer) ,
177
- Err ( _) => Err ( ser:: Error :: custom ( format ! (
178
- "cannot convert {} to ObjectId" ,
179
- val
180
- ) ) ) ,
169
+ /// Contains functions to serialize a hex string as an ObjectId and deserialize a
170
+ /// hex string from an ObjectId
171
+ ///
172
+ /// ```rust
173
+ /// # use serde::{Serialize, Deserialize};
174
+ /// # use bson::serde_helpers::hex_string_as_object_id;
175
+ /// #[derive(Serialize, Deserialize)]
176
+ /// struct Item {
177
+ /// #[serde(with = "hex_string_as_object_id")]
178
+ /// pub id: String,
179
+ /// }
180
+ /// ```
181
+ pub mod hex_string_as_object_id {
182
+ use crate :: oid:: ObjectId ;
183
+ use serde:: { ser, Deserialize , Deserializer , Serialize , Serializer } ;
184
+
185
+ /// Deserializes a hex string from an ObjectId.
186
+ pub fn deserialize < ' de , D > ( deserializer : D ) -> Result < String , D :: Error >
187
+ where
188
+ D : Deserializer < ' de > ,
189
+ {
190
+ let object_id = ObjectId :: deserialize ( deserializer) ?;
191
+ Ok ( object_id. to_hex ( ) )
192
+ }
193
+
194
+ /// Serializes a hex string as an ObjectId.
195
+ pub fn serialize < S : Serializer > ( val : & str , serializer : S ) -> Result < S :: Ok , S :: Error > {
196
+ match ObjectId :: with_string ( val) {
197
+ Ok ( oid) => oid. serialize ( serializer) ,
198
+ Err ( _) => Err ( ser:: Error :: custom ( format ! (
199
+ "cannot convert {} to ObjectId" ,
200
+ val
201
+ ) ) ) ,
202
+ }
181
203
}
182
204
}
183
205
0 commit comments