@@ -5,7 +5,7 @@ use serde::de::{self, Deserialize, Deserializer, Visitor, MapAccess, SeqAccess,
55 DeserializeSeed , EnumAccess } ;
66use serde:: de:: { Error , Unexpected } ;
77
8- use bson:: { Bson , UtcDateTime } ;
8+ use bson:: { Bson , TimeStamp , UtcDateTime } ;
99use oid:: ObjectId ;
1010use ordered:: { OrderedDocument , OrderedDocumentIntoIterator , OrderedDocumentVisitor } ;
1111use super :: error:: { DecoderError , DecoderResult } ;
@@ -601,6 +601,26 @@ impl<'de> Deserializer<'de> for MapDecoder {
601601 }
602602}
603603
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+
604624impl < ' de > Deserialize < ' de > for UtcDateTime {
605625 fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
606626 where D : Deserializer < ' de >
@@ -613,3 +633,4 @@ impl<'de> Deserialize<'de> for UtcDateTime {
613633 }
614634 }
615635}
636+
0 commit comments