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 {
31
31
where
32
32
D : de:: Deserializer < ' de > ,
33
33
{
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 {
38
46
Bson :: ObjectId ( oid) => Ok ( oid) ,
39
- _ => {
47
+ bson => {
40
48
let err = format ! (
41
49
"expected objectId extended document or hex string, found {}" ,
42
50
bson
43
51
) ;
44
52
Err ( de:: Error :: invalid_type ( Unexpected :: Map , & & err[ ..] ) )
45
53
}
46
- } )
54
+ } ,
55
+ }
47
56
}
48
57
}
49
58
You can’t perform that action at this time.
0 commit comments