@@ -5,7 +5,7 @@ use serde::de::{self, Deserialize, Deserializer, Visitor, MapAccess, SeqAccess,
5
5
DeserializeSeed , EnumAccess } ;
6
6
use serde:: de:: { Error , Unexpected } ;
7
7
8
- use bson:: { Bson , UtcDateTime } ;
8
+ use bson:: { Bson , TimeStamp , UtcDateTime } ;
9
9
use oid:: ObjectId ;
10
10
use ordered:: { OrderedDocument , OrderedDocumentIntoIterator , OrderedDocumentVisitor } ;
11
11
use super :: error:: { DecoderError , DecoderResult } ;
@@ -601,6 +601,26 @@ impl<'de> Deserializer<'de> for MapDecoder {
601
601
}
602
602
}
603
603
604
+ impl < ' de > Deserialize < ' de > for TimeStamp {
605
+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
606
+ where D : Deserializer < ' de >
607
+ {
608
+ use serde:: de:: Error ;
609
+
610
+ match Bson :: deserialize ( deserializer) ? {
611
+ Bson :: TimeStamp ( ts) => {
612
+ let ts = ts. to_be ( ) ;
613
+
614
+ Ok ( TimeStamp {
615
+ t : ( ( ts as u64 ) >> 32 ) as u32 ,
616
+ i : ( ts & 0xFFFF_FFFF ) as u32 ,
617
+ } )
618
+ }
619
+ _ => Err ( D :: Error :: custom ( "expecting UtcDateTime" ) ) ,
620
+ }
621
+ }
622
+ }
623
+
604
624
impl < ' de > Deserialize < ' de > for UtcDateTime {
605
625
fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
606
626
where D : Deserializer < ' de >
@@ -613,3 +633,4 @@ impl<'de> Deserialize<'de> for UtcDateTime {
613
633
}
614
634
}
615
635
}
636
+
0 commit comments