@@ -272,7 +272,7 @@ pub(super) mod _serde {
272272
273273 #[ derive( Debug , Serialize , Deserialize , PartialEq , Eq ) ]
274274 #[ serde( rename_all = "kebab-case" ) ]
275- /// Defines the structure of a v2 snapshot for serialization/deserialization
275+ /// Defines the structure of a v3 snapshot for serialization/deserialization
276276 pub ( crate ) struct SnapshotV3 {
277277 pub snapshot_id : i64 ,
278278 #[ serde( skip_serializing_if = "Option::is_none" ) ]
@@ -283,8 +283,10 @@ pub(super) mod _serde {
283283 pub summary : Summary ,
284284 #[ serde( skip_serializing_if = "Option::is_none" ) ]
285285 pub schema_id : Option < SchemaId > ,
286- pub first_row_id : u64 ,
287- pub added_rows : u64 ,
286+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
287+ pub first_row_id : Option < u64 > ,
288+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
289+ pub added_rows : Option < u64 > ,
288290 #[ serde( skip_serializing_if = "Option::is_none" ) ]
289291 pub key_id : Option < String > ,
290292 }
@@ -333,10 +335,13 @@ pub(super) mod _serde {
333335 summary : s. summary ,
334336 schema_id : s. schema_id ,
335337 encryption_key_id : s. key_id ,
336- row_range : Some ( SnapshotRowRange {
337- first_row_id : s. first_row_id ,
338- added_rows : s. added_rows ,
339- } ) ,
338+ row_range : match ( s. first_row_id , s. added_rows ) {
339+ ( Some ( first_row_id) , Some ( added_rows) ) => Some ( SnapshotRowRange {
340+ first_row_id,
341+ added_rows,
342+ } ) ,
343+ _ => None ,
344+ } ,
340345 }
341346 }
342347 }
@@ -345,12 +350,10 @@ pub(super) mod _serde {
345350 type Error = Error ;
346351
347352 fn try_from ( s : Snapshot ) -> Result < Self , Self :: Error > {
348- let row_range = s. row_range . ok_or_else ( || {
349- Error :: new (
350- crate :: ErrorKind :: DataInvalid ,
351- "v3 Snapshots must have first-row-id and rows-added fields set." . to_string ( ) ,
352- )
353- } ) ?;
353+ let ( first_row_id, added_rows) = match s. row_range {
354+ Some ( row_range) => ( Some ( row_range. first_row_id ) , Some ( row_range. added_rows ) ) ,
355+ None => ( None , None ) ,
356+ } ;
354357
355358 Ok ( SnapshotV3 {
356359 snapshot_id : s. snapshot_id ,
@@ -360,8 +363,8 @@ pub(super) mod _serde {
360363 manifest_list : s. manifest_list ,
361364 summary : s. summary ,
362365 schema_id : s. schema_id ,
363- first_row_id : row_range . first_row_id ,
364- added_rows : row_range . added_rows ,
366+ first_row_id,
367+ added_rows,
365368 key_id : s. encryption_key_id ,
366369 } )
367370 }
0 commit comments