You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by gi...@apache.org on 2025/06/11 09:58:22 UTC
(iceberg-rust) branch gh-pages updated: deploy: b78542f41020897ecaf6d2f23a8069b0fcbfb540
This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/iceberg-rust.git
The following commit(s) were added to refs/heads/gh-pages by this push:
new c63a338f deploy: b78542f41020897ecaf6d2f23a8069b0fcbfb540
c63a338f is described below
commit c63a338fff0b8c987fc56faeac591925904329df
Author: liurenjie1024 <li...@users.noreply.github.com>
AuthorDate: Wed Jun 11 09:58:17 2025 +0000
deploy: b78542f41020897ecaf6d2f23a8069b0fcbfb540
---
api/iceberg/spec/struct.ManifestFile.html | 4 +-
api/search-index.js | 4 +-
.../expr/visitors/manifest_evaluator.rs.html | 2 +-
api/src/iceberg/spec/manifest/writer.rs.html | 2 +-
api/src/iceberg/spec/manifest_list.rs.html | 979 ++++++++++-----------
api/src/iceberg/spec/snapshot_summary.rs.html | 4 +-
6 files changed, 497 insertions(+), 498 deletions(-)
diff --git a/api/iceberg/spec/struct.ManifestFile.html b/api/iceberg/spec/struct.ManifestFile.html
index 3282c87d..4ebf4017 100644
--- a/api/iceberg/spec/struct.ManifestFile.html
+++ b/api/iceberg/spec/struct.ManifestFile.html
@@ -13,7 +13,7 @@
pub existing_rows_count: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>>,
pub deleted_rows_count: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>>,
pub partitions: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="struct" href="struct.FieldSummary.html" title="struct iceberg::spec::FieldSummary">FieldSummary</a>>>,
- pub key_metadata: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>>,
+ pub key_metadata: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>>>,
</details>}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Entry in a manifest list.</p>
</div></details><h2 id="fields" class="fields section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.manifest_path" class="structfield section-header"><a href="#structfield.manifest_path" class="anchor field">§</a><code>manifest_path: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a></code></span><div class="docblock"><p>field: 500</p>
<p>Location of the manifest file</p>
@@ -56,7 +56,7 @@ element_field: 508</p>
<p>A list of field summaries for each partition field in the spec. Each
field in the list corresponds to a field in the manifest file’s
partition spec.</p>
-</div><span id="structfield.key_metadata" class="structfield section-header"><a href="#structfield.key_metadata" class="anchor field">§</a><code>key_metadata: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>></code></span><div class="docblock"><p>field: 519</p>
+</div><span id="structfield.key_metadata" class="structfield section-header"><a href="#structfield.key_metadata" class="anchor field">§</a><code>key_metadata: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primiti [...]
<p>Implementation-specific key metadata for encryption</p>
</div><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-ManifestFile" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest_list.rs.html#585-600">Source</a><a href="#impl-ManifestFile" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ManifestFile.html" title="struct [...]
</div></details><details class="toggle method-toggle" open><summary><section id="method.has_deleted_files" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest_list.rs.html#592-594">Source</a><h4 class="code-header">pub fn <a href="#method.has_deleted_files" class="fn">has_deleted_files</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Checks whether [...]
diff --git a/api/search-index.js b/api/search-index.js
index 559658aa..084b7e9b 100644
--- a/api/search-index.js
+++ b/api/search-index.js
@@ -1,4 +1,4 @@
-var searchIndex = new Map(JSON.parse('[["iceberg",{"t":"PPPPPPPPRKKPPPPPFGPPPFPFPPPPPPPPPPPPPIPPPPPPPPPPPPFFFPGGPPPPFGNCNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNCNNNNNNNNNNNNCNMMMMOONNNOOONOMNNNNNNONOOCMOCOONNNNNONCOCMNNNNNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFFFFKSRRSNNNNNNNNHHHNNNNNNNNNNNN [...]
+var searchIndex = new Map(JSON.parse('[["iceberg",{"t":"PPPPPPPPRKKPPPPPFGPPPFPFPPPPPPPPPPPPPIPPPPPPPPPPPPFFFPGGPPPPFGNCNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNCNNNNNNNNNNNNCNMMMMOONNNOOONOMNNNNNNONOOCMOCOONNNNNONCOCMNNNNNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFFFFKSRRSNNNNNNNNHHHNNNNNNNNNNNN [...]
if (typeof exports !== 'undefined') exports.searchIndex = searchIndex;
else if (window.initSearch) window.initSearch(searchIndex);
-//{"start":39,"fragment_lengths":[129626,1200,2701,2748,2028,2479,2434,2682,1562,3766,932,148,1116]}
\ No newline at end of file
+//{"start":39,"fragment_lengths":[129627,1200,2701,2748,2028,2479,2434,2682,1562,3766,932,148,1116]}
\ No newline at end of file
diff --git a/api/src/iceberg/expr/visitors/manifest_evaluator.rs.html b/api/src/iceberg/expr/visitors/manifest_evaluator.rs.html
index 6e5f86a6..7b752060 100644
--- a/api/src/iceberg/expr/visitors/manifest_evaluator.rs.html
+++ b/api/src/iceberg/expr/visitors/manifest_evaluator.rs.html
@@ -661,7 +661,7 @@
<a href=#661 id=661 data-nosnippet>661</a> existing_rows_count: <span class="prelude-val">None</span>,
<a href=#662 id=662 data-nosnippet>662</a> deleted_rows_count: <span class="prelude-val">None</span>,
<a href=#663 id=663 data-nosnippet>663</a> partitions: <span class="prelude-val">Some</span>(partitions),
-<a href=#664 id=664 data-nosnippet>664</a> key_metadata: <span class="macro">vec!</span>[],
+<a href=#664 id=664 data-nosnippet>664</a> key_metadata: <span class="prelude-val">None</span>,
<a href=#665 id=665 data-nosnippet>665</a> }
<a href=#666 id=666 data-nosnippet>666</a> }
<a href=#667 id=667 data-nosnippet>667</a>
diff --git a/api/src/iceberg/spec/manifest/writer.rs.html b/api/src/iceberg/spec/manifest/writer.rs.html
index 34344e10..0f6d57ab 100644
--- a/api/src/iceberg/spec/manifest/writer.rs.html
+++ b/api/src/iceberg/spec/manifest/writer.rs.html
@@ -416,7 +416,7 @@
<a href=#416 id=416 data-nosnippet>416</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="self">self</span>.existing_rows),
<a href=#417 id=417 data-nosnippet>417</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="self">self</span>.deleted_rows),
<a href=#418 id=418 data-nosnippet>418</a> partitions: <span class="prelude-val">Some</span>(partition_summary),
-<a href=#419 id=419 data-nosnippet>419</a> key_metadata: <span class="self">self</span>.key_metadata,
+<a href=#419 id=419 data-nosnippet>419</a> key_metadata: <span class="prelude-val">Some</span>(<span class="self">self</span>.key_metadata),
<a href=#420 id=420 data-nosnippet>420</a> })
<a href=#421 id=421 data-nosnippet>421</a> }
<a href=#422 id=422 data-nosnippet>422</a>}
diff --git a/api/src/iceberg/spec/manifest_list.rs.html b/api/src/iceberg/spec/manifest_list.rs.html
index b3165be7..87155941 100644
--- a/api/src/iceberg/spec/manifest_list.rs.html
+++ b/api/src/iceberg/spec/manifest_list.rs.html
@@ -579,7 +579,7 @@
<a href=#579 id=579 data-nosnippet>579</a> <span class="doccomment">/// field: 519
<a href=#580 id=580 data-nosnippet>580</a> ///
<a href=#581 id=581 data-nosnippet>581</a> /// Implementation-specific key metadata for encryption
-<a href=#582 id=582 data-nosnippet>582</a> </span><span class="kw">pub </span>key_metadata: Vec<u8>,
+<a href=#582 id=582 data-nosnippet>582</a> </span><span class="kw">pub </span>key_metadata: <span class="prelude-ty">Option</span><Vec<u8>>,
<a href=#583 id=583 data-nosnippet>583</a>}
<a href=#584 id=584 data-nosnippet>584</a>
<a href=#585 id=585 data-nosnippet>585</a><span class="kw">impl </span>ManifestFile {
@@ -830,7 +830,7 @@
<a href=#830 id=830 data-nosnippet>830</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="self">self</span>.existing_rows_count.try_into()<span class="question-mark">?</span>),
<a href=#831 id=831 data-nosnippet>831</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="self">self</span>.deleted_rows_count.try_into()<span class="question-mark">?</span>),
<a href=#832 id=832 data-nosnippet>832</a> partitions: <span class="self">self</span>.partitions,
-<a href=#833 id=833 data-nosnippet>833</a> key_metadata: <span class="self">self</span>.key_metadata.map(|b| b.into_vec()).unwrap_or_default(),
+<a href=#833 id=833 data-nosnippet>833</a> key_metadata: <span class="self">self</span>.key_metadata.map(|b| b.into_vec()),
<a href=#834 id=834 data-nosnippet>834</a> })
<a href=#835 id=835 data-nosnippet>835</a> }
<a href=#836 id=836 data-nosnippet>836</a> }
@@ -862,7 +862,7 @@
<a href=#862 id=862 data-nosnippet>862</a> .transpose()<span class="question-mark">?</span>,
<a href=#863 id=863 data-nosnippet>863</a> deleted_rows_count: <span class="self">self</span>.deleted_rows_count.map(TryInto::try_into).transpose()<span class="question-mark">?</span>,
<a href=#864 id=864 data-nosnippet>864</a> partitions: <span class="self">self</span>.partitions,
-<a href=#865 id=865 data-nosnippet>865</a> key_metadata: <span class="self">self</span>.key_metadata.map(|b| b.into_vec()).unwrap_or_default(),
+<a href=#865 id=865 data-nosnippet>865</a> key_metadata: <span class="self">self</span>.key_metadata.map(|b| b.into_vec()),
<a href=#866 id=866 data-nosnippet>866</a> <span class="comment">// as ref: https://iceberg.apache.org/spec/#partitioning
<a href=#867 id=867 data-nosnippet>867</a> // use 0 when reading v1 manifest lists
<a href=#868 id=868 data-nosnippet>868</a> </span>content: <span class="kw">super</span>::ManifestContentType::Data,
@@ -872,490 +872,489 @@
<a href=#872 id=872 data-nosnippet>872</a> }
<a href=#873 id=873 data-nosnippet>873</a> }
<a href=#874 id=874 data-nosnippet>874</a>
-<a href=#875 id=875 data-nosnippet>875</a> <span class="kw">fn </span>convert_to_serde_key_metadata(key_metadata: Vec<u8>) -> <span class="prelude-ty">Option</span><ByteBuf> {
-<a href=#876 id=876 data-nosnippet>876</a> <span class="kw">if </span>key_metadata.is_empty() {
-<a href=#877 id=877 data-nosnippet>877</a> <span class="prelude-val">None
-<a href=#878 id=878 data-nosnippet>878</a> </span>} <span class="kw">else </span>{
-<a href=#879 id=879 data-nosnippet>879</a> <span class="prelude-val">Some</span>(ByteBuf::from(key_metadata))
-<a href=#880 id=880 data-nosnippet>880</a> }
-<a href=#881 id=881 data-nosnippet>881</a> }
-<a href=#882 id=882 data-nosnippet>882</a>
-<a href=#883 id=883 data-nosnippet>883</a> <span class="kw">impl </span>TryFrom<ManifestFile> <span class="kw">for </span>ManifestFileV2 {
-<a href=#884 id=884 data-nosnippet>884</a> <span class="kw">type </span>Error = Error;
-<a href=#885 id=885 data-nosnippet>885</a>
-<a href=#886 id=886 data-nosnippet>886</a> <span class="kw">fn </span>try_from(value: ManifestFile) -> std::result::Result<<span class="self">Self</span>, <span class="self">Self</span>::Error> {
-<a href=#887 id=887 data-nosnippet>887</a> <span class="kw">let </span>key_metadata = convert_to_serde_key_metadata(value.key_metadata);
-<a href=#888 id=888 data-nosnippet>888</a> <span class="prelude-val">Ok</span>(<span class="self">Self </span>{
-<a href=#889 id=889 data-nosnippet>889</a> manifest_path: value.manifest_path,
-<a href=#890 id=890 data-nosnippet>890</a> manifest_length: value.manifest_length,
-<a href=#891 id=891 data-nosnippet>891</a> partition_spec_id: value.partition_spec_id,
-<a href=#892 id=892 data-nosnippet>892</a> content: value.content <span class="kw">as </span>i32,
-<a href=#893 id=893 data-nosnippet>893</a> sequence_number: value.sequence_number,
-<a href=#894 id=894 data-nosnippet>894</a> min_sequence_number: value.min_sequence_number,
-<a href=#895 id=895 data-nosnippet>895</a> added_snapshot_id: value.added_snapshot_id,
-<a href=#896 id=896 data-nosnippet>896</a> added_files_count: value
-<a href=#897 id=897 data-nosnippet>897</a> .added_files_count
-<a href=#898 id=898 data-nosnippet>898</a> .ok_or_else(|| {
-<a href=#899 id=899 data-nosnippet>899</a> Error::new(
-<a href=#900 id=900 data-nosnippet>900</a> <span class="kw">crate</span>::ErrorKind::DataInvalid,
-<a href=#901 id=901 data-nosnippet>901</a> <span class="string">"added_data_files_count in ManifestFileV2 should be require"</span>,
-<a href=#902 id=902 data-nosnippet>902</a> )
-<a href=#903 id=903 data-nosnippet>903</a> })<span class="question-mark">?
-<a href=#904 id=904 data-nosnippet>904</a> </span>.try_into()<span class="question-mark">?</span>,
-<a href=#905 id=905 data-nosnippet>905</a> existing_files_count: value
-<a href=#906 id=906 data-nosnippet>906</a> .existing_files_count
-<a href=#907 id=907 data-nosnippet>907</a> .ok_or_else(|| {
-<a href=#908 id=908 data-nosnippet>908</a> Error::new(
-<a href=#909 id=909 data-nosnippet>909</a> <span class="kw">crate</span>::ErrorKind::DataInvalid,
-<a href=#910 id=910 data-nosnippet>910</a> <span class="string">"existing_data_files_count in ManifestFileV2 should be require"</span>,
-<a href=#911 id=911 data-nosnippet>911</a> )
-<a href=#912 id=912 data-nosnippet>912</a> })<span class="question-mark">?
-<a href=#913 id=913 data-nosnippet>913</a> </span>.try_into()<span class="question-mark">?</span>,
-<a href=#914 id=914 data-nosnippet>914</a> deleted_files_count: value
-<a href=#915 id=915 data-nosnippet>915</a> .deleted_files_count
-<a href=#916 id=916 data-nosnippet>916</a> .ok_or_else(|| {
-<a href=#917 id=917 data-nosnippet>917</a> Error::new(
-<a href=#918 id=918 data-nosnippet>918</a> <span class="kw">crate</span>::ErrorKind::DataInvalid,
-<a href=#919 id=919 data-nosnippet>919</a> <span class="string">"deleted_data_files_count in ManifestFileV2 should be require"</span>,
-<a href=#920 id=920 data-nosnippet>920</a> )
-<a href=#921 id=921 data-nosnippet>921</a> })<span class="question-mark">?
-<a href=#922 id=922 data-nosnippet>922</a> </span>.try_into()<span class="question-mark">?</span>,
-<a href=#923 id=923 data-nosnippet>923</a> added_rows_count: value
-<a href=#924 id=924 data-nosnippet>924</a> .added_rows_count
-<a href=#925 id=925 data-nosnippet>925</a> .ok_or_else(|| {
-<a href=#926 id=926 data-nosnippet>926</a> Error::new(
-<a href=#927 id=927 data-nosnippet>927</a> <span class="kw">crate</span>::ErrorKind::DataInvalid,
-<a href=#928 id=928 data-nosnippet>928</a> <span class="string">"added_rows_count in ManifestFileV2 should be require"</span>,
-<a href=#929 id=929 data-nosnippet>929</a> )
-<a href=#930 id=930 data-nosnippet>930</a> })<span class="question-mark">?
-<a href=#931 id=931 data-nosnippet>931</a> </span>.try_into()<span class="question-mark">?</span>,
-<a href=#932 id=932 data-nosnippet>932</a> existing_rows_count: value
-<a href=#933 id=933 data-nosnippet>933</a> .existing_rows_count
-<a href=#934 id=934 data-nosnippet>934</a> .ok_or_else(|| {
-<a href=#935 id=935 data-nosnippet>935</a> Error::new(
-<a href=#936 id=936 data-nosnippet>936</a> <span class="kw">crate</span>::ErrorKind::DataInvalid,
-<a href=#937 id=937 data-nosnippet>937</a> <span class="string">"existing_rows_count in ManifestFileV2 should be require"</span>,
-<a href=#938 id=938 data-nosnippet>938</a> )
-<a href=#939 id=939 data-nosnippet>939</a> })<span class="question-mark">?
-<a href=#940 id=940 data-nosnippet>940</a> </span>.try_into()<span class="question-mark">?</span>,
-<a href=#941 id=941 data-nosnippet>941</a> deleted_rows_count: value
-<a href=#942 id=942 data-nosnippet>942</a> .deleted_rows_count
-<a href=#943 id=943 data-nosnippet>943</a> .ok_or_else(|| {
-<a href=#944 id=944 data-nosnippet>944</a> Error::new(
-<a href=#945 id=945 data-nosnippet>945</a> <span class="kw">crate</span>::ErrorKind::DataInvalid,
-<a href=#946 id=946 data-nosnippet>946</a> <span class="string">"deleted_rows_count in ManifestFileV2 should be require"</span>,
-<a href=#947 id=947 data-nosnippet>947</a> )
-<a href=#948 id=948 data-nosnippet>948</a> })<span class="question-mark">?
-<a href=#949 id=949 data-nosnippet>949</a> </span>.try_into()<span class="question-mark">?</span>,
-<a href=#950 id=950 data-nosnippet>950</a> partitions: value.partitions,
-<a href=#951 id=951 data-nosnippet>951</a> key_metadata,
-<a href=#952 id=952 data-nosnippet>952</a> })
-<a href=#953 id=953 data-nosnippet>953</a> }
-<a href=#954 id=954 data-nosnippet>954</a> }
-<a href=#955 id=955 data-nosnippet>955</a>
-<a href=#956 id=956 data-nosnippet>956</a> <span class="kw">impl </span>TryFrom<ManifestFile> <span class="kw">for </span>ManifestFileV1 {
-<a href=#957 id=957 data-nosnippet>957</a> <span class="kw">type </span>Error = Error;
-<a href=#958 id=958 data-nosnippet>958</a>
-<a href=#959 id=959 data-nosnippet>959</a> <span class="kw">fn </span>try_from(value: ManifestFile) -> std::result::Result<<span class="self">Self</span>, <span class="self">Self</span>::Error> {
-<a href=#960 id=960 data-nosnippet>960</a> <span class="kw">let </span>key_metadata = convert_to_serde_key_metadata(value.key_metadata);
-<a href=#961 id=961 data-nosnippet>961</a> <span class="prelude-val">Ok</span>(<span class="self">Self </span>{
-<a href=#962 id=962 data-nosnippet>962</a> manifest_path: value.manifest_path,
-<a href=#963 id=963 data-nosnippet>963</a> manifest_length: value.manifest_length,
-<a href=#964 id=964 data-nosnippet>964</a> partition_spec_id: value.partition_spec_id,
-<a href=#965 id=965 data-nosnippet>965</a> added_snapshot_id: value.added_snapshot_id,
-<a href=#966 id=966 data-nosnippet>966</a> added_data_files_count: value
-<a href=#967 id=967 data-nosnippet>967</a> .added_files_count
-<a href=#968 id=968 data-nosnippet>968</a> .map(TryInto::try_into)
-<a href=#969 id=969 data-nosnippet>969</a> .transpose()<span class="question-mark">?</span>,
-<a href=#970 id=970 data-nosnippet>970</a> existing_data_files_count: value
-<a href=#971 id=971 data-nosnippet>971</a> .existing_files_count
-<a href=#972 id=972 data-nosnippet>972</a> .map(TryInto::try_into)
-<a href=#973 id=973 data-nosnippet>973</a> .transpose()<span class="question-mark">?</span>,
-<a href=#974 id=974 data-nosnippet>974</a> deleted_data_files_count: value
-<a href=#975 id=975 data-nosnippet>975</a> .deleted_files_count
-<a href=#976 id=976 data-nosnippet>976</a> .map(TryInto::try_into)
-<a href=#977 id=977 data-nosnippet>977</a> .transpose()<span class="question-mark">?</span>,
-<a href=#978 id=978 data-nosnippet>978</a> added_rows_count: value.added_rows_count.map(TryInto::try_into).transpose()<span class="question-mark">?</span>,
-<a href=#979 id=979 data-nosnippet>979</a> existing_rows_count: value
-<a href=#980 id=980 data-nosnippet>980</a> .existing_rows_count
-<a href=#981 id=981 data-nosnippet>981</a> .map(TryInto::try_into)
-<a href=#982 id=982 data-nosnippet>982</a> .transpose()<span class="question-mark">?</span>,
-<a href=#983 id=983 data-nosnippet>983</a> deleted_rows_count: value
-<a href=#984 id=984 data-nosnippet>984</a> .deleted_rows_count
-<a href=#985 id=985 data-nosnippet>985</a> .map(TryInto::try_into)
-<a href=#986 id=986 data-nosnippet>986</a> .transpose()<span class="question-mark">?</span>,
-<a href=#987 id=987 data-nosnippet>987</a> partitions: value.partitions,
-<a href=#988 id=988 data-nosnippet>988</a> key_metadata,
-<a href=#989 id=989 data-nosnippet>989</a> })
-<a href=#990 id=990 data-nosnippet>990</a> }
-<a href=#991 id=991 data-nosnippet>991</a> }
-<a href=#992 id=992 data-nosnippet>992</a>}
-<a href=#993 id=993 data-nosnippet>993</a>
-<a href=#994 id=994 data-nosnippet>994</a><span class="attr">#[cfg(test)]
-<a href=#995 id=995 data-nosnippet>995</a></span><span class="kw">mod </span>test {
-<a href=#996 id=996 data-nosnippet>996</a> <span class="kw">use </span>std::fs;
-<a href=#997 id=997 data-nosnippet>997</a>
-<a href=#998 id=998 data-nosnippet>998</a> <span class="kw">use </span>apache_avro::{Reader, Schema};
-<a href=#999 id=999 data-nosnippet>999</a> <span class="kw">use </span>tempfile::TempDir;
-<a href=#1000 id=1000 data-nosnippet>1000</a>
-<a href=#1001 id=1001 data-nosnippet>1001</a> <span class="kw">use </span><span class="kw">super</span>::_serde::ManifestListV2;
-<a href=#1002 id=1002 data-nosnippet>1002</a> <span class="kw">use </span><span class="kw">crate</span>::io::FileIOBuilder;
-<a href=#1003 id=1003 data-nosnippet>1003</a> <span class="kw">use </span><span class="kw">crate</span>::spec::manifest_list::_serde::ManifestListV1;
-<a href=#1004 id=1004 data-nosnippet>1004</a> <span class="kw">use </span><span class="kw">crate</span>::spec::{
-<a href=#1005 id=1005 data-nosnippet>1005</a> Datum, FieldSummary, ManifestContentType, ManifestFile, ManifestList, ManifestListWriter,
-<a href=#1006 id=1006 data-nosnippet>1006</a> UNASSIGNED_SEQUENCE_NUMBER,
-<a href=#1007 id=1007 data-nosnippet>1007</a> };
-<a href=#1008 id=1008 data-nosnippet>1008</a>
-<a href=#1009 id=1009 data-nosnippet>1009</a> <span class="attr">#[tokio::test]
-<a href=#1010 id=1010 data-nosnippet>1010</a> </span><span class="kw">async fn </span>test_parse_manifest_list_v1() {
-<a href=#1011 id=1011 data-nosnippet>1011</a> <span class="kw">let </span>manifest_list = ManifestList {
-<a href=#1012 id=1012 data-nosnippet>1012</a> entries: <span class="macro">vec!</span>[
-<a href=#1013 id=1013 data-nosnippet>1013</a> ManifestFile {
-<a href=#1014 id=1014 data-nosnippet>1014</a> manifest_path: <span class="string">"/opt/bitnami/spark/warehouse/db/table/metadata/10d28031-9739-484c-92db-cdf2975cead4-m0.avro"</span>.to_string(),
-<a href=#1015 id=1015 data-nosnippet>1015</a> manifest_length: <span class="number">5806</span>,
-<a href=#1016 id=1016 data-nosnippet>1016</a> partition_spec_id: <span class="number">0</span>,
-<a href=#1017 id=1017 data-nosnippet>1017</a> content: ManifestContentType::Data,
-<a href=#1018 id=1018 data-nosnippet>1018</a> sequence_number: <span class="number">0</span>,
-<a href=#1019 id=1019 data-nosnippet>1019</a> min_sequence_number: <span class="number">0</span>,
-<a href=#1020 id=1020 data-nosnippet>1020</a> added_snapshot_id: <span class="number">1646658105718557341</span>,
-<a href=#1021 id=1021 data-nosnippet>1021</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
-<a href=#1022 id=1022 data-nosnippet>1022</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1023 id=1023 data-nosnippet>1023</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1024 id=1024 data-nosnippet>1024</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
-<a href=#1025 id=1025 data-nosnippet>1025</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1026 id=1026 data-nosnippet>1026</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1027 id=1027 data-nosnippet>1027</a> partitions: <span class="prelude-val">Some</span>(<span class="macro">vec!</span>[]),
-<a href=#1028 id=1028 data-nosnippet>1028</a> key_metadata: <span class="macro">vec!</span>[],
-<a href=#1029 id=1029 data-nosnippet>1029</a> }
-<a href=#1030 id=1030 data-nosnippet>1030</a> ]
-<a href=#1031 id=1031 data-nosnippet>1031</a> };
-<a href=#1032 id=1032 data-nosnippet>1032</a>
-<a href=#1033 id=1033 data-nosnippet>1033</a> <span class="kw">let </span>file_io = FileIOBuilder::new_fs_io().build().unwrap();
-<a href=#1034 id=1034 data-nosnippet>1034</a>
-<a href=#1035 id=1035 data-nosnippet>1035</a> <span class="kw">let </span>tmp_dir = TempDir::new().unwrap();
-<a href=#1036 id=1036 data-nosnippet>1036</a> <span class="kw">let </span>file_name = <span class="string">"simple_manifest_list_v1.avro"</span>;
-<a href=#1037 id=1037 data-nosnippet>1037</a> <span class="kw">let </span>full_path = <span class="macro">format!</span>(<span class="string">"{}/{}"</span>, tmp_dir.path().to_str().unwrap(), file_name);
-<a href=#1038 id=1038 data-nosnippet>1038</a>
-<a href=#1039 id=1039 data-nosnippet>1039</a> <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestListWriter::v1(
-<a href=#1040 id=1040 data-nosnippet>1040</a> file_io.new_output(full_path.clone()).unwrap(),
-<a href=#1041 id=1041 data-nosnippet>1041</a> <span class="number">1646658105718557341</span>,
-<a href=#1042 id=1042 data-nosnippet>1042</a> <span class="prelude-val">Some</span>(<span class="number">1646658105718557341</span>),
-<a href=#1043 id=1043 data-nosnippet>1043</a> );
-<a href=#1044 id=1044 data-nosnippet>1044</a>
-<a href=#1045 id=1045 data-nosnippet>1045</a> writer
-<a href=#1046 id=1046 data-nosnippet>1046</a> .add_manifests(manifest_list.entries.clone().into_iter())
-<a href=#1047 id=1047 data-nosnippet>1047</a> .unwrap();
-<a href=#1048 id=1048 data-nosnippet>1048</a> writer.close().<span class="kw">await</span>.unwrap();
-<a href=#1049 id=1049 data-nosnippet>1049</a>
-<a href=#1050 id=1050 data-nosnippet>1050</a> <span class="kw">let </span>bs = fs::read(full_path).expect(<span class="string">"read_file must succeed"</span>);
-<a href=#1051 id=1051 data-nosnippet>1051</a>
-<a href=#1052 id=1052 data-nosnippet>1052</a> <span class="kw">let </span>parsed_manifest_list =
-<a href=#1053 id=1053 data-nosnippet>1053</a> ManifestList::parse_with_version(<span class="kw-2">&</span>bs, <span class="kw">crate</span>::spec::FormatVersion::V1).unwrap();
-<a href=#1054 id=1054 data-nosnippet>1054</a>
-<a href=#1055 id=1055 data-nosnippet>1055</a> <span class="macro">assert_eq!</span>(manifest_list, parsed_manifest_list);
-<a href=#1056 id=1056 data-nosnippet>1056</a> }
-<a href=#1057 id=1057 data-nosnippet>1057</a>
-<a href=#1058 id=1058 data-nosnippet>1058</a> <span class="attr">#[tokio::test]
-<a href=#1059 id=1059 data-nosnippet>1059</a> </span><span class="kw">async fn </span>test_parse_manifest_list_v2() {
-<a href=#1060 id=1060 data-nosnippet>1060</a> <span class="kw">let </span>manifest_list = ManifestList {
-<a href=#1061 id=1061 data-nosnippet>1061</a> entries: <span class="macro">vec!</span>[
-<a href=#1062 id=1062 data-nosnippet>1062</a> ManifestFile {
-<a href=#1063 id=1063 data-nosnippet>1063</a> manifest_path: <span class="string">"s3a://icebergdata/demo/s1/t1/metadata/05ffe08b-810f-49b3-a8f4-e88fc99b254a-m0.avro"</span>.to_string(),
-<a href=#1064 id=1064 data-nosnippet>1064</a> manifest_length: <span class="number">6926</span>,
-<a href=#1065 id=1065 data-nosnippet>1065</a> partition_spec_id: <span class="number">1</span>,
-<a href=#1066 id=1066 data-nosnippet>1066</a> content: ManifestContentType::Data,
-<a href=#1067 id=1067 data-nosnippet>1067</a> sequence_number: <span class="number">1</span>,
-<a href=#1068 id=1068 data-nosnippet>1068</a> min_sequence_number: <span class="number">1</span>,
-<a href=#1069 id=1069 data-nosnippet>1069</a> added_snapshot_id: <span class="number">377075049360453639</span>,
-<a href=#1070 id=1070 data-nosnippet>1070</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">1</span>),
-<a href=#1071 id=1071 data-nosnippet>1071</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1072 id=1072 data-nosnippet>1072</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1073 id=1073 data-nosnippet>1073</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
-<a href=#1074 id=1074 data-nosnippet>1074</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1075 id=1075 data-nosnippet>1075</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1076 id=1076 data-nosnippet>1076</a> partitions: <span class="prelude-val">Some</span>(
-<a href=#1077 id=1077 data-nosnippet>1077</a> <span class="macro">vec!</span>[FieldSummary { contains_null: <span class="bool-val">false</span>, contains_nan: <span class="prelude-val">Some</span>(<span class="bool-val">false</span>), lower_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap()), upper_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap())}]
-<a href=#1078 id=1078 data-nosnippet>1078</a> ),
-<a href=#1079 id=1079 data-nosnippet>1079</a> key_metadata: <span class="macro">vec!</span>[],
-<a href=#1080 id=1080 data-nosnippet>1080</a> },
-<a href=#1081 id=1081 data-nosnippet>1081</a> ManifestFile {
-<a href=#1082 id=1082 data-nosnippet>1082</a> manifest_path: <span class="string">"s3a://icebergdata/demo/s1/t1/metadata/05ffe08b-810f-49b3-a8f4-e88fc99b254a-m1.avro"</span>.to_string(),
-<a href=#1083 id=1083 data-nosnippet>1083</a> manifest_length: <span class="number">6926</span>,
-<a href=#1084 id=1084 data-nosnippet>1084</a> partition_spec_id: <span class="number">2</span>,
-<a href=#1085 id=1085 data-nosnippet>1085</a> content: ManifestContentType::Data,
-<a href=#1086 id=1086 data-nosnippet>1086</a> sequence_number: <span class="number">1</span>,
-<a href=#1087 id=1087 data-nosnippet>1087</a> min_sequence_number: <span class="number">1</span>,
-<a href=#1088 id=1088 data-nosnippet>1088</a> added_snapshot_id: <span class="number">377075049360453639</span>,
-<a href=#1089 id=1089 data-nosnippet>1089</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">1</span>),
-<a href=#1090 id=1090 data-nosnippet>1090</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1091 id=1091 data-nosnippet>1091</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1092 id=1092 data-nosnippet>1092</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
-<a href=#1093 id=1093 data-nosnippet>1093</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1094 id=1094 data-nosnippet>1094</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1095 id=1095 data-nosnippet>1095</a> partitions: <span class="prelude-val">Some</span>(
-<a href=#1096 id=1096 data-nosnippet>1096</a> <span class="macro">vec!</span>[FieldSummary { contains_null: <span class="bool-val">false</span>, contains_nan: <span class="prelude-val">Some</span>(<span class="bool-val">false</span>), lower_bound: <span class="prelude-val">Some</span>(Datum::float(<span class="number">1.1</span>).to_bytes().unwrap()), upper_bound: <span class="prelude-val">Some</span>(Datum::float(<span class="number">2.1</span>).to_bytes().unwrap())}]
-<a href=#1097 id=1097 data-nosnippet>1097</a> ),
-<a href=#1098 id=1098 data-nosnippet>1098</a> key_metadata: <span class="macro">vec!</span>[],
-<a href=#1099 id=1099 data-nosnippet>1099</a> }
-<a href=#1100 id=1100 data-nosnippet>1100</a> ]
-<a href=#1101 id=1101 data-nosnippet>1101</a> };
-<a href=#1102 id=1102 data-nosnippet>1102</a>
-<a href=#1103 id=1103 data-nosnippet>1103</a> <span class="kw">let </span>file_io = FileIOBuilder::new_fs_io().build().unwrap();
-<a href=#1104 id=1104 data-nosnippet>1104</a>
-<a href=#1105 id=1105 data-nosnippet>1105</a> <span class="kw">let </span>tmp_dir = TempDir::new().unwrap();
-<a href=#1106 id=1106 data-nosnippet>1106</a> <span class="kw">let </span>file_name = <span class="string">"simple_manifest_list_v1.avro"</span>;
-<a href=#1107 id=1107 data-nosnippet>1107</a> <span class="kw">let </span>full_path = <span class="macro">format!</span>(<span class="string">"{}/{}"</span>, tmp_dir.path().to_str().unwrap(), file_name);
-<a href=#1108 id=1108 data-nosnippet>1108</a>
-<a href=#1109 id=1109 data-nosnippet>1109</a> <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestListWriter::v2(
-<a href=#1110 id=1110 data-nosnippet>1110</a> file_io.new_output(full_path.clone()).unwrap(),
-<a href=#1111 id=1111 data-nosnippet>1111</a> <span class="number">1646658105718557341</span>,
-<a href=#1112 id=1112 data-nosnippet>1112</a> <span class="prelude-val">Some</span>(<span class="number">1646658105718557341</span>),
-<a href=#1113 id=1113 data-nosnippet>1113</a> <span class="number">1</span>,
-<a href=#1114 id=1114 data-nosnippet>1114</a> );
-<a href=#1115 id=1115 data-nosnippet>1115</a>
-<a href=#1116 id=1116 data-nosnippet>1116</a> writer
-<a href=#1117 id=1117 data-nosnippet>1117</a> .add_manifests(manifest_list.entries.clone().into_iter())
-<a href=#1118 id=1118 data-nosnippet>1118</a> .unwrap();
-<a href=#1119 id=1119 data-nosnippet>1119</a> writer.close().<span class="kw">await</span>.unwrap();
-<a href=#1120 id=1120 data-nosnippet>1120</a>
-<a href=#1121 id=1121 data-nosnippet>1121</a> <span class="kw">let </span>bs = fs::read(full_path).expect(<span class="string">"read_file must succeed"</span>);
-<a href=#1122 id=1122 data-nosnippet>1122</a>
-<a href=#1123 id=1123 data-nosnippet>1123</a> <span class="kw">let </span>parsed_manifest_list =
-<a href=#1124 id=1124 data-nosnippet>1124</a> ManifestList::parse_with_version(<span class="kw-2">&</span>bs, <span class="kw">crate</span>::spec::FormatVersion::V2).unwrap();
-<a href=#1125 id=1125 data-nosnippet>1125</a>
-<a href=#1126 id=1126 data-nosnippet>1126</a> <span class="macro">assert_eq!</span>(manifest_list, parsed_manifest_list);
-<a href=#1127 id=1127 data-nosnippet>1127</a> }
-<a href=#1128 id=1128 data-nosnippet>1128</a>
-<a href=#1129 id=1129 data-nosnippet>1129</a> <span class="attr">#[test]
-<a href=#1130 id=1130 data-nosnippet>1130</a> </span><span class="kw">fn </span>test_serialize_manifest_list_v1() {
-<a href=#1131 id=1131 data-nosnippet>1131</a> <span class="kw">let </span>manifest_list:ManifestListV1 = ManifestList {
-<a href=#1132 id=1132 data-nosnippet>1132</a> entries: <span class="macro">vec!</span>[ManifestFile {
-<a href=#1133 id=1133 data-nosnippet>1133</a> manifest_path: <span class="string">"/opt/bitnami/spark/warehouse/db/table/metadata/10d28031-9739-484c-92db-cdf2975cead4-m0.avro"</span>.to_string(),
-<a href=#1134 id=1134 data-nosnippet>1134</a> manifest_length: <span class="number">5806</span>,
-<a href=#1135 id=1135 data-nosnippet>1135</a> partition_spec_id: <span class="number">0</span>,
-<a href=#1136 id=1136 data-nosnippet>1136</a> content: ManifestContentType::Data,
-<a href=#1137 id=1137 data-nosnippet>1137</a> sequence_number: <span class="number">0</span>,
-<a href=#1138 id=1138 data-nosnippet>1138</a> min_sequence_number: <span class="number">0</span>,
-<a href=#1139 id=1139 data-nosnippet>1139</a> added_snapshot_id: <span class="number">1646658105718557341</span>,
-<a href=#1140 id=1140 data-nosnippet>1140</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
-<a href=#1141 id=1141 data-nosnippet>1141</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1142 id=1142 data-nosnippet>1142</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1143 id=1143 data-nosnippet>1143</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
-<a href=#1144 id=1144 data-nosnippet>1144</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1145 id=1145 data-nosnippet>1145</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1146 id=1146 data-nosnippet>1146</a> partitions: <span class="prelude-val">None</span>,
-<a href=#1147 id=1147 data-nosnippet>1147</a> key_metadata: <span class="macro">vec!</span>[],
-<a href=#1148 id=1148 data-nosnippet>1148</a> }]
-<a href=#1149 id=1149 data-nosnippet>1149</a> }.try_into().unwrap();
-<a href=#1150 id=1150 data-nosnippet>1150</a> <span class="kw">let </span>result = serde_json::to_string(<span class="kw-2">&</span>manifest_list).unwrap();
-<a href=#1151 id=1151 data-nosnippet>1151</a> <span class="macro">assert_eq!</span>(
-<a href=#1152 id=1152 data-nosnippet>1152</a> result,
-<a href=#1153 id=1153 data-nosnippet>1153</a> <span class="string">r#"[{"manifest_path":"/opt/bitnami/spark/warehouse/db/table/metadata/10d28031-9739-484c-92db-cdf2975cead4-m0.avro","manifest_length":5806,"partition_spec_id":0,"added_snapshot_id":1646658105718557341,"added_data_files_count":3,"existing_data_files_count":0,"deleted_data_files_count":0,"added_rows_count":3,"existing_rows_count":0,"deleted_rows_count":0,"partitions":null,"key_metadata":null}]"#
-<a href=#1154 id=1154 data-nosnippet>1154</a> </span>);
-<a href=#1155 id=1155 data-nosnippet>1155</a> }
-<a href=#1156 id=1156 data-nosnippet>1156</a>
-<a href=#1157 id=1157 data-nosnippet>1157</a> <span class="attr">#[test]
-<a href=#1158 id=1158 data-nosnippet>1158</a> </span><span class="kw">fn </span>test_serialize_manifest_list_v2() {
-<a href=#1159 id=1159 data-nosnippet>1159</a> <span class="kw">let </span>manifest_list:ManifestListV2 = ManifestList {
-<a href=#1160 id=1160 data-nosnippet>1160</a> entries: <span class="macro">vec!</span>[ManifestFile {
-<a href=#1161 id=1161 data-nosnippet>1161</a> manifest_path: <span class="string">"s3a://icebergdata/demo/s1/t1/metadata/05ffe08b-810f-49b3-a8f4-e88fc99b254a-m0.avro"</span>.to_string(),
-<a href=#1162 id=1162 data-nosnippet>1162</a> manifest_length: <span class="number">6926</span>,
-<a href=#1163 id=1163 data-nosnippet>1163</a> partition_spec_id: <span class="number">1</span>,
-<a href=#1164 id=1164 data-nosnippet>1164</a> content: ManifestContentType::Data,
-<a href=#1165 id=1165 data-nosnippet>1165</a> sequence_number: <span class="number">1</span>,
-<a href=#1166 id=1166 data-nosnippet>1166</a> min_sequence_number: <span class="number">1</span>,
-<a href=#1167 id=1167 data-nosnippet>1167</a> added_snapshot_id: <span class="number">377075049360453639</span>,
-<a href=#1168 id=1168 data-nosnippet>1168</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">1</span>),
-<a href=#1169 id=1169 data-nosnippet>1169</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1170 id=1170 data-nosnippet>1170</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1171 id=1171 data-nosnippet>1171</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
-<a href=#1172 id=1172 data-nosnippet>1172</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1173 id=1173 data-nosnippet>1173</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1174 id=1174 data-nosnippet>1174</a> partitions: <span class="prelude-val">Some</span>(
-<a href=#1175 id=1175 data-nosnippet>1175</a> <span class="macro">vec!</span>[FieldSummary { contains_null: <span class="bool-val">false</span>, contains_nan: <span class="prelude-val">Some</span>(<span class="bool-val">false</span>), lower_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap()), upper_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap())}]
-<a href=#1176 id=1176 data-nosnippet>1176</a> ),
-<a href=#1177 id=1177 data-nosnippet>1177</a> key_metadata: <span class="macro">vec!</span>[],
-<a href=#1178 id=1178 data-nosnippet>1178</a> }]
-<a href=#1179 id=1179 data-nosnippet>1179</a> }.try_into().unwrap();
-<a href=#1180 id=1180 data-nosnippet>1180</a> <span class="kw">let </span>result = serde_json::to_string(<span class="kw-2">&</span>manifest_list).unwrap();
-<a href=#1181 id=1181 data-nosnippet>1181</a> <span class="macro">assert_eq!</span>(
-<a href=#1182 id=1182 data-nosnippet>1182</a> result,
-<a href=#1183 id=1183 data-nosnippet>1183</a> <span class="string">r#"[{"manifest_path":"s3a://icebergdata/demo/s1/t1/metadata/05ffe08b-810f-49b3-a8f4-e88fc99b254a-m0.avro","manifest_length":6926,"partition_spec_id":1,"content":0,"sequence_number":1,"min_sequence_number":1,"added_snapshot_id":377075049360453639,"added_files_count":1,"existing_files_count":0,"deleted_files_count":0,"added_rows_count":3,"existing_rows_count":0,"deleted_rows_count":0,"partitions":[{"contains_null [...]
-<a href=#1184 id=1184 data-nosnippet>1184</a> </span>);
-<a href=#1185 id=1185 data-nosnippet>1185</a> }
-<a href=#1186 id=1186 data-nosnippet>1186</a>
-<a href=#1187 id=1187 data-nosnippet>1187</a> <span class="attr">#[tokio::test]
-<a href=#1188 id=1188 data-nosnippet>1188</a> </span><span class="kw">async fn </span>test_manifest_list_writer_v1() {
-<a href=#1189 id=1189 data-nosnippet>1189</a> <span class="kw">let </span>expected_manifest_list = ManifestList {
-<a href=#1190 id=1190 data-nosnippet>1190</a> entries: <span class="macro">vec!</span>[ManifestFile {
-<a href=#1191 id=1191 data-nosnippet>1191</a> manifest_path: <span class="string">"/opt/bitnami/spark/warehouse/db/table/metadata/10d28031-9739-484c-92db-cdf2975cead4-m0.avro"</span>.to_string(),
-<a href=#1192 id=1192 data-nosnippet>1192</a> manifest_length: <span class="number">5806</span>,
-<a href=#1193 id=1193 data-nosnippet>1193</a> partition_spec_id: <span class="number">1</span>,
-<a href=#1194 id=1194 data-nosnippet>1194</a> content: ManifestContentType::Data,
-<a href=#1195 id=1195 data-nosnippet>1195</a> sequence_number: <span class="number">0</span>,
-<a href=#1196 id=1196 data-nosnippet>1196</a> min_sequence_number: <span class="number">0</span>,
-<a href=#1197 id=1197 data-nosnippet>1197</a> added_snapshot_id: <span class="number">1646658105718557341</span>,
-<a href=#1198 id=1198 data-nosnippet>1198</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
-<a href=#1199 id=1199 data-nosnippet>1199</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1200 id=1200 data-nosnippet>1200</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1201 id=1201 data-nosnippet>1201</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
-<a href=#1202 id=1202 data-nosnippet>1202</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1203 id=1203 data-nosnippet>1203</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1204 id=1204 data-nosnippet>1204</a> partitions: <span class="prelude-val">Some</span>(
-<a href=#1205 id=1205 data-nosnippet>1205</a> <span class="macro">vec!</span>[FieldSummary { contains_null: <span class="bool-val">false</span>, contains_nan: <span class="prelude-val">Some</span>(<span class="bool-val">false</span>), lower_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap()), upper_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap())}],
-<a href=#1206 id=1206 data-nosnippet>1206</a> ),
-<a href=#1207 id=1207 data-nosnippet>1207</a> key_metadata: <span class="macro">vec!</span>[],
-<a href=#1208 id=1208 data-nosnippet>1208</a> }]
-<a href=#1209 id=1209 data-nosnippet>1209</a> };
-<a href=#1210 id=1210 data-nosnippet>1210</a>
-<a href=#1211 id=1211 data-nosnippet>1211</a> <span class="kw">let </span>temp_dir = TempDir::new().unwrap();
-<a href=#1212 id=1212 data-nosnippet>1212</a> <span class="kw">let </span>path = temp_dir.path().join(<span class="string">"manifest_list_v1.avro"</span>);
-<a href=#1213 id=1213 data-nosnippet>1213</a> <span class="kw">let </span>io = FileIOBuilder::new_fs_io().build().unwrap();
-<a href=#1214 id=1214 data-nosnippet>1214</a> <span class="kw">let </span>output_file = io.new_output(path.to_str().unwrap()).unwrap();
-<a href=#1215 id=1215 data-nosnippet>1215</a>
-<a href=#1216 id=1216 data-nosnippet>1216</a> <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestListWriter::v1(output_file, <span class="number">1646658105718557341</span>, <span class="prelude-val">Some</span>(<span class="number">0</span>));
-<a href=#1217 id=1217 data-nosnippet>1217</a> writer
-<a href=#1218 id=1218 data-nosnippet>1218</a> .add_manifests(expected_manifest_list.entries.clone().into_iter())
-<a href=#1219 id=1219 data-nosnippet>1219</a> .unwrap();
-<a href=#1220 id=1220 data-nosnippet>1220</a> writer.close().<span class="kw">await</span>.unwrap();
-<a href=#1221 id=1221 data-nosnippet>1221</a>
-<a href=#1222 id=1222 data-nosnippet>1222</a> <span class="kw">let </span>bs = fs::read(path).unwrap();
-<a href=#1223 id=1223 data-nosnippet>1223</a>
-<a href=#1224 id=1224 data-nosnippet>1224</a> <span class="kw">let </span>manifest_list =
-<a href=#1225 id=1225 data-nosnippet>1225</a> ManifestList::parse_with_version(<span class="kw-2">&</span>bs, <span class="kw">crate</span>::spec::FormatVersion::V1).unwrap();
-<a href=#1226 id=1226 data-nosnippet>1226</a> <span class="macro">assert_eq!</span>(manifest_list, expected_manifest_list);
-<a href=#1227 id=1227 data-nosnippet>1227</a>
-<a href=#1228 id=1228 data-nosnippet>1228</a> temp_dir.close().unwrap();
-<a href=#1229 id=1229 data-nosnippet>1229</a> }
-<a href=#1230 id=1230 data-nosnippet>1230</a>
-<a href=#1231 id=1231 data-nosnippet>1231</a> <span class="attr">#[tokio::test]
-<a href=#1232 id=1232 data-nosnippet>1232</a> </span><span class="kw">async fn </span>test_manifest_list_writer_v2() {
-<a href=#1233 id=1233 data-nosnippet>1233</a> <span class="kw">let </span>snapshot_id = <span class="number">377075049360453639</span>;
-<a href=#1234 id=1234 data-nosnippet>1234</a> <span class="kw">let </span>seq_num = <span class="number">1</span>;
-<a href=#1235 id=1235 data-nosnippet>1235</a> <span class="kw">let </span><span class="kw-2">mut </span>expected_manifest_list = ManifestList {
-<a href=#1236 id=1236 data-nosnippet>1236</a> entries: <span class="macro">vec!</span>[ManifestFile {
-<a href=#1237 id=1237 data-nosnippet>1237</a> manifest_path: <span class="string">"s3a://icebergdata/demo/s1/t1/metadata/05ffe08b-810f-49b3-a8f4-e88fc99b254a-m0.avro"</span>.to_string(),
-<a href=#1238 id=1238 data-nosnippet>1238</a> manifest_length: <span class="number">6926</span>,
-<a href=#1239 id=1239 data-nosnippet>1239</a> partition_spec_id: <span class="number">1</span>,
-<a href=#1240 id=1240 data-nosnippet>1240</a> content: ManifestContentType::Data,
-<a href=#1241 id=1241 data-nosnippet>1241</a> sequence_number: UNASSIGNED_SEQUENCE_NUMBER,
-<a href=#1242 id=1242 data-nosnippet>1242</a> min_sequence_number: UNASSIGNED_SEQUENCE_NUMBER,
-<a href=#1243 id=1243 data-nosnippet>1243</a> added_snapshot_id: snapshot_id,
-<a href=#1244 id=1244 data-nosnippet>1244</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">1</span>),
-<a href=#1245 id=1245 data-nosnippet>1245</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1246 id=1246 data-nosnippet>1246</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1247 id=1247 data-nosnippet>1247</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
-<a href=#1248 id=1248 data-nosnippet>1248</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1249 id=1249 data-nosnippet>1249</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1250 id=1250 data-nosnippet>1250</a> partitions: <span class="prelude-val">Some</span>(
-<a href=#1251 id=1251 data-nosnippet>1251</a> <span class="macro">vec!</span>[FieldSummary { contains_null: <span class="bool-val">false</span>, contains_nan: <span class="prelude-val">Some</span>(<span class="bool-val">false</span>), lower_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap()), upper_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap())}]
-<a href=#1252 id=1252 data-nosnippet>1252</a> ),
-<a href=#1253 id=1253 data-nosnippet>1253</a> key_metadata: <span class="macro">vec!</span>[],
-<a href=#1254 id=1254 data-nosnippet>1254</a> }]
-<a href=#1255 id=1255 data-nosnippet>1255</a> };
-<a href=#1256 id=1256 data-nosnippet>1256</a>
-<a href=#1257 id=1257 data-nosnippet>1257</a> <span class="kw">let </span>temp_dir = TempDir::new().unwrap();
-<a href=#1258 id=1258 data-nosnippet>1258</a> <span class="kw">let </span>path = temp_dir.path().join(<span class="string">"manifest_list_v2.avro"</span>);
-<a href=#1259 id=1259 data-nosnippet>1259</a> <span class="kw">let </span>io = FileIOBuilder::new_fs_io().build().unwrap();
-<a href=#1260 id=1260 data-nosnippet>1260</a> <span class="kw">let </span>output_file = io.new_output(path.to_str().unwrap()).unwrap();
-<a href=#1261 id=1261 data-nosnippet>1261</a>
-<a href=#1262 id=1262 data-nosnippet>1262</a> <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestListWriter::v2(output_file, snapshot_id, <span class="prelude-val">Some</span>(<span class="number">0</span>), seq_num);
-<a href=#1263 id=1263 data-nosnippet>1263</a> writer
-<a href=#1264 id=1264 data-nosnippet>1264</a> .add_manifests(expected_manifest_list.entries.clone().into_iter())
-<a href=#1265 id=1265 data-nosnippet>1265</a> .unwrap();
-<a href=#1266 id=1266 data-nosnippet>1266</a> writer.close().<span class="kw">await</span>.unwrap();
-<a href=#1267 id=1267 data-nosnippet>1267</a>
-<a href=#1268 id=1268 data-nosnippet>1268</a> <span class="kw">let </span>bs = fs::read(path).unwrap();
-<a href=#1269 id=1269 data-nosnippet>1269</a> <span class="kw">let </span>manifest_list =
-<a href=#1270 id=1270 data-nosnippet>1270</a> ManifestList::parse_with_version(<span class="kw-2">&</span>bs, <span class="kw">crate</span>::spec::FormatVersion::V2).unwrap();
-<a href=#1271 id=1271 data-nosnippet>1271</a> expected_manifest_list.entries[<span class="number">0</span>].sequence_number = seq_num;
-<a href=#1272 id=1272 data-nosnippet>1272</a> expected_manifest_list.entries[<span class="number">0</span>].min_sequence_number = seq_num;
-<a href=#1273 id=1273 data-nosnippet>1273</a> <span class="macro">assert_eq!</span>(manifest_list, expected_manifest_list);
-<a href=#1274 id=1274 data-nosnippet>1274</a>
-<a href=#1275 id=1275 data-nosnippet>1275</a> temp_dir.close().unwrap();
-<a href=#1276 id=1276 data-nosnippet>1276</a> }
-<a href=#1277 id=1277 data-nosnippet>1277</a>
-<a href=#1278 id=1278 data-nosnippet>1278</a> <span class="attr">#[tokio::test]
-<a href=#1279 id=1279 data-nosnippet>1279</a> </span><span class="kw">async fn </span>test_manifest_list_writer_v1_as_v2() {
-<a href=#1280 id=1280 data-nosnippet>1280</a> <span class="kw">let </span>expected_manifest_list = ManifestList {
-<a href=#1281 id=1281 data-nosnippet>1281</a> entries: <span class="macro">vec!</span>[ManifestFile {
-<a href=#1282 id=1282 data-nosnippet>1282</a> manifest_path: <span class="string">"/opt/bitnami/spark/warehouse/db/table/metadata/10d28031-9739-484c-92db-cdf2975cead4-m0.avro"</span>.to_string(),
-<a href=#1283 id=1283 data-nosnippet>1283</a> manifest_length: <span class="number">5806</span>,
-<a href=#1284 id=1284 data-nosnippet>1284</a> partition_spec_id: <span class="number">1</span>,
-<a href=#1285 id=1285 data-nosnippet>1285</a> content: ManifestContentType::Data,
-<a href=#1286 id=1286 data-nosnippet>1286</a> sequence_number: <span class="number">0</span>,
-<a href=#1287 id=1287 data-nosnippet>1287</a> min_sequence_number: <span class="number">0</span>,
-<a href=#1288 id=1288 data-nosnippet>1288</a> added_snapshot_id: <span class="number">1646658105718557341</span>,
-<a href=#1289 id=1289 data-nosnippet>1289</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
-<a href=#1290 id=1290 data-nosnippet>1290</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1291 id=1291 data-nosnippet>1291</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1292 id=1292 data-nosnippet>1292</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
-<a href=#1293 id=1293 data-nosnippet>1293</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1294 id=1294 data-nosnippet>1294</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#1295 id=1295 data-nosnippet>1295</a> partitions: <span class="prelude-val">Some</span>(
-<a href=#1296 id=1296 data-nosnippet>1296</a> <span class="macro">vec!</span>[FieldSummary { contains_null: <span class="bool-val">false</span>, contains_nan: <span class="prelude-val">Some</span>(<span class="bool-val">false</span>), lower_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap()), upper_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap())}]
-<a href=#1297 id=1297 data-nosnippet>1297</a> ),
-<a href=#1298 id=1298 data-nosnippet>1298</a> key_metadata: <span class="macro">vec!</span>[],
-<a href=#1299 id=1299 data-nosnippet>1299</a> }]
-<a href=#1300 id=1300 data-nosnippet>1300</a> };
-<a href=#1301 id=1301 data-nosnippet>1301</a>
-<a href=#1302 id=1302 data-nosnippet>1302</a> <span class="kw">let </span>temp_dir = TempDir::new().unwrap();
-<a href=#1303 id=1303 data-nosnippet>1303</a> <span class="kw">let </span>path = temp_dir.path().join(<span class="string">"manifest_list_v1.avro"</span>);
-<a href=#1304 id=1304 data-nosnippet>1304</a> <span class="kw">let </span>io = FileIOBuilder::new_fs_io().build().unwrap();
-<a href=#1305 id=1305 data-nosnippet>1305</a> <span class="kw">let </span>output_file = io.new_output(path.to_str().unwrap()).unwrap();
-<a href=#1306 id=1306 data-nosnippet>1306</a>
-<a href=#1307 id=1307 data-nosnippet>1307</a> <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestListWriter::v2(output_file, <span class="number">1646658105718557341</span>, <span class="prelude-val">Some</span>(<span class="number">0</span>), <span class="number">1</span>);
-<a href=#1308 id=1308 data-nosnippet>1308</a> writer
-<a href=#1309 id=1309 data-nosnippet>1309</a> .add_manifests(expected_manifest_list.entries.clone().into_iter())
-<a href=#1310 id=1310 data-nosnippet>1310</a> .unwrap();
-<a href=#1311 id=1311 data-nosnippet>1311</a> writer.close().<span class="kw">await</span>.unwrap();
-<a href=#1312 id=1312 data-nosnippet>1312</a>
-<a href=#1313 id=1313 data-nosnippet>1313</a> <span class="kw">let </span>bs = fs::read(path).unwrap();
-<a href=#1314 id=1314 data-nosnippet>1314</a>
-<a href=#1315 id=1315 data-nosnippet>1315</a> <span class="kw">let </span>manifest_list =
-<a href=#1316 id=1316 data-nosnippet>1316</a> ManifestList::parse_with_version(<span class="kw-2">&</span>bs, <span class="kw">crate</span>::spec::FormatVersion::V2).unwrap();
-<a href=#1317 id=1317 data-nosnippet>1317</a> <span class="macro">assert_eq!</span>(manifest_list, expected_manifest_list);
-<a href=#1318 id=1318 data-nosnippet>1318</a>
-<a href=#1319 id=1319 data-nosnippet>1319</a> temp_dir.close().unwrap();
-<a href=#1320 id=1320 data-nosnippet>1320</a> }
-<a href=#1321 id=1321 data-nosnippet>1321</a>
-<a href=#1322 id=1322 data-nosnippet>1322</a> <span class="attr">#[tokio::test]
-<a href=#1323 id=1323 data-nosnippet>1323</a> </span><span class="kw">async fn </span>test_manifest_list_v2_deserializer_aliases() {
-<a href=#1324 id=1324 data-nosnippet>1324</a> <span class="comment">// reading avro manifest file generated by iceberg 1.4.0
-<a href=#1325 id=1325 data-nosnippet>1325</a> </span><span class="kw">let </span>avro_1_path = <span class="string">"testdata/manifests_lists/manifest-list-v2-1.avro"</span>;
-<a href=#1326 id=1326 data-nosnippet>1326</a> <span class="kw">let </span>bs_1 = fs::read(avro_1_path).unwrap();
-<a href=#1327 id=1327 data-nosnippet>1327</a> <span class="kw">let </span>avro_1_fields = read_avro_schema_fields_as_str(bs_1.clone()).<span class="kw">await</span>;
-<a href=#1328 id=1328 data-nosnippet>1328</a> <span class="macro">assert_eq!</span>(
-<a href=#1329 id=1329 data-nosnippet>1329</a> avro_1_fields,
-<a href=#1330 id=1330 data-nosnippet>1330</a> <span class="string">"manifest_path, manifest_length, partition_spec_id, content, sequence_number, min_sequence_number, added_snapshot_id, added_data_files_count, existing_data_files_count, deleted_data_files_count, added_rows_count, existing_rows_count, deleted_rows_count, partitions"
-<a href=#1331 id=1331 data-nosnippet>1331</a> </span>);
-<a href=#1332 id=1332 data-nosnippet>1332</a> <span class="comment">// reading avro manifest file generated by iceberg 1.5.0
-<a href=#1333 id=1333 data-nosnippet>1333</a> </span><span class="kw">let </span>avro_2_path = <span class="string">"testdata/manifests_lists/manifest-list-v2-2.avro"</span>;
-<a href=#1334 id=1334 data-nosnippet>1334</a> <span class="kw">let </span>bs_2 = fs::read(avro_2_path).unwrap();
-<a href=#1335 id=1335 data-nosnippet>1335</a> <span class="kw">let </span>avro_2_fields = read_avro_schema_fields_as_str(bs_2.clone()).<span class="kw">await</span>;
-<a href=#1336 id=1336 data-nosnippet>1336</a> <span class="macro">assert_eq!</span>(
-<a href=#1337 id=1337 data-nosnippet>1337</a> avro_2_fields,
-<a href=#1338 id=1338 data-nosnippet>1338</a> <span class="string">"manifest_path, manifest_length, partition_spec_id, content, sequence_number, min_sequence_number, added_snapshot_id, added_files_count, existing_files_count, deleted_files_count, added_rows_count, existing_rows_count, deleted_rows_count, partitions"
-<a href=#1339 id=1339 data-nosnippet>1339</a> </span>);
-<a href=#1340 id=1340 data-nosnippet>1340</a> <span class="comment">// deserializing both files to ManifestList struct
-<a href=#1341 id=1341 data-nosnippet>1341</a> </span><span class="kw">let </span>_manifest_list_1 =
-<a href=#1342 id=1342 data-nosnippet>1342</a> ManifestList::parse_with_version(<span class="kw-2">&</span>bs_1, <span class="kw">crate</span>::spec::FormatVersion::V2).unwrap();
-<a href=#1343 id=1343 data-nosnippet>1343</a> <span class="kw">let </span>_manifest_list_2 =
-<a href=#1344 id=1344 data-nosnippet>1344</a> ManifestList::parse_with_version(<span class="kw-2">&</span>bs_2, <span class="kw">crate</span>::spec::FormatVersion::V2).unwrap();
-<a href=#1345 id=1345 data-nosnippet>1345</a> }
-<a href=#1346 id=1346 data-nosnippet>1346</a>
-<a href=#1347 id=1347 data-nosnippet>1347</a> <span class="kw">async fn </span>read_avro_schema_fields_as_str(bs: Vec<u8>) -> String {
-<a href=#1348 id=1348 data-nosnippet>1348</a> <span class="kw">let </span>reader = Reader::new(<span class="kw-2">&</span>bs[..]).unwrap();
-<a href=#1349 id=1349 data-nosnippet>1349</a> <span class="kw">let </span>schema = reader.writer_schema();
-<a href=#1350 id=1350 data-nosnippet>1350</a> <span class="kw">let </span>fields: String = <span class="kw">match </span>schema {
-<a href=#1351 id=1351 data-nosnippet>1351</a> Schema::Record(record) => record
-<a href=#1352 id=1352 data-nosnippet>1352</a> .fields
-<a href=#1353 id=1353 data-nosnippet>1353</a> .iter()
-<a href=#1354 id=1354 data-nosnippet>1354</a> .map(|field| field.name.clone())
-<a href=#1355 id=1355 data-nosnippet>1355</a> .collect::<Vec<String>>()
-<a href=#1356 id=1356 data-nosnippet>1356</a> .join(<span class="string">", "</span>),
-<a href=#1357 id=1357 data-nosnippet>1357</a> <span class="kw">_ </span>=> <span class="string">""</span>.to_string(),
-<a href=#1358 id=1358 data-nosnippet>1358</a> };
-<a href=#1359 id=1359 data-nosnippet>1359</a> fields
-<a href=#1360 id=1360 data-nosnippet>1360</a> }
-<a href=#1361 id=1361 data-nosnippet>1361</a>}</code></pre></div></section></main></body></html>
\ No newline at end of file
+<a href=#875 id=875 data-nosnippet>875</a> <span class="kw">fn </span>convert_to_serde_key_metadata(key_metadata: <span class="prelude-ty">Option</span><Vec<u8>>) -> <span class="prelude-ty">Option</span><ByteBuf> {
+<a href=#876 id=876 data-nosnippet>876</a> <span class="kw">match </span>key_metadata {
+<a href=#877 id=877 data-nosnippet>877</a> <span class="prelude-val">Some</span>(metadata) <span class="kw">if </span>!metadata.is_empty() => <span class="prelude-val">Some</span>(ByteBuf::from(metadata)),
+<a href=#878 id=878 data-nosnippet>878</a> <span class="kw">_ </span>=> <span class="prelude-val">None</span>,
+<a href=#879 id=879 data-nosnippet>879</a> }
+<a href=#880 id=880 data-nosnippet>880</a> }
+<a href=#881 id=881 data-nosnippet>881</a>
+<a href=#882 id=882 data-nosnippet>882</a> <span class="kw">impl </span>TryFrom<ManifestFile> <span class="kw">for </span>ManifestFileV2 {
+<a href=#883 id=883 data-nosnippet>883</a> <span class="kw">type </span>Error = Error;
+<a href=#884 id=884 data-nosnippet>884</a>
+<a href=#885 id=885 data-nosnippet>885</a> <span class="kw">fn </span>try_from(value: ManifestFile) -> std::result::Result<<span class="self">Self</span>, <span class="self">Self</span>::Error> {
+<a href=#886 id=886 data-nosnippet>886</a> <span class="kw">let </span>key_metadata = convert_to_serde_key_metadata(value.key_metadata);
+<a href=#887 id=887 data-nosnippet>887</a> <span class="prelude-val">Ok</span>(<span class="self">Self </span>{
+<a href=#888 id=888 data-nosnippet>888</a> manifest_path: value.manifest_path,
+<a href=#889 id=889 data-nosnippet>889</a> manifest_length: value.manifest_length,
+<a href=#890 id=890 data-nosnippet>890</a> partition_spec_id: value.partition_spec_id,
+<a href=#891 id=891 data-nosnippet>891</a> content: value.content <span class="kw">as </span>i32,
+<a href=#892 id=892 data-nosnippet>892</a> sequence_number: value.sequence_number,
+<a href=#893 id=893 data-nosnippet>893</a> min_sequence_number: value.min_sequence_number,
+<a href=#894 id=894 data-nosnippet>894</a> added_snapshot_id: value.added_snapshot_id,
+<a href=#895 id=895 data-nosnippet>895</a> added_files_count: value
+<a href=#896 id=896 data-nosnippet>896</a> .added_files_count
+<a href=#897 id=897 data-nosnippet>897</a> .ok_or_else(|| {
+<a href=#898 id=898 data-nosnippet>898</a> Error::new(
+<a href=#899 id=899 data-nosnippet>899</a> <span class="kw">crate</span>::ErrorKind::DataInvalid,
+<a href=#900 id=900 data-nosnippet>900</a> <span class="string">"added_data_files_count in ManifestFileV2 should be require"</span>,
+<a href=#901 id=901 data-nosnippet>901</a> )
+<a href=#902 id=902 data-nosnippet>902</a> })<span class="question-mark">?
+<a href=#903 id=903 data-nosnippet>903</a> </span>.try_into()<span class="question-mark">?</span>,
+<a href=#904 id=904 data-nosnippet>904</a> existing_files_count: value
+<a href=#905 id=905 data-nosnippet>905</a> .existing_files_count
+<a href=#906 id=906 data-nosnippet>906</a> .ok_or_else(|| {
+<a href=#907 id=907 data-nosnippet>907</a> Error::new(
+<a href=#908 id=908 data-nosnippet>908</a> <span class="kw">crate</span>::ErrorKind::DataInvalid,
+<a href=#909 id=909 data-nosnippet>909</a> <span class="string">"existing_data_files_count in ManifestFileV2 should be require"</span>,
+<a href=#910 id=910 data-nosnippet>910</a> )
+<a href=#911 id=911 data-nosnippet>911</a> })<span class="question-mark">?
+<a href=#912 id=912 data-nosnippet>912</a> </span>.try_into()<span class="question-mark">?</span>,
+<a href=#913 id=913 data-nosnippet>913</a> deleted_files_count: value
+<a href=#914 id=914 data-nosnippet>914</a> .deleted_files_count
+<a href=#915 id=915 data-nosnippet>915</a> .ok_or_else(|| {
+<a href=#916 id=916 data-nosnippet>916</a> Error::new(
+<a href=#917 id=917 data-nosnippet>917</a> <span class="kw">crate</span>::ErrorKind::DataInvalid,
+<a href=#918 id=918 data-nosnippet>918</a> <span class="string">"deleted_data_files_count in ManifestFileV2 should be require"</span>,
+<a href=#919 id=919 data-nosnippet>919</a> )
+<a href=#920 id=920 data-nosnippet>920</a> })<span class="question-mark">?
+<a href=#921 id=921 data-nosnippet>921</a> </span>.try_into()<span class="question-mark">?</span>,
+<a href=#922 id=922 data-nosnippet>922</a> added_rows_count: value
+<a href=#923 id=923 data-nosnippet>923</a> .added_rows_count
+<a href=#924 id=924 data-nosnippet>924</a> .ok_or_else(|| {
+<a href=#925 id=925 data-nosnippet>925</a> Error::new(
+<a href=#926 id=926 data-nosnippet>926</a> <span class="kw">crate</span>::ErrorKind::DataInvalid,
+<a href=#927 id=927 data-nosnippet>927</a> <span class="string">"added_rows_count in ManifestFileV2 should be require"</span>,
+<a href=#928 id=928 data-nosnippet>928</a> )
+<a href=#929 id=929 data-nosnippet>929</a> })<span class="question-mark">?
+<a href=#930 id=930 data-nosnippet>930</a> </span>.try_into()<span class="question-mark">?</span>,
+<a href=#931 id=931 data-nosnippet>931</a> existing_rows_count: value
+<a href=#932 id=932 data-nosnippet>932</a> .existing_rows_count
+<a href=#933 id=933 data-nosnippet>933</a> .ok_or_else(|| {
+<a href=#934 id=934 data-nosnippet>934</a> Error::new(
+<a href=#935 id=935 data-nosnippet>935</a> <span class="kw">crate</span>::ErrorKind::DataInvalid,
+<a href=#936 id=936 data-nosnippet>936</a> <span class="string">"existing_rows_count in ManifestFileV2 should be require"</span>,
+<a href=#937 id=937 data-nosnippet>937</a> )
+<a href=#938 id=938 data-nosnippet>938</a> })<span class="question-mark">?
+<a href=#939 id=939 data-nosnippet>939</a> </span>.try_into()<span class="question-mark">?</span>,
+<a href=#940 id=940 data-nosnippet>940</a> deleted_rows_count: value
+<a href=#941 id=941 data-nosnippet>941</a> .deleted_rows_count
+<a href=#942 id=942 data-nosnippet>942</a> .ok_or_else(|| {
+<a href=#943 id=943 data-nosnippet>943</a> Error::new(
+<a href=#944 id=944 data-nosnippet>944</a> <span class="kw">crate</span>::ErrorKind::DataInvalid,
+<a href=#945 id=945 data-nosnippet>945</a> <span class="string">"deleted_rows_count in ManifestFileV2 should be require"</span>,
+<a href=#946 id=946 data-nosnippet>946</a> )
+<a href=#947 id=947 data-nosnippet>947</a> })<span class="question-mark">?
+<a href=#948 id=948 data-nosnippet>948</a> </span>.try_into()<span class="question-mark">?</span>,
+<a href=#949 id=949 data-nosnippet>949</a> partitions: value.partitions,
+<a href=#950 id=950 data-nosnippet>950</a> key_metadata,
+<a href=#951 id=951 data-nosnippet>951</a> })
+<a href=#952 id=952 data-nosnippet>952</a> }
+<a href=#953 id=953 data-nosnippet>953</a> }
+<a href=#954 id=954 data-nosnippet>954</a>
+<a href=#955 id=955 data-nosnippet>955</a> <span class="kw">impl </span>TryFrom<ManifestFile> <span class="kw">for </span>ManifestFileV1 {
+<a href=#956 id=956 data-nosnippet>956</a> <span class="kw">type </span>Error = Error;
+<a href=#957 id=957 data-nosnippet>957</a>
+<a href=#958 id=958 data-nosnippet>958</a> <span class="kw">fn </span>try_from(value: ManifestFile) -> std::result::Result<<span class="self">Self</span>, <span class="self">Self</span>::Error> {
+<a href=#959 id=959 data-nosnippet>959</a> <span class="kw">let </span>key_metadata = convert_to_serde_key_metadata(value.key_metadata);
+<a href=#960 id=960 data-nosnippet>960</a> <span class="prelude-val">Ok</span>(<span class="self">Self </span>{
+<a href=#961 id=961 data-nosnippet>961</a> manifest_path: value.manifest_path,
+<a href=#962 id=962 data-nosnippet>962</a> manifest_length: value.manifest_length,
+<a href=#963 id=963 data-nosnippet>963</a> partition_spec_id: value.partition_spec_id,
+<a href=#964 id=964 data-nosnippet>964</a> added_snapshot_id: value.added_snapshot_id,
+<a href=#965 id=965 data-nosnippet>965</a> added_data_files_count: value
+<a href=#966 id=966 data-nosnippet>966</a> .added_files_count
+<a href=#967 id=967 data-nosnippet>967</a> .map(TryInto::try_into)
+<a href=#968 id=968 data-nosnippet>968</a> .transpose()<span class="question-mark">?</span>,
+<a href=#969 id=969 data-nosnippet>969</a> existing_data_files_count: value
+<a href=#970 id=970 data-nosnippet>970</a> .existing_files_count
+<a href=#971 id=971 data-nosnippet>971</a> .map(TryInto::try_into)
+<a href=#972 id=972 data-nosnippet>972</a> .transpose()<span class="question-mark">?</span>,
+<a href=#973 id=973 data-nosnippet>973</a> deleted_data_files_count: value
+<a href=#974 id=974 data-nosnippet>974</a> .deleted_files_count
+<a href=#975 id=975 data-nosnippet>975</a> .map(TryInto::try_into)
+<a href=#976 id=976 data-nosnippet>976</a> .transpose()<span class="question-mark">?</span>,
+<a href=#977 id=977 data-nosnippet>977</a> added_rows_count: value.added_rows_count.map(TryInto::try_into).transpose()<span class="question-mark">?</span>,
+<a href=#978 id=978 data-nosnippet>978</a> existing_rows_count: value
+<a href=#979 id=979 data-nosnippet>979</a> .existing_rows_count
+<a href=#980 id=980 data-nosnippet>980</a> .map(TryInto::try_into)
+<a href=#981 id=981 data-nosnippet>981</a> .transpose()<span class="question-mark">?</span>,
+<a href=#982 id=982 data-nosnippet>982</a> deleted_rows_count: value
+<a href=#983 id=983 data-nosnippet>983</a> .deleted_rows_count
+<a href=#984 id=984 data-nosnippet>984</a> .map(TryInto::try_into)
+<a href=#985 id=985 data-nosnippet>985</a> .transpose()<span class="question-mark">?</span>,
+<a href=#986 id=986 data-nosnippet>986</a> partitions: value.partitions,
+<a href=#987 id=987 data-nosnippet>987</a> key_metadata,
+<a href=#988 id=988 data-nosnippet>988</a> })
+<a href=#989 id=989 data-nosnippet>989</a> }
+<a href=#990 id=990 data-nosnippet>990</a> }
+<a href=#991 id=991 data-nosnippet>991</a>}
+<a href=#992 id=992 data-nosnippet>992</a>
+<a href=#993 id=993 data-nosnippet>993</a><span class="attr">#[cfg(test)]
+<a href=#994 id=994 data-nosnippet>994</a></span><span class="kw">mod </span>test {
+<a href=#995 id=995 data-nosnippet>995</a> <span class="kw">use </span>std::fs;
+<a href=#996 id=996 data-nosnippet>996</a>
+<a href=#997 id=997 data-nosnippet>997</a> <span class="kw">use </span>apache_avro::{Reader, Schema};
+<a href=#998 id=998 data-nosnippet>998</a> <span class="kw">use </span>tempfile::TempDir;
+<a href=#999 id=999 data-nosnippet>999</a>
+<a href=#1000 id=1000 data-nosnippet>1000</a> <span class="kw">use </span><span class="kw">super</span>::_serde::ManifestListV2;
+<a href=#1001 id=1001 data-nosnippet>1001</a> <span class="kw">use </span><span class="kw">crate</span>::io::FileIOBuilder;
+<a href=#1002 id=1002 data-nosnippet>1002</a> <span class="kw">use </span><span class="kw">crate</span>::spec::manifest_list::_serde::ManifestListV1;
+<a href=#1003 id=1003 data-nosnippet>1003</a> <span class="kw">use </span><span class="kw">crate</span>::spec::{
+<a href=#1004 id=1004 data-nosnippet>1004</a> Datum, FieldSummary, ManifestContentType, ManifestFile, ManifestList, ManifestListWriter,
+<a href=#1005 id=1005 data-nosnippet>1005</a> UNASSIGNED_SEQUENCE_NUMBER,
+<a href=#1006 id=1006 data-nosnippet>1006</a> };
+<a href=#1007 id=1007 data-nosnippet>1007</a>
+<a href=#1008 id=1008 data-nosnippet>1008</a> <span class="attr">#[tokio::test]
+<a href=#1009 id=1009 data-nosnippet>1009</a> </span><span class="kw">async fn </span>test_parse_manifest_list_v1() {
+<a href=#1010 id=1010 data-nosnippet>1010</a> <span class="kw">let </span>manifest_list = ManifestList {
+<a href=#1011 id=1011 data-nosnippet>1011</a> entries: <span class="macro">vec!</span>[
+<a href=#1012 id=1012 data-nosnippet>1012</a> ManifestFile {
+<a href=#1013 id=1013 data-nosnippet>1013</a> manifest_path: <span class="string">"/opt/bitnami/spark/warehouse/db/table/metadata/10d28031-9739-484c-92db-cdf2975cead4-m0.avro"</span>.to_string(),
+<a href=#1014 id=1014 data-nosnippet>1014</a> manifest_length: <span class="number">5806</span>,
+<a href=#1015 id=1015 data-nosnippet>1015</a> partition_spec_id: <span class="number">0</span>,
+<a href=#1016 id=1016 data-nosnippet>1016</a> content: ManifestContentType::Data,
+<a href=#1017 id=1017 data-nosnippet>1017</a> sequence_number: <span class="number">0</span>,
+<a href=#1018 id=1018 data-nosnippet>1018</a> min_sequence_number: <span class="number">0</span>,
+<a href=#1019 id=1019 data-nosnippet>1019</a> added_snapshot_id: <span class="number">1646658105718557341</span>,
+<a href=#1020 id=1020 data-nosnippet>1020</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
+<a href=#1021 id=1021 data-nosnippet>1021</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1022 id=1022 data-nosnippet>1022</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1023 id=1023 data-nosnippet>1023</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
+<a href=#1024 id=1024 data-nosnippet>1024</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1025 id=1025 data-nosnippet>1025</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1026 id=1026 data-nosnippet>1026</a> partitions: <span class="prelude-val">Some</span>(<span class="macro">vec!</span>[]),
+<a href=#1027 id=1027 data-nosnippet>1027</a> key_metadata: <span class="prelude-val">None</span>,
+<a href=#1028 id=1028 data-nosnippet>1028</a> }
+<a href=#1029 id=1029 data-nosnippet>1029</a> ]
+<a href=#1030 id=1030 data-nosnippet>1030</a> };
+<a href=#1031 id=1031 data-nosnippet>1031</a>
+<a href=#1032 id=1032 data-nosnippet>1032</a> <span class="kw">let </span>file_io = FileIOBuilder::new_fs_io().build().unwrap();
+<a href=#1033 id=1033 data-nosnippet>1033</a>
+<a href=#1034 id=1034 data-nosnippet>1034</a> <span class="kw">let </span>tmp_dir = TempDir::new().unwrap();
+<a href=#1035 id=1035 data-nosnippet>1035</a> <span class="kw">let </span>file_name = <span class="string">"simple_manifest_list_v1.avro"</span>;
+<a href=#1036 id=1036 data-nosnippet>1036</a> <span class="kw">let </span>full_path = <span class="macro">format!</span>(<span class="string">"{}/{}"</span>, tmp_dir.path().to_str().unwrap(), file_name);
+<a href=#1037 id=1037 data-nosnippet>1037</a>
+<a href=#1038 id=1038 data-nosnippet>1038</a> <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestListWriter::v1(
+<a href=#1039 id=1039 data-nosnippet>1039</a> file_io.new_output(full_path.clone()).unwrap(),
+<a href=#1040 id=1040 data-nosnippet>1040</a> <span class="number">1646658105718557341</span>,
+<a href=#1041 id=1041 data-nosnippet>1041</a> <span class="prelude-val">Some</span>(<span class="number">1646658105718557341</span>),
+<a href=#1042 id=1042 data-nosnippet>1042</a> );
+<a href=#1043 id=1043 data-nosnippet>1043</a>
+<a href=#1044 id=1044 data-nosnippet>1044</a> writer
+<a href=#1045 id=1045 data-nosnippet>1045</a> .add_manifests(manifest_list.entries.clone().into_iter())
+<a href=#1046 id=1046 data-nosnippet>1046</a> .unwrap();
+<a href=#1047 id=1047 data-nosnippet>1047</a> writer.close().<span class="kw">await</span>.unwrap();
+<a href=#1048 id=1048 data-nosnippet>1048</a>
+<a href=#1049 id=1049 data-nosnippet>1049</a> <span class="kw">let </span>bs = fs::read(full_path).expect(<span class="string">"read_file must succeed"</span>);
+<a href=#1050 id=1050 data-nosnippet>1050</a>
+<a href=#1051 id=1051 data-nosnippet>1051</a> <span class="kw">let </span>parsed_manifest_list =
+<a href=#1052 id=1052 data-nosnippet>1052</a> ManifestList::parse_with_version(<span class="kw-2">&</span>bs, <span class="kw">crate</span>::spec::FormatVersion::V1).unwrap();
+<a href=#1053 id=1053 data-nosnippet>1053</a>
+<a href=#1054 id=1054 data-nosnippet>1054</a> <span class="macro">assert_eq!</span>(manifest_list, parsed_manifest_list);
+<a href=#1055 id=1055 data-nosnippet>1055</a> }
+<a href=#1056 id=1056 data-nosnippet>1056</a>
+<a href=#1057 id=1057 data-nosnippet>1057</a> <span class="attr">#[tokio::test]
+<a href=#1058 id=1058 data-nosnippet>1058</a> </span><span class="kw">async fn </span>test_parse_manifest_list_v2() {
+<a href=#1059 id=1059 data-nosnippet>1059</a> <span class="kw">let </span>manifest_list = ManifestList {
+<a href=#1060 id=1060 data-nosnippet>1060</a> entries: <span class="macro">vec!</span>[
+<a href=#1061 id=1061 data-nosnippet>1061</a> ManifestFile {
+<a href=#1062 id=1062 data-nosnippet>1062</a> manifest_path: <span class="string">"s3a://icebergdata/demo/s1/t1/metadata/05ffe08b-810f-49b3-a8f4-e88fc99b254a-m0.avro"</span>.to_string(),
+<a href=#1063 id=1063 data-nosnippet>1063</a> manifest_length: <span class="number">6926</span>,
+<a href=#1064 id=1064 data-nosnippet>1064</a> partition_spec_id: <span class="number">1</span>,
+<a href=#1065 id=1065 data-nosnippet>1065</a> content: ManifestContentType::Data,
+<a href=#1066 id=1066 data-nosnippet>1066</a> sequence_number: <span class="number">1</span>,
+<a href=#1067 id=1067 data-nosnippet>1067</a> min_sequence_number: <span class="number">1</span>,
+<a href=#1068 id=1068 data-nosnippet>1068</a> added_snapshot_id: <span class="number">377075049360453639</span>,
+<a href=#1069 id=1069 data-nosnippet>1069</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">1</span>),
+<a href=#1070 id=1070 data-nosnippet>1070</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1071 id=1071 data-nosnippet>1071</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1072 id=1072 data-nosnippet>1072</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
+<a href=#1073 id=1073 data-nosnippet>1073</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1074 id=1074 data-nosnippet>1074</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1075 id=1075 data-nosnippet>1075</a> partitions: <span class="prelude-val">Some</span>(
+<a href=#1076 id=1076 data-nosnippet>1076</a> <span class="macro">vec!</span>[FieldSummary { contains_null: <span class="bool-val">false</span>, contains_nan: <span class="prelude-val">Some</span>(<span class="bool-val">false</span>), lower_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap()), upper_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap())}]
+<a href=#1077 id=1077 data-nosnippet>1077</a> ),
+<a href=#1078 id=1078 data-nosnippet>1078</a> key_metadata: <span class="prelude-val">None</span>,
+<a href=#1079 id=1079 data-nosnippet>1079</a> },
+<a href=#1080 id=1080 data-nosnippet>1080</a> ManifestFile {
+<a href=#1081 id=1081 data-nosnippet>1081</a> manifest_path: <span class="string">"s3a://icebergdata/demo/s1/t1/metadata/05ffe08b-810f-49b3-a8f4-e88fc99b254a-m1.avro"</span>.to_string(),
+<a href=#1082 id=1082 data-nosnippet>1082</a> manifest_length: <span class="number">6926</span>,
+<a href=#1083 id=1083 data-nosnippet>1083</a> partition_spec_id: <span class="number">2</span>,
+<a href=#1084 id=1084 data-nosnippet>1084</a> content: ManifestContentType::Data,
+<a href=#1085 id=1085 data-nosnippet>1085</a> sequence_number: <span class="number">1</span>,
+<a href=#1086 id=1086 data-nosnippet>1086</a> min_sequence_number: <span class="number">1</span>,
+<a href=#1087 id=1087 data-nosnippet>1087</a> added_snapshot_id: <span class="number">377075049360453639</span>,
+<a href=#1088 id=1088 data-nosnippet>1088</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">1</span>),
+<a href=#1089 id=1089 data-nosnippet>1089</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1090 id=1090 data-nosnippet>1090</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1091 id=1091 data-nosnippet>1091</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
+<a href=#1092 id=1092 data-nosnippet>1092</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1093 id=1093 data-nosnippet>1093</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1094 id=1094 data-nosnippet>1094</a> partitions: <span class="prelude-val">Some</span>(
+<a href=#1095 id=1095 data-nosnippet>1095</a> <span class="macro">vec!</span>[FieldSummary { contains_null: <span class="bool-val">false</span>, contains_nan: <span class="prelude-val">Some</span>(<span class="bool-val">false</span>), lower_bound: <span class="prelude-val">Some</span>(Datum::float(<span class="number">1.1</span>).to_bytes().unwrap()), upper_bound: <span class="prelude-val">Some</span>(Datum::float(<span class="number">2.1</span>).to_bytes().unwrap())}]
+<a href=#1096 id=1096 data-nosnippet>1096</a> ),
+<a href=#1097 id=1097 data-nosnippet>1097</a> key_metadata: <span class="prelude-val">None</span>,
+<a href=#1098 id=1098 data-nosnippet>1098</a> }
+<a href=#1099 id=1099 data-nosnippet>1099</a> ]
+<a href=#1100 id=1100 data-nosnippet>1100</a> };
+<a href=#1101 id=1101 data-nosnippet>1101</a>
+<a href=#1102 id=1102 data-nosnippet>1102</a> <span class="kw">let </span>file_io = FileIOBuilder::new_fs_io().build().unwrap();
+<a href=#1103 id=1103 data-nosnippet>1103</a>
+<a href=#1104 id=1104 data-nosnippet>1104</a> <span class="kw">let </span>tmp_dir = TempDir::new().unwrap();
+<a href=#1105 id=1105 data-nosnippet>1105</a> <span class="kw">let </span>file_name = <span class="string">"simple_manifest_list_v1.avro"</span>;
+<a href=#1106 id=1106 data-nosnippet>1106</a> <span class="kw">let </span>full_path = <span class="macro">format!</span>(<span class="string">"{}/{}"</span>, tmp_dir.path().to_str().unwrap(), file_name);
+<a href=#1107 id=1107 data-nosnippet>1107</a>
+<a href=#1108 id=1108 data-nosnippet>1108</a> <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestListWriter::v2(
+<a href=#1109 id=1109 data-nosnippet>1109</a> file_io.new_output(full_path.clone()).unwrap(),
+<a href=#1110 id=1110 data-nosnippet>1110</a> <span class="number">1646658105718557341</span>,
+<a href=#1111 id=1111 data-nosnippet>1111</a> <span class="prelude-val">Some</span>(<span class="number">1646658105718557341</span>),
+<a href=#1112 id=1112 data-nosnippet>1112</a> <span class="number">1</span>,
+<a href=#1113 id=1113 data-nosnippet>1113</a> );
+<a href=#1114 id=1114 data-nosnippet>1114</a>
+<a href=#1115 id=1115 data-nosnippet>1115</a> writer
+<a href=#1116 id=1116 data-nosnippet>1116</a> .add_manifests(manifest_list.entries.clone().into_iter())
+<a href=#1117 id=1117 data-nosnippet>1117</a> .unwrap();
+<a href=#1118 id=1118 data-nosnippet>1118</a> writer.close().<span class="kw">await</span>.unwrap();
+<a href=#1119 id=1119 data-nosnippet>1119</a>
+<a href=#1120 id=1120 data-nosnippet>1120</a> <span class="kw">let </span>bs = fs::read(full_path).expect(<span class="string">"read_file must succeed"</span>);
+<a href=#1121 id=1121 data-nosnippet>1121</a>
+<a href=#1122 id=1122 data-nosnippet>1122</a> <span class="kw">let </span>parsed_manifest_list =
+<a href=#1123 id=1123 data-nosnippet>1123</a> ManifestList::parse_with_version(<span class="kw-2">&</span>bs, <span class="kw">crate</span>::spec::FormatVersion::V2).unwrap();
+<a href=#1124 id=1124 data-nosnippet>1124</a>
+<a href=#1125 id=1125 data-nosnippet>1125</a> <span class="macro">assert_eq!</span>(manifest_list, parsed_manifest_list);
+<a href=#1126 id=1126 data-nosnippet>1126</a> }
+<a href=#1127 id=1127 data-nosnippet>1127</a>
+<a href=#1128 id=1128 data-nosnippet>1128</a> <span class="attr">#[test]
+<a href=#1129 id=1129 data-nosnippet>1129</a> </span><span class="kw">fn </span>test_serialize_manifest_list_v1() {
+<a href=#1130 id=1130 data-nosnippet>1130</a> <span class="kw">let </span>manifest_list:ManifestListV1 = ManifestList {
+<a href=#1131 id=1131 data-nosnippet>1131</a> entries: <span class="macro">vec!</span>[ManifestFile {
+<a href=#1132 id=1132 data-nosnippet>1132</a> manifest_path: <span class="string">"/opt/bitnami/spark/warehouse/db/table/metadata/10d28031-9739-484c-92db-cdf2975cead4-m0.avro"</span>.to_string(),
+<a href=#1133 id=1133 data-nosnippet>1133</a> manifest_length: <span class="number">5806</span>,
+<a href=#1134 id=1134 data-nosnippet>1134</a> partition_spec_id: <span class="number">0</span>,
+<a href=#1135 id=1135 data-nosnippet>1135</a> content: ManifestContentType::Data,
+<a href=#1136 id=1136 data-nosnippet>1136</a> sequence_number: <span class="number">0</span>,
+<a href=#1137 id=1137 data-nosnippet>1137</a> min_sequence_number: <span class="number">0</span>,
+<a href=#1138 id=1138 data-nosnippet>1138</a> added_snapshot_id: <span class="number">1646658105718557341</span>,
+<a href=#1139 id=1139 data-nosnippet>1139</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
+<a href=#1140 id=1140 data-nosnippet>1140</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1141 id=1141 data-nosnippet>1141</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1142 id=1142 data-nosnippet>1142</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
+<a href=#1143 id=1143 data-nosnippet>1143</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1144 id=1144 data-nosnippet>1144</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1145 id=1145 data-nosnippet>1145</a> partitions: <span class="prelude-val">None</span>,
+<a href=#1146 id=1146 data-nosnippet>1146</a> key_metadata: <span class="prelude-val">None</span>,
+<a href=#1147 id=1147 data-nosnippet>1147</a> }]
+<a href=#1148 id=1148 data-nosnippet>1148</a> }.try_into().unwrap();
+<a href=#1149 id=1149 data-nosnippet>1149</a> <span class="kw">let </span>result = serde_json::to_string(<span class="kw-2">&</span>manifest_list).unwrap();
+<a href=#1150 id=1150 data-nosnippet>1150</a> <span class="macro">assert_eq!</span>(
+<a href=#1151 id=1151 data-nosnippet>1151</a> result,
+<a href=#1152 id=1152 data-nosnippet>1152</a> <span class="string">r#"[{"manifest_path":"/opt/bitnami/spark/warehouse/db/table/metadata/10d28031-9739-484c-92db-cdf2975cead4-m0.avro","manifest_length":5806,"partition_spec_id":0,"added_snapshot_id":1646658105718557341,"added_data_files_count":3,"existing_data_files_count":0,"deleted_data_files_count":0,"added_rows_count":3,"existing_rows_count":0,"deleted_rows_count":0,"partitions":null,"key_metadata":null}]"#
+<a href=#1153 id=1153 data-nosnippet>1153</a> </span>);
+<a href=#1154 id=1154 data-nosnippet>1154</a> }
+<a href=#1155 id=1155 data-nosnippet>1155</a>
+<a href=#1156 id=1156 data-nosnippet>1156</a> <span class="attr">#[test]
+<a href=#1157 id=1157 data-nosnippet>1157</a> </span><span class="kw">fn </span>test_serialize_manifest_list_v2() {
+<a href=#1158 id=1158 data-nosnippet>1158</a> <span class="kw">let </span>manifest_list:ManifestListV2 = ManifestList {
+<a href=#1159 id=1159 data-nosnippet>1159</a> entries: <span class="macro">vec!</span>[ManifestFile {
+<a href=#1160 id=1160 data-nosnippet>1160</a> manifest_path: <span class="string">"s3a://icebergdata/demo/s1/t1/metadata/05ffe08b-810f-49b3-a8f4-e88fc99b254a-m0.avro"</span>.to_string(),
+<a href=#1161 id=1161 data-nosnippet>1161</a> manifest_length: <span class="number">6926</span>,
+<a href=#1162 id=1162 data-nosnippet>1162</a> partition_spec_id: <span class="number">1</span>,
+<a href=#1163 id=1163 data-nosnippet>1163</a> content: ManifestContentType::Data,
+<a href=#1164 id=1164 data-nosnippet>1164</a> sequence_number: <span class="number">1</span>,
+<a href=#1165 id=1165 data-nosnippet>1165</a> min_sequence_number: <span class="number">1</span>,
+<a href=#1166 id=1166 data-nosnippet>1166</a> added_snapshot_id: <span class="number">377075049360453639</span>,
+<a href=#1167 id=1167 data-nosnippet>1167</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">1</span>),
+<a href=#1168 id=1168 data-nosnippet>1168</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1169 id=1169 data-nosnippet>1169</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1170 id=1170 data-nosnippet>1170</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
+<a href=#1171 id=1171 data-nosnippet>1171</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1172 id=1172 data-nosnippet>1172</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1173 id=1173 data-nosnippet>1173</a> partitions: <span class="prelude-val">Some</span>(
+<a href=#1174 id=1174 data-nosnippet>1174</a> <span class="macro">vec!</span>[FieldSummary { contains_null: <span class="bool-val">false</span>, contains_nan: <span class="prelude-val">Some</span>(<span class="bool-val">false</span>), lower_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap()), upper_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap())}]
+<a href=#1175 id=1175 data-nosnippet>1175</a> ),
+<a href=#1176 id=1176 data-nosnippet>1176</a> key_metadata: <span class="prelude-val">None</span>,
+<a href=#1177 id=1177 data-nosnippet>1177</a> }]
+<a href=#1178 id=1178 data-nosnippet>1178</a> }.try_into().unwrap();
+<a href=#1179 id=1179 data-nosnippet>1179</a> <span class="kw">let </span>result = serde_json::to_string(<span class="kw-2">&</span>manifest_list).unwrap();
+<a href=#1180 id=1180 data-nosnippet>1180</a> <span class="macro">assert_eq!</span>(
+<a href=#1181 id=1181 data-nosnippet>1181</a> result,
+<a href=#1182 id=1182 data-nosnippet>1182</a> <span class="string">r#"[{"manifest_path":"s3a://icebergdata/demo/s1/t1/metadata/05ffe08b-810f-49b3-a8f4-e88fc99b254a-m0.avro","manifest_length":6926,"partition_spec_id":1,"content":0,"sequence_number":1,"min_sequence_number":1,"added_snapshot_id":377075049360453639,"added_files_count":1,"existing_files_count":0,"deleted_files_count":0,"added_rows_count":3,"existing_rows_count":0,"deleted_rows_count":0,"partitions":[{"contains_null [...]
+<a href=#1183 id=1183 data-nosnippet>1183</a> </span>);
+<a href=#1184 id=1184 data-nosnippet>1184</a> }
+<a href=#1185 id=1185 data-nosnippet>1185</a>
+<a href=#1186 id=1186 data-nosnippet>1186</a> <span class="attr">#[tokio::test]
+<a href=#1187 id=1187 data-nosnippet>1187</a> </span><span class="kw">async fn </span>test_manifest_list_writer_v1() {
+<a href=#1188 id=1188 data-nosnippet>1188</a> <span class="kw">let </span>expected_manifest_list = ManifestList {
+<a href=#1189 id=1189 data-nosnippet>1189</a> entries: <span class="macro">vec!</span>[ManifestFile {
+<a href=#1190 id=1190 data-nosnippet>1190</a> manifest_path: <span class="string">"/opt/bitnami/spark/warehouse/db/table/metadata/10d28031-9739-484c-92db-cdf2975cead4-m0.avro"</span>.to_string(),
+<a href=#1191 id=1191 data-nosnippet>1191</a> manifest_length: <span class="number">5806</span>,
+<a href=#1192 id=1192 data-nosnippet>1192</a> partition_spec_id: <span class="number">1</span>,
+<a href=#1193 id=1193 data-nosnippet>1193</a> content: ManifestContentType::Data,
+<a href=#1194 id=1194 data-nosnippet>1194</a> sequence_number: <span class="number">0</span>,
+<a href=#1195 id=1195 data-nosnippet>1195</a> min_sequence_number: <span class="number">0</span>,
+<a href=#1196 id=1196 data-nosnippet>1196</a> added_snapshot_id: <span class="number">1646658105718557341</span>,
+<a href=#1197 id=1197 data-nosnippet>1197</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
+<a href=#1198 id=1198 data-nosnippet>1198</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1199 id=1199 data-nosnippet>1199</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1200 id=1200 data-nosnippet>1200</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
+<a href=#1201 id=1201 data-nosnippet>1201</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1202 id=1202 data-nosnippet>1202</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1203 id=1203 data-nosnippet>1203</a> partitions: <span class="prelude-val">Some</span>(
+<a href=#1204 id=1204 data-nosnippet>1204</a> <span class="macro">vec!</span>[FieldSummary { contains_null: <span class="bool-val">false</span>, contains_nan: <span class="prelude-val">Some</span>(<span class="bool-val">false</span>), lower_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap()), upper_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap())}],
+<a href=#1205 id=1205 data-nosnippet>1205</a> ),
+<a href=#1206 id=1206 data-nosnippet>1206</a> key_metadata: <span class="prelude-val">None</span>,
+<a href=#1207 id=1207 data-nosnippet>1207</a> }]
+<a href=#1208 id=1208 data-nosnippet>1208</a> };
+<a href=#1209 id=1209 data-nosnippet>1209</a>
+<a href=#1210 id=1210 data-nosnippet>1210</a> <span class="kw">let </span>temp_dir = TempDir::new().unwrap();
+<a href=#1211 id=1211 data-nosnippet>1211</a> <span class="kw">let </span>path = temp_dir.path().join(<span class="string">"manifest_list_v1.avro"</span>);
+<a href=#1212 id=1212 data-nosnippet>1212</a> <span class="kw">let </span>io = FileIOBuilder::new_fs_io().build().unwrap();
+<a href=#1213 id=1213 data-nosnippet>1213</a> <span class="kw">let </span>output_file = io.new_output(path.to_str().unwrap()).unwrap();
+<a href=#1214 id=1214 data-nosnippet>1214</a>
+<a href=#1215 id=1215 data-nosnippet>1215</a> <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestListWriter::v1(output_file, <span class="number">1646658105718557341</span>, <span class="prelude-val">Some</span>(<span class="number">0</span>));
+<a href=#1216 id=1216 data-nosnippet>1216</a> writer
+<a href=#1217 id=1217 data-nosnippet>1217</a> .add_manifests(expected_manifest_list.entries.clone().into_iter())
+<a href=#1218 id=1218 data-nosnippet>1218</a> .unwrap();
+<a href=#1219 id=1219 data-nosnippet>1219</a> writer.close().<span class="kw">await</span>.unwrap();
+<a href=#1220 id=1220 data-nosnippet>1220</a>
+<a href=#1221 id=1221 data-nosnippet>1221</a> <span class="kw">let </span>bs = fs::read(path).unwrap();
+<a href=#1222 id=1222 data-nosnippet>1222</a>
+<a href=#1223 id=1223 data-nosnippet>1223</a> <span class="kw">let </span>manifest_list =
+<a href=#1224 id=1224 data-nosnippet>1224</a> ManifestList::parse_with_version(<span class="kw-2">&</span>bs, <span class="kw">crate</span>::spec::FormatVersion::V1).unwrap();
+<a href=#1225 id=1225 data-nosnippet>1225</a> <span class="macro">assert_eq!</span>(manifest_list, expected_manifest_list);
+<a href=#1226 id=1226 data-nosnippet>1226</a>
+<a href=#1227 id=1227 data-nosnippet>1227</a> temp_dir.close().unwrap();
+<a href=#1228 id=1228 data-nosnippet>1228</a> }
+<a href=#1229 id=1229 data-nosnippet>1229</a>
+<a href=#1230 id=1230 data-nosnippet>1230</a> <span class="attr">#[tokio::test]
+<a href=#1231 id=1231 data-nosnippet>1231</a> </span><span class="kw">async fn </span>test_manifest_list_writer_v2() {
+<a href=#1232 id=1232 data-nosnippet>1232</a> <span class="kw">let </span>snapshot_id = <span class="number">377075049360453639</span>;
+<a href=#1233 id=1233 data-nosnippet>1233</a> <span class="kw">let </span>seq_num = <span class="number">1</span>;
+<a href=#1234 id=1234 data-nosnippet>1234</a> <span class="kw">let </span><span class="kw-2">mut </span>expected_manifest_list = ManifestList {
+<a href=#1235 id=1235 data-nosnippet>1235</a> entries: <span class="macro">vec!</span>[ManifestFile {
+<a href=#1236 id=1236 data-nosnippet>1236</a> manifest_path: <span class="string">"s3a://icebergdata/demo/s1/t1/metadata/05ffe08b-810f-49b3-a8f4-e88fc99b254a-m0.avro"</span>.to_string(),
+<a href=#1237 id=1237 data-nosnippet>1237</a> manifest_length: <span class="number">6926</span>,
+<a href=#1238 id=1238 data-nosnippet>1238</a> partition_spec_id: <span class="number">1</span>,
+<a href=#1239 id=1239 data-nosnippet>1239</a> content: ManifestContentType::Data,
+<a href=#1240 id=1240 data-nosnippet>1240</a> sequence_number: UNASSIGNED_SEQUENCE_NUMBER,
+<a href=#1241 id=1241 data-nosnippet>1241</a> min_sequence_number: UNASSIGNED_SEQUENCE_NUMBER,
+<a href=#1242 id=1242 data-nosnippet>1242</a> added_snapshot_id: snapshot_id,
+<a href=#1243 id=1243 data-nosnippet>1243</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">1</span>),
+<a href=#1244 id=1244 data-nosnippet>1244</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1245 id=1245 data-nosnippet>1245</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1246 id=1246 data-nosnippet>1246</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
+<a href=#1247 id=1247 data-nosnippet>1247</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1248 id=1248 data-nosnippet>1248</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1249 id=1249 data-nosnippet>1249</a> partitions: <span class="prelude-val">Some</span>(
+<a href=#1250 id=1250 data-nosnippet>1250</a> <span class="macro">vec!</span>[FieldSummary { contains_null: <span class="bool-val">false</span>, contains_nan: <span class="prelude-val">Some</span>(<span class="bool-val">false</span>), lower_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap()), upper_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap())}]
+<a href=#1251 id=1251 data-nosnippet>1251</a> ),
+<a href=#1252 id=1252 data-nosnippet>1252</a> key_metadata: <span class="prelude-val">None</span>,
+<a href=#1253 id=1253 data-nosnippet>1253</a> }]
+<a href=#1254 id=1254 data-nosnippet>1254</a> };
+<a href=#1255 id=1255 data-nosnippet>1255</a>
+<a href=#1256 id=1256 data-nosnippet>1256</a> <span class="kw">let </span>temp_dir = TempDir::new().unwrap();
+<a href=#1257 id=1257 data-nosnippet>1257</a> <span class="kw">let </span>path = temp_dir.path().join(<span class="string">"manifest_list_v2.avro"</span>);
+<a href=#1258 id=1258 data-nosnippet>1258</a> <span class="kw">let </span>io = FileIOBuilder::new_fs_io().build().unwrap();
+<a href=#1259 id=1259 data-nosnippet>1259</a> <span class="kw">let </span>output_file = io.new_output(path.to_str().unwrap()).unwrap();
+<a href=#1260 id=1260 data-nosnippet>1260</a>
+<a href=#1261 id=1261 data-nosnippet>1261</a> <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestListWriter::v2(output_file, snapshot_id, <span class="prelude-val">Some</span>(<span class="number">0</span>), seq_num);
+<a href=#1262 id=1262 data-nosnippet>1262</a> writer
+<a href=#1263 id=1263 data-nosnippet>1263</a> .add_manifests(expected_manifest_list.entries.clone().into_iter())
+<a href=#1264 id=1264 data-nosnippet>1264</a> .unwrap();
+<a href=#1265 id=1265 data-nosnippet>1265</a> writer.close().<span class="kw">await</span>.unwrap();
+<a href=#1266 id=1266 data-nosnippet>1266</a>
+<a href=#1267 id=1267 data-nosnippet>1267</a> <span class="kw">let </span>bs = fs::read(path).unwrap();
+<a href=#1268 id=1268 data-nosnippet>1268</a> <span class="kw">let </span>manifest_list =
+<a href=#1269 id=1269 data-nosnippet>1269</a> ManifestList::parse_with_version(<span class="kw-2">&</span>bs, <span class="kw">crate</span>::spec::FormatVersion::V2).unwrap();
+<a href=#1270 id=1270 data-nosnippet>1270</a> expected_manifest_list.entries[<span class="number">0</span>].sequence_number = seq_num;
+<a href=#1271 id=1271 data-nosnippet>1271</a> expected_manifest_list.entries[<span class="number">0</span>].min_sequence_number = seq_num;
+<a href=#1272 id=1272 data-nosnippet>1272</a> <span class="macro">assert_eq!</span>(manifest_list, expected_manifest_list);
+<a href=#1273 id=1273 data-nosnippet>1273</a>
+<a href=#1274 id=1274 data-nosnippet>1274</a> temp_dir.close().unwrap();
+<a href=#1275 id=1275 data-nosnippet>1275</a> }
+<a href=#1276 id=1276 data-nosnippet>1276</a>
+<a href=#1277 id=1277 data-nosnippet>1277</a> <span class="attr">#[tokio::test]
+<a href=#1278 id=1278 data-nosnippet>1278</a> </span><span class="kw">async fn </span>test_manifest_list_writer_v1_as_v2() {
+<a href=#1279 id=1279 data-nosnippet>1279</a> <span class="kw">let </span>expected_manifest_list = ManifestList {
+<a href=#1280 id=1280 data-nosnippet>1280</a> entries: <span class="macro">vec!</span>[ManifestFile {
+<a href=#1281 id=1281 data-nosnippet>1281</a> manifest_path: <span class="string">"/opt/bitnami/spark/warehouse/db/table/metadata/10d28031-9739-484c-92db-cdf2975cead4-m0.avro"</span>.to_string(),
+<a href=#1282 id=1282 data-nosnippet>1282</a> manifest_length: <span class="number">5806</span>,
+<a href=#1283 id=1283 data-nosnippet>1283</a> partition_spec_id: <span class="number">1</span>,
+<a href=#1284 id=1284 data-nosnippet>1284</a> content: ManifestContentType::Data,
+<a href=#1285 id=1285 data-nosnippet>1285</a> sequence_number: <span class="number">0</span>,
+<a href=#1286 id=1286 data-nosnippet>1286</a> min_sequence_number: <span class="number">0</span>,
+<a href=#1287 id=1287 data-nosnippet>1287</a> added_snapshot_id: <span class="number">1646658105718557341</span>,
+<a href=#1288 id=1288 data-nosnippet>1288</a> added_files_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
+<a href=#1289 id=1289 data-nosnippet>1289</a> existing_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1290 id=1290 data-nosnippet>1290</a> deleted_files_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1291 id=1291 data-nosnippet>1291</a> added_rows_count: <span class="prelude-val">Some</span>(<span class="number">3</span>),
+<a href=#1292 id=1292 data-nosnippet>1292</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1293 id=1293 data-nosnippet>1293</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
+<a href=#1294 id=1294 data-nosnippet>1294</a> partitions: <span class="prelude-val">Some</span>(
+<a href=#1295 id=1295 data-nosnippet>1295</a> <span class="macro">vec!</span>[FieldSummary { contains_null: <span class="bool-val">false</span>, contains_nan: <span class="prelude-val">Some</span>(<span class="bool-val">false</span>), lower_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap()), upper_bound: <span class="prelude-val">Some</span>(Datum::long(<span class="number">1</span>).to_bytes().unwrap())}]
+<a href=#1296 id=1296 data-nosnippet>1296</a> ),
+<a href=#1297 id=1297 data-nosnippet>1297</a> key_metadata: <span class="prelude-val">None</span>,
+<a href=#1298 id=1298 data-nosnippet>1298</a> }]
+<a href=#1299 id=1299 data-nosnippet>1299</a> };
+<a href=#1300 id=1300 data-nosnippet>1300</a>
+<a href=#1301 id=1301 data-nosnippet>1301</a> <span class="kw">let </span>temp_dir = TempDir::new().unwrap();
+<a href=#1302 id=1302 data-nosnippet>1302</a> <span class="kw">let </span>path = temp_dir.path().join(<span class="string">"manifest_list_v1.avro"</span>);
+<a href=#1303 id=1303 data-nosnippet>1303</a> <span class="kw">let </span>io = FileIOBuilder::new_fs_io().build().unwrap();
+<a href=#1304 id=1304 data-nosnippet>1304</a> <span class="kw">let </span>output_file = io.new_output(path.to_str().unwrap()).unwrap();
+<a href=#1305 id=1305 data-nosnippet>1305</a>
+<a href=#1306 id=1306 data-nosnippet>1306</a> <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestListWriter::v2(output_file, <span class="number">1646658105718557341</span>, <span class="prelude-val">Some</span>(<span class="number">0</span>), <span class="number">1</span>);
+<a href=#1307 id=1307 data-nosnippet>1307</a> writer
+<a href=#1308 id=1308 data-nosnippet>1308</a> .add_manifests(expected_manifest_list.entries.clone().into_iter())
+<a href=#1309 id=1309 data-nosnippet>1309</a> .unwrap();
+<a href=#1310 id=1310 data-nosnippet>1310</a> writer.close().<span class="kw">await</span>.unwrap();
+<a href=#1311 id=1311 data-nosnippet>1311</a>
+<a href=#1312 id=1312 data-nosnippet>1312</a> <span class="kw">let </span>bs = fs::read(path).unwrap();
+<a href=#1313 id=1313 data-nosnippet>1313</a>
+<a href=#1314 id=1314 data-nosnippet>1314</a> <span class="kw">let </span>manifest_list =
+<a href=#1315 id=1315 data-nosnippet>1315</a> ManifestList::parse_with_version(<span class="kw-2">&</span>bs, <span class="kw">crate</span>::spec::FormatVersion::V2).unwrap();
+<a href=#1316 id=1316 data-nosnippet>1316</a> <span class="macro">assert_eq!</span>(manifest_list, expected_manifest_list);
+<a href=#1317 id=1317 data-nosnippet>1317</a>
+<a href=#1318 id=1318 data-nosnippet>1318</a> temp_dir.close().unwrap();
+<a href=#1319 id=1319 data-nosnippet>1319</a> }
+<a href=#1320 id=1320 data-nosnippet>1320</a>
+<a href=#1321 id=1321 data-nosnippet>1321</a> <span class="attr">#[tokio::test]
+<a href=#1322 id=1322 data-nosnippet>1322</a> </span><span class="kw">async fn </span>test_manifest_list_v2_deserializer_aliases() {
+<a href=#1323 id=1323 data-nosnippet>1323</a> <span class="comment">// reading avro manifest file generated by iceberg 1.4.0
+<a href=#1324 id=1324 data-nosnippet>1324</a> </span><span class="kw">let </span>avro_1_path = <span class="string">"testdata/manifests_lists/manifest-list-v2-1.avro"</span>;
+<a href=#1325 id=1325 data-nosnippet>1325</a> <span class="kw">let </span>bs_1 = fs::read(avro_1_path).unwrap();
+<a href=#1326 id=1326 data-nosnippet>1326</a> <span class="kw">let </span>avro_1_fields = read_avro_schema_fields_as_str(bs_1.clone()).<span class="kw">await</span>;
+<a href=#1327 id=1327 data-nosnippet>1327</a> <span class="macro">assert_eq!</span>(
+<a href=#1328 id=1328 data-nosnippet>1328</a> avro_1_fields,
+<a href=#1329 id=1329 data-nosnippet>1329</a> <span class="string">"manifest_path, manifest_length, partition_spec_id, content, sequence_number, min_sequence_number, added_snapshot_id, added_data_files_count, existing_data_files_count, deleted_data_files_count, added_rows_count, existing_rows_count, deleted_rows_count, partitions"
+<a href=#1330 id=1330 data-nosnippet>1330</a> </span>);
+<a href=#1331 id=1331 data-nosnippet>1331</a> <span class="comment">// reading avro manifest file generated by iceberg 1.5.0
+<a href=#1332 id=1332 data-nosnippet>1332</a> </span><span class="kw">let </span>avro_2_path = <span class="string">"testdata/manifests_lists/manifest-list-v2-2.avro"</span>;
+<a href=#1333 id=1333 data-nosnippet>1333</a> <span class="kw">let </span>bs_2 = fs::read(avro_2_path).unwrap();
+<a href=#1334 id=1334 data-nosnippet>1334</a> <span class="kw">let </span>avro_2_fields = read_avro_schema_fields_as_str(bs_2.clone()).<span class="kw">await</span>;
+<a href=#1335 id=1335 data-nosnippet>1335</a> <span class="macro">assert_eq!</span>(
+<a href=#1336 id=1336 data-nosnippet>1336</a> avro_2_fields,
+<a href=#1337 id=1337 data-nosnippet>1337</a> <span class="string">"manifest_path, manifest_length, partition_spec_id, content, sequence_number, min_sequence_number, added_snapshot_id, added_files_count, existing_files_count, deleted_files_count, added_rows_count, existing_rows_count, deleted_rows_count, partitions"
+<a href=#1338 id=1338 data-nosnippet>1338</a> </span>);
+<a href=#1339 id=1339 data-nosnippet>1339</a> <span class="comment">// deserializing both files to ManifestList struct
+<a href=#1340 id=1340 data-nosnippet>1340</a> </span><span class="kw">let </span>_manifest_list_1 =
+<a href=#1341 id=1341 data-nosnippet>1341</a> ManifestList::parse_with_version(<span class="kw-2">&</span>bs_1, <span class="kw">crate</span>::spec::FormatVersion::V2).unwrap();
+<a href=#1342 id=1342 data-nosnippet>1342</a> <span class="kw">let </span>_manifest_list_2 =
+<a href=#1343 id=1343 data-nosnippet>1343</a> ManifestList::parse_with_version(<span class="kw-2">&</span>bs_2, <span class="kw">crate</span>::spec::FormatVersion::V2).unwrap();
+<a href=#1344 id=1344 data-nosnippet>1344</a> }
+<a href=#1345 id=1345 data-nosnippet>1345</a>
+<a href=#1346 id=1346 data-nosnippet>1346</a> <span class="kw">async fn </span>read_avro_schema_fields_as_str(bs: Vec<u8>) -> String {
+<a href=#1347 id=1347 data-nosnippet>1347</a> <span class="kw">let </span>reader = Reader::new(<span class="kw-2">&</span>bs[..]).unwrap();
+<a href=#1348 id=1348 data-nosnippet>1348</a> <span class="kw">let </span>schema = reader.writer_schema();
+<a href=#1349 id=1349 data-nosnippet>1349</a> <span class="kw">let </span>fields: String = <span class="kw">match </span>schema {
+<a href=#1350 id=1350 data-nosnippet>1350</a> Schema::Record(record) => record
+<a href=#1351 id=1351 data-nosnippet>1351</a> .fields
+<a href=#1352 id=1352 data-nosnippet>1352</a> .iter()
+<a href=#1353 id=1353 data-nosnippet>1353</a> .map(|field| field.name.clone())
+<a href=#1354 id=1354 data-nosnippet>1354</a> .collect::<Vec<String>>()
+<a href=#1355 id=1355 data-nosnippet>1355</a> .join(<span class="string">", "</span>),
+<a href=#1356 id=1356 data-nosnippet>1356</a> <span class="kw">_ </span>=> <span class="string">""</span>.to_string(),
+<a href=#1357 id=1357 data-nosnippet>1357</a> };
+<a href=#1358 id=1358 data-nosnippet>1358</a> fields
+<a href=#1359 id=1359 data-nosnippet>1359</a> }
+<a href=#1360 id=1360 data-nosnippet>1360</a>}</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/api/src/iceberg/spec/snapshot_summary.rs.html b/api/src/iceberg/spec/snapshot_summary.rs.html
index 21412d19..6a16f9e6 100644
--- a/api/src/iceberg/spec/snapshot_summary.rs.html
+++ b/api/src/iceberg/spec/snapshot_summary.rs.html
@@ -849,7 +849,7 @@
<a href=#849 id=849 data-nosnippet>849</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
<a href=#850 id=850 data-nosnippet>850</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">50</span>),
<a href=#851 id=851 data-nosnippet>851</a> partitions: <span class="prelude-val">Some</span>(Vec::new()),
-<a href=#852 id=852 data-nosnippet>852</a> key_metadata: Vec::new(),
+<a href=#852 id=852 data-nosnippet>852</a> key_metadata: <span class="prelude-val">None</span>,
<a href=#853 id=853 data-nosnippet>853</a> };
<a href=#854 id=854 data-nosnippet>854</a>
<a href=#855 id=855 data-nosnippet>855</a> collector
@@ -973,7 +973,7 @@
<a href=#973 id=973 data-nosnippet>973</a> existing_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
<a href=#974 id=974 data-nosnippet>974</a> deleted_rows_count: <span class="prelude-val">Some</span>(<span class="number">0</span>),
<a href=#975 id=975 data-nosnippet>975</a> partitions: <span class="prelude-val">Some</span>(Vec::new()),
-<a href=#976 id=976 data-nosnippet>976</a> key_metadata: Vec::new(),
+<a href=#976 id=976 data-nosnippet>976</a> key_metadata: <span class="prelude-val">None</span>,
<a href=#977 id=977 data-nosnippet>977</a> });
<a href=#978 id=978 data-nosnippet>978</a>
<a href=#979 id=979 data-nosnippet>979</a> summary_four.add_file(