File tree Expand file tree Collapse file tree 1 file changed +15
-6
lines changed Expand file tree Collapse file tree 1 file changed +15
-6
lines changed Original file line number Diff line number Diff line change @@ -31,19 +31,28 @@ impl<'de> Deserialize<'de> for ObjectId {
3131 where
3232 D : de:: Deserializer < ' de > ,
3333 {
34- deserializer
35- . deserialize_any ( BsonVisitor )
36- . and_then ( |bson| match bson {
37- Bson :: String ( oid) => ObjectId :: parse_str ( & oid) . map_err ( de:: Error :: custom) ,
34+ #[ derive( serde:: Deserialize ) ]
35+ #[ serde( untagged) ]
36+ enum OidHelper {
37+ HexString ( String ) ,
38+ Bson ( Bson ) ,
39+ }
40+
41+ match OidHelper :: deserialize ( deserializer)
42+ . map_err ( |_| de:: Error :: custom ( "expected ObjectId extended document or hex string" ) ) ?
43+ {
44+ OidHelper :: HexString ( s) => ObjectId :: parse_str ( & s) . map_err ( de:: Error :: custom) ,
45+ OidHelper :: Bson ( bson) => match bson {
3846 Bson :: ObjectId ( oid) => Ok ( oid) ,
39- _ => {
47+ bson => {
4048 let err = format ! (
4149 "expected objectId extended document or hex string, found {}" ,
4250 bson
4351 ) ;
4452 Err ( de:: Error :: invalid_type ( Unexpected :: Map , & & err[ ..] ) )
4553 }
46- } )
54+ } ,
55+ }
4756 }
4857}
4958
You can’t perform that action at this time.
0 commit comments