@@ -44,8 +44,8 @@ pub(crate) static INITIAL_SEQUENCE_NUMBER: i64 = 0;
44
44
/// Reference to [`TableMetadata`].
45
45
pub type TableMetadataRef = Arc < TableMetadata > ;
46
46
47
- #[ derive( Debug , PartialEq , Serialize , Deserialize , Eq , Clone ) ]
48
- #[ serde( try_from = "TableMetadataEnum" , into = "TableMetadataEnum" ) ]
47
+ #[ derive( Debug , PartialEq , Deserialize , Eq , Clone ) ]
48
+ #[ serde( try_from = "TableMetadataEnum" ) ]
49
49
/// Fields for the version 2 of the table metadata.
50
50
///
51
51
/// We assume that this data structure is always valid, so we will panic when invalid error happens.
@@ -379,6 +379,19 @@ pub(super) mod _serde {
379
379
#[ derive( Debug , PartialEq , Eq ) ]
380
380
pub ( super ) struct VersionNumber < const V : u8 > ;
381
381
382
+ impl Serialize for TableMetadata {
383
+ fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
384
+ where
385
+ S : serde:: Serializer ,
386
+ {
387
+ // we must do a clone here
388
+ let table_metadata_enum: TableMetadataEnum =
389
+ self . clone ( ) . try_into ( ) . map_err ( serde:: ser:: Error :: custom) ?;
390
+
391
+ table_metadata_enum. serialize ( serializer)
392
+ }
393
+ }
394
+
382
395
impl < const V : u8 > Serialize for VersionNumber < V > {
383
396
fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
384
397
where
@@ -412,12 +425,13 @@ pub(super) mod _serde {
412
425
}
413
426
}
414
427
415
- impl From < TableMetadata > for TableMetadataEnum {
416
- fn from ( value : TableMetadata ) -> Self {
417
- match value. format_version {
428
+ impl TryFrom < TableMetadata > for TableMetadataEnum {
429
+ type Error = Error ;
430
+ fn try_from ( value : TableMetadata ) -> Result < Self , Error > {
431
+ Ok ( match value. format_version {
418
432
FormatVersion :: V2 => TableMetadataEnum :: V2 ( value. into ( ) ) ,
419
- FormatVersion :: V1 => TableMetadataEnum :: V1 ( value. into ( ) ) ,
420
- }
433
+ FormatVersion :: V1 => TableMetadataEnum :: V1 ( value. try_into ( ) ? ) ,
434
+ } )
421
435
}
422
436
}
423
437
@@ -676,9 +690,10 @@ pub(super) mod _serde {
676
690
}
677
691
}
678
692
679
- impl From < TableMetadata > for TableMetadataV1 {
680
- fn from ( v : TableMetadata ) -> Self {
681
- TableMetadataV1 {
693
+ impl TryFrom < TableMetadata > for TableMetadataV1 {
694
+ type Error = Error ;
695
+ fn try_from ( v : TableMetadata ) -> Result < Self , Error > {
696
+ Ok ( TableMetadataV1 {
682
697
format_version : VersionNumber :: < 1 > ,
683
698
table_uuid : Some ( v. table_uuid ) ,
684
699
location : v. location ,
@@ -687,7 +702,10 @@ pub(super) mod _serde {
687
702
schema : v
688
703
. schemas
689
704
. get ( & v. current_schema_id )
690
- . expect ( "current_schema_id not found in schemas" )
705
+ . ok_or ( Error :: new (
706
+ ErrorKind :: Unexpected ,
707
+ "current_schema_id not found in schemas" ,
708
+ ) ) ?
691
709
. as_ref ( )
692
710
. clone ( )
693
711
. into ( ) ,
@@ -748,7 +766,7 @@ pub(super) mod _serde {
748
766
. collect ( ) ,
749
767
) ,
750
768
default_sort_order_id : Some ( v. default_sort_order_id ) ,
751
- }
769
+ } )
752
770
}
753
771
}
754
772
}
0 commit comments