@@ -16,13 +16,13 @@ use std::net::Ipv6Addr;
16
16
use std:: sync:: Arc ;
17
17
18
18
use columnar:: MonotonicallyMappableToU128 ;
19
- use common:: { u64_to_f64, BinarySerializable , ConfigurableBinarySerializable , DateTime , VInt } ;
19
+ use common:: { u64_to_f64, BinarySerializable , DateTime , VInt } ;
20
20
21
21
use super :: se:: BinaryObjectSerializer ;
22
22
use super :: { OwnedValue , Value } ;
23
23
use crate :: schema:: document:: type_codes;
24
24
use crate :: schema:: { Facet , Field } ;
25
- use crate :: store:: doc_store_version_to_serialize_config ;
25
+ use crate :: store:: DocStoreVersion ;
26
26
use crate :: tokenizer:: PreTokenizedString ;
27
27
28
28
#[ derive( Debug , thiserror:: Error , Clone ) ]
@@ -295,7 +295,7 @@ pub trait ObjectAccess<'de> {
295
295
pub struct BinaryDocumentDeserializer < ' de , R > {
296
296
length : usize ,
297
297
position : usize ,
298
- doc_store_version : u32 ,
298
+ doc_store_version : DocStoreVersion ,
299
299
reader : & ' de mut R ,
300
300
}
301
301
@@ -305,7 +305,7 @@ where R: Read
305
305
/// Attempts to create a new document deserializer from a given reader.
306
306
pub ( crate ) fn from_reader (
307
307
reader : & ' de mut R ,
308
- doc_store_version : u32 ,
308
+ doc_store_version : DocStoreVersion ,
309
309
) -> Result < Self , DeserializeError > {
310
310
let length = VInt :: deserialize ( reader) ?;
311
311
@@ -353,14 +353,17 @@ where R: Read
353
353
pub struct BinaryValueDeserializer < ' de , R > {
354
354
value_type : ValueType ,
355
355
reader : & ' de mut R ,
356
- doc_store_version : u32 ,
356
+ doc_store_version : DocStoreVersion ,
357
357
}
358
358
359
359
impl < ' de , R > BinaryValueDeserializer < ' de , R >
360
360
where R : Read
361
361
{
362
362
/// Attempts to create a new value deserializer from a given reader.
363
- fn from_reader ( reader : & ' de mut R , doc_store_version : u32 ) -> Result < Self , DeserializeError > {
363
+ fn from_reader (
364
+ reader : & ' de mut R ,
365
+ doc_store_version : DocStoreVersion ,
366
+ ) -> Result < Self , DeserializeError > {
364
367
let type_code = <u8 as BinarySerializable >:: deserialize ( reader) ?;
365
368
366
369
let value_type = match type_code {
@@ -430,94 +433,66 @@ where R: Read
430
433
431
434
fn deserialize_string ( self ) -> Result < String , DeserializeError > {
432
435
self . validate_type ( ValueType :: String ) ?;
433
- <String as ConfigurableBinarySerializable >:: deserialize (
434
- self . reader ,
435
- & doc_store_version_to_serialize_config ( self . doc_store_version ) ?,
436
- )
437
- . map_err ( DeserializeError :: from)
436
+ <String as BinarySerializable >:: deserialize ( self . reader ) . map_err ( DeserializeError :: from)
438
437
}
439
438
440
439
fn deserialize_u64 ( self ) -> Result < u64 , DeserializeError > {
441
440
self . validate_type ( ValueType :: U64 ) ?;
442
- <u64 as ConfigurableBinarySerializable >:: deserialize (
443
- self . reader ,
444
- & doc_store_version_to_serialize_config ( self . doc_store_version ) ?,
445
- )
446
- . map_err ( DeserializeError :: from)
441
+ <u64 as BinarySerializable >:: deserialize ( self . reader ) . map_err ( DeserializeError :: from)
447
442
}
448
443
449
444
fn deserialize_i64 ( self ) -> Result < i64 , DeserializeError > {
450
445
self . validate_type ( ValueType :: I64 ) ?;
451
- <i64 as ConfigurableBinarySerializable >:: deserialize (
452
- self . reader ,
453
- & doc_store_version_to_serialize_config ( self . doc_store_version ) ?,
454
- )
455
- . map_err ( DeserializeError :: from)
446
+ <i64 as BinarySerializable >:: deserialize ( self . reader ) . map_err ( DeserializeError :: from)
456
447
}
457
448
458
449
fn deserialize_f64 ( self ) -> Result < f64 , DeserializeError > {
459
450
self . validate_type ( ValueType :: F64 ) ?;
460
- <u64 as ConfigurableBinarySerializable >:: deserialize (
461
- self . reader ,
462
- & doc_store_version_to_serialize_config ( self . doc_store_version ) ?,
463
- )
464
- . map ( u64_to_f64)
465
- . map_err ( DeserializeError :: from)
451
+ <u64 as BinarySerializable >:: deserialize ( self . reader )
452
+ . map ( u64_to_f64)
453
+ . map_err ( DeserializeError :: from)
466
454
}
467
455
468
456
fn deserialize_datetime ( self ) -> Result < DateTime , DeserializeError > {
469
457
self . validate_type ( ValueType :: DateTime ) ?;
470
- <DateTime as ConfigurableBinarySerializable >:: deserialize (
471
- self . reader ,
472
- & doc_store_version_to_serialize_config ( self . doc_store_version ) ?,
473
- )
474
- . map_err ( DeserializeError :: from)
458
+ match self . doc_store_version {
459
+ DocStoreVersion :: V1 => {
460
+ let timestamp_micros = <i64 as BinarySerializable >:: deserialize ( self . reader ) ?;
461
+ Ok ( DateTime :: from_timestamp_micros ( timestamp_micros) )
462
+ }
463
+ DocStoreVersion :: V2 => {
464
+ let timestamp_nanos = <i64 as BinarySerializable >:: deserialize ( self . reader ) ?;
465
+ Ok ( DateTime :: from_timestamp_nanos ( timestamp_nanos) )
466
+ }
467
+ }
475
468
}
476
469
477
470
fn deserialize_facet ( self ) -> Result < Facet , DeserializeError > {
478
471
self . validate_type ( ValueType :: Facet ) ?;
479
- <Facet as ConfigurableBinarySerializable >:: deserialize (
480
- self . reader ,
481
- & doc_store_version_to_serialize_config ( self . doc_store_version ) ?,
482
- )
483
- . map_err ( DeserializeError :: from)
472
+ <Facet as BinarySerializable >:: deserialize ( self . reader ) . map_err ( DeserializeError :: from)
484
473
}
485
474
486
475
fn deserialize_bytes ( self ) -> Result < Vec < u8 > , DeserializeError > {
487
476
self . validate_type ( ValueType :: Bytes ) ?;
488
- <Vec < u8 > as ConfigurableBinarySerializable >:: deserialize (
489
- self . reader ,
490
- & doc_store_version_to_serialize_config ( self . doc_store_version ) ?,
491
- )
492
- . map_err ( DeserializeError :: from)
477
+ <Vec < u8 > as BinarySerializable >:: deserialize ( self . reader ) . map_err ( DeserializeError :: from)
493
478
}
494
479
495
480
fn deserialize_ip_address ( self ) -> Result < Ipv6Addr , DeserializeError > {
496
481
self . validate_type ( ValueType :: IpAddr ) ?;
497
- <u128 as ConfigurableBinarySerializable >:: deserialize (
498
- self . reader ,
499
- & doc_store_version_to_serialize_config ( self . doc_store_version ) ?,
500
- )
501
- . map ( Ipv6Addr :: from_u128)
502
- . map_err ( DeserializeError :: from)
482
+ <u128 as BinarySerializable >:: deserialize ( self . reader )
483
+ . map ( Ipv6Addr :: from_u128)
484
+ . map_err ( DeserializeError :: from)
503
485
}
504
486
505
487
fn deserialize_bool ( self ) -> Result < bool , DeserializeError > {
506
488
self . validate_type ( ValueType :: Bool ) ?;
507
- <bool as ConfigurableBinarySerializable >:: deserialize (
508
- self . reader ,
509
- & doc_store_version_to_serialize_config ( self . doc_store_version ) ?,
510
- )
511
- . map_err ( DeserializeError :: from)
489
+ <bool as BinarySerializable >:: deserialize ( self . reader ) . map_err ( DeserializeError :: from)
512
490
}
513
491
514
492
fn deserialize_pre_tokenized_string ( self ) -> Result < PreTokenizedString , DeserializeError > {
515
493
self . validate_type ( ValueType :: PreTokStr ) ?;
516
- <PreTokenizedString as ConfigurableBinarySerializable >:: deserialize (
517
- self . reader ,
518
- & doc_store_version_to_serialize_config ( self . doc_store_version ) ?,
519
- )
520
- . map_err ( DeserializeError :: from)
494
+ <PreTokenizedString as BinarySerializable >:: deserialize ( self . reader )
495
+ . map_err ( DeserializeError :: from)
521
496
}
522
497
523
498
fn deserialize_any < V > ( self , visitor : V ) -> Result < V :: Value , DeserializeError >
@@ -605,14 +580,17 @@ pub struct BinaryArrayDeserializer<'de, R> {
605
580
length : usize ,
606
581
position : usize ,
607
582
reader : & ' de mut R ,
608
- doc_store_version : u32 ,
583
+ doc_store_version : DocStoreVersion ,
609
584
}
610
585
611
586
impl < ' de , R > BinaryArrayDeserializer < ' de , R >
612
587
where R : Read
613
588
{
614
589
/// Attempts to create a new array deserializer from a given reader.
615
- fn from_reader ( reader : & ' de mut R , doc_store_version : u32 ) -> Result < Self , DeserializeError > {
590
+ fn from_reader (
591
+ reader : & ' de mut R ,
592
+ doc_store_version : DocStoreVersion ,
593
+ ) -> Result < Self , DeserializeError > {
616
594
let length = <VInt as BinarySerializable >:: deserialize ( reader) ?;
617
595
618
596
Ok ( Self {
@@ -667,7 +645,10 @@ impl<'de, R> BinaryObjectDeserializer<'de, R>
667
645
where R : Read
668
646
{
669
647
/// Attempts to create a new object deserializer from a given reader.
670
- fn from_reader ( reader : & ' de mut R , doc_store_version : u32 ) -> Result < Self , DeserializeError > {
648
+ fn from_reader (
649
+ reader : & ' de mut R ,
650
+ doc_store_version : DocStoreVersion ,
651
+ ) -> Result < Self , DeserializeError > {
671
652
let inner = BinaryArrayDeserializer :: from_reader ( reader, doc_store_version) ?;
672
653
Ok ( Self { inner } )
673
654
}
@@ -887,6 +868,15 @@ mod tests {
887
868
writer
888
869
}
889
870
871
+ fn serialize_owned_value < ' a > ( value : ReferenceValue < ' a , & ' a OwnedValue > ) -> Vec < u8 > {
872
+ let mut writer = Vec :: new ( ) ;
873
+
874
+ let mut serializer = BinaryValueSerializer :: new ( & mut writer) ;
875
+ serializer. serialize_value ( value) . expect ( "Serialize value" ) ;
876
+
877
+ writer
878
+ }
879
+
890
880
fn deserialize_value ( buffer : Vec < u8 > ) -> crate :: schema:: OwnedValue {
891
881
let mut cursor = Cursor :: new ( buffer) ;
892
882
let deserializer =
@@ -1069,6 +1059,17 @@ mod tests {
1069
1059
assert_eq ! ( value, expected_val) ;
1070
1060
}
1071
1061
1062
+ #[ test]
1063
+ fn test_nested_date_precision ( ) {
1064
+ let object = OwnedValue :: Object ( vec ! [ (
1065
+ "my-date" . into( ) ,
1066
+ OwnedValue :: Date ( DateTime :: from_timestamp_nanos( 323456 ) ) ,
1067
+ ) ] ) ;
1068
+ let result = serialize_owned_value ( ( & object) . as_value ( ) ) ;
1069
+ let value = deserialize_value ( result) ;
1070
+ assert_eq ! ( value, object) ;
1071
+ }
1072
+
1072
1073
#[ test]
1073
1074
fn test_nested_serialize ( ) {
1074
1075
let mut object = serde_json:: Map :: new ( ) ;
0 commit comments