File tree Expand file tree Collapse file tree 3 files changed +35
-1
lines changed Expand file tree Collapse file tree 3 files changed +35
-1
lines changed Original file line number Diff line number Diff line change @@ -44,7 +44,11 @@ pub struct CreateCollectionOptions {
44
44
45
45
/// The maximum size (in bytes) for a capped collection. This option is ignored if `capped` is
46
46
/// not set to true.
47
- #[ serde( serialize_with = "serde_util::serialize_u64_option_as_i64" ) ]
47
+ #[ serde(
48
+ serialize_with = "serde_util::serialize_u64_option_as_i64" ,
49
+ deserialize_with = "serde_util::deserialize_option_u64_from_bson_number" ,
50
+ default
51
+ ) ]
48
52
pub size : Option < u64 > ,
49
53
50
54
/// The maximum number of documents in a capped collection. The `size` limit takes precedence
Original file line number Diff line number Diff line change @@ -118,6 +118,21 @@ where
118
118
. ok_or_else ( || serde:: de:: Error :: custom ( format ! ( "could not deserialize u64 from {bson:?}" ) ) )
119
119
}
120
120
121
+ pub ( crate ) fn deserialize_option_u64_from_bson_number < ' de , D > (
122
+ deserializer : D ,
123
+ ) -> std:: result:: Result < Option < u64 > , D :: Error >
124
+ where
125
+ D : Deserializer < ' de > ,
126
+ {
127
+ Option :: < Bson > :: deserialize ( deserializer) ?
128
+ . map ( |bson| {
129
+ get_u64 ( & bson) . ok_or_else ( || {
130
+ serde:: de:: Error :: custom ( format ! ( "could not deserialize u64 from {bson:?}" ) )
131
+ } )
132
+ } )
133
+ . transpose ( )
134
+ }
135
+
121
136
pub ( crate ) fn serialize_error_as_string < S : Serializer > (
122
137
val : & Error ,
123
138
serializer : S ,
Original file line number Diff line number Diff line change @@ -468,3 +468,18 @@ async fn test_run_command() {
468
468
assert_eq ! ( v[ 0 ] . as_ref( ) . unwrap( ) . get_str( "foo" ) . unwrap( ) , "bar" ) ;
469
469
}
470
470
}
471
+
472
+ #[ test]
473
+ fn create_collection_options_deserialize ( ) {
474
+ let source = doc ! {
475
+ "capped" : true ,
476
+ "size" : 5253511168.0 ,
477
+ "autoIndexId" : false ,
478
+ } ;
479
+ let _: CreateCollectionOptions = crate :: bson_compat:: deserialize_from_document ( source) . unwrap ( ) ;
480
+ let source = doc ! {
481
+ "capped" : true ,
482
+ "autoIndexId" : false ,
483
+ } ;
484
+ let _: CreateCollectionOptions = crate :: bson_compat:: deserialize_from_document ( source) . unwrap ( ) ;
485
+ }
You can’t perform that action at this time.
0 commit comments