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 {
4444
4545 /// The maximum size (in bytes) for a capped collection. This option is ignored if `capped` is
4646 /// 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+ ) ]
4852 pub size : Option < u64 > ,
4953
5054 /// 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
118118 . ok_or_else ( || serde:: de:: Error :: custom ( format ! ( "could not deserialize u64 from {bson:?}" ) ) )
119119}
120120
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+
121136pub ( crate ) fn serialize_error_as_string < S : Serializer > (
122137 val : & Error ,
123138 serializer : S ,
Original file line number Diff line number Diff line change @@ -468,3 +468,18 @@ async fn test_run_command() {
468468 assert_eq ! ( v[ 0 ] . as_ref( ) . unwrap( ) . get_str( "foo" ) . unwrap( ) , "bar" ) ;
469469 }
470470}
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