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/01/18 11:51:16 UTC

(iceberg-rust) branch gh-pages updated: deploy: 55cca03dd2b332249b53d347b438185c245e04f1

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 912b90f3 deploy: 55cca03dd2b332249b53d347b438185c245e04f1
912b90f3 is described below

commit 912b90f33d88e3880850c5a5c48629bab006f54d
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Sat Jan 18 11:51:11 2025 +0000

    deploy: 55cca03dd2b332249b53d347b438185c245e04f1
---
 api/help.html                                      |    2 +-
 api/iceberg/all.html                               |    2 +-
 api/iceberg/scan/index.html                        |    2 +-
 .../spec/constant.UNASSIGNED_SNAPSHOT_ID.html      |    2 +
 api/iceberg/spec/enum.DataContentType.html         |   10 +-
 api/iceberg/spec/enum.DataFileBuilderError.html    |    4 +-
 api/iceberg/spec/enum.DataFileFormat.html          |   14 +-
 api/iceberg/spec/enum.ManifestStatus.html          |    6 +-
 api/iceberg/spec/enum.Operation.html               |   12 +-
 api/iceberg/spec/enum.SnapshotRetention.html       |   12 +-
 api/iceberg/spec/fn.read_data_files_from_avro.html |    2 +-
 api/iceberg/spec/fn.write_data_files_to_avro.html  |    2 +-
 api/iceberg/spec/index.html                        |    4 +-
 .../manifest/struct.ManifestWriterBuilder.html     |   11 +
 api/iceberg/spec/sidebar-items.js                  |    2 +-
 .../snapshot/constant.UNASSIGNED_SNAPSHOT_ID.html  |   11 +
 api/iceberg/spec/struct.DataFile.html              |   38 +-
 api/iceberg/spec/struct.DataFileBuilder.html       |   38 +-
 api/iceberg/spec/struct.ManifestEntry.html         |   28 +-
 api/iceberg/spec/struct.ManifestMetadata.html      |   10 +-
 api/iceberg/spec/struct.ManifestWriter.html        |   28 +-
 ...iter.html => struct.ManifestWriterBuilder.html} |   16 +-
 api/iceberg/spec/struct.Snapshot.html              |   32 +-
 api/iceberg/spec/struct.SnapshotReference.html     |   14 +-
 api/iceberg/spec/struct.Summary.html               |   10 +-
 api/iceberg/spec/type.ManifestEntryRef.html        |    2 +-
 api/iceberg/spec/type.SnapshotRef.html             |    2 +-
 api/iceberg/transaction/index.html                 |    2 +-
 .../transaction/struct.FastAppendAction.html       |    6 +-
 .../transaction/struct.ReplaceSortOrderAction.html |    8 +-
 api/iceberg/transaction/struct.Transaction.html    |   16 +-
 api/search-index.js                                |    2 +-
 api/search.desc/iceberg/iceberg-desc-0-.js         |    2 +-
 api/settings.html                                  |    2 +-
 api/src/iceberg/io/object_cache.rs.html            |   62 +-
 api/src/iceberg/scan.rs.html                       |   42 +-
 api/src/iceberg/spec/manifest.rs.html              | 1278 +++++++++++++++++---
 api/src/iceberg/spec/snapshot.rs.html              |    4 +
 api/src/iceberg/transaction.rs.html                |   70 +-
 api/trait.impl/core/marker/trait.Freeze.js         |    2 +-
 api/trait.impl/core/marker/trait.Send.js           |    2 +-
 api/trait.impl/core/marker/trait.Sync.js           |    2 +-
 api/trait.impl/core/marker/trait.Unpin.js          |    2 +-
 .../core/panic/unwind_safe/trait.RefUnwindSafe.js  |    2 +-
 .../core/panic/unwind_safe/trait.UnwindSafe.js     |    2 +-
 45 files changed, 1375 insertions(+), 447 deletions(-)

diff --git a/api/help.html b/api/help.html
index b3855f23..f79e7b68 100644
--- a/api/help.html
+++ b/api/help.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Documentation for Rustdoc"><title>Help</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Regular-5 [...]
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Documentation for Rustdoc"><title>Help</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Regular-5 [...]
\ No newline at end of file
diff --git a/api/iceberg/all.html b/api/iceberg/all.html
index 8b03b711..b6558594 100644
--- a/api/iceberg/all.html
+++ b/api/iceberg/all.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d [...]
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d [...]
\ No newline at end of file
diff --git a/api/iceberg/scan/index.html b/api/iceberg/scan/index.html
index f0cd280b..1412b08d 100644
--- a/api/iceberg/scan/index.html
+++ b/api/iceberg/scan/index.html
@@ -1,2 +1,2 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Table scan api."><title>iceberg::scan - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Reg [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Table scan api."><title>iceberg::scan - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Reg [...]
 </div></details><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.FileScanTask.html" title="struct iceberg::scan::FileScanTask">FileScanTask</a></div><div class="desc docblock-short">A task to scan part of file.</div></li><li><div class="item-name"><a class="struct" href="struct.TableScan.html" title="struct iceberg::scan::TableScan">TableScan</a></div><div class="des [...]
\ No newline at end of file
diff --git a/api/iceberg/spec/constant.UNASSIGNED_SNAPSHOT_ID.html b/api/iceberg/spec/constant.UNASSIGNED_SNAPSHOT_ID.html
new file mode 100644
index 00000000..82e48325
--- /dev/null
+++ b/api/iceberg/spec/constant.UNASSIGNED_SNAPSHOT_ID.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Placeholder for snapshot ID. The field with this value must be replaced with the actual snapshot ID before it is committed."><title>UNASSIGNED_SNAPSHOT_ID in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSeri [...]
+</div></details></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg/spec/enum.DataContentType.html b/api/iceberg/spec/enum.DataContentType.html
index 53d784ba..6332399c 100644
--- a/api/iceberg/spec/enum.DataContentType.html
+++ b/api/iceberg/spec/enum.DataContentType.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Type of content stored by the data file: data, equality deletes, or position deletes (all v1 files are data files)"><title>DataContentType in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Type of content stored by the data file: data, equality deletes, or position deletes (all v1 files are data files)"><title>DataContentType in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98 [...]
     Data = 0,
     PositionDeletes = 1,
     EqualityDeletes = 2,
@@ -7,11 +7,11 @@ position deletes (all v1 files are data files)</p>
 </div></details><h2 id="variants" class="variants section-header">Variants<a href="#variants" class="anchor">§</a></h2><div class="variants"><section id="variant.Data" class="variant"><a href="#variant.Data" class="anchor">§</a><h3 class="code-header">Data = 0</h3></section><div class="docblock"><p>value: 0</p>
 </div><section id="variant.PositionDeletes" class="variant"><a href="#variant.PositionDeletes" class="anchor">§</a><h3 class="code-header">PositionDeletes = 1</h3></section><div class="docblock"><p>value: 1</p>
 </div><section id="variant.EqualityDeletes" class="variant"><a href="#variant.EqualityDeletes" class="anchor">§</a><h3 class="code-header">EqualityDeletes = 2</h3></section><div class="docblock"><p>value: 2</p>
-</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-DataContentType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1260">source</a><a href="#impl-Clone-for-DataContentType" class="anchor">§</a><h3 class="code-header">impl <a class="trait" [...]
-    __D: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Parti [...]
+</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-DataContentType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1465">source</a><a href="#impl-Clone-for-DataContentType" class="anchor">§</a><h3 class="code-header">impl <a class="trait" [...]
+    __D: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Parti [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-DataContentType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1260">source</a><a href="#impl-Serialize-for-DataContentType" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html" title=" [...]
-    __S: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-TryFrom%3Ci32%3E-for-DataCo [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-DataContentType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1465">source</a><a href="#impl-Serialize-for-DataContentType" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html" title=" [...]
+    __S: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-TryFrom%3Ci32%3E-for-DataCo [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/enum.DataFileBuilderError.html b/api/iceberg/spec/enum.DataFileBuilderError.html
index 52d438c8..90b41cf2 100644
--- a/api/iceberg/spec/enum.DataFileBuilderError.html
+++ b/api/iceberg/spec/enum.DataFileBuilderError.html
@@ -1,10 +1,10 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Error type for DataFileBuilder"><title>DataFileBuilderError in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Error type for DataFileBuilder"><title>DataFileBuilderError in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8 [...]
     UninitializedField(&amp;'static <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>),
     ValidationError(<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Error type for DataFileBuilder</p>
 </div></details><h2 id="variants" class="variants section-header">Variants (Non-exhaustive)<a href="#variants" class="anchor">§</a></h2><details class="toggle non-exhaustive"><summary class="hideme"><span>This enum is marked as non-exhaustive</span></summary><div class="docblock">Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.</di [...]
 </div><section id="variant.ValidationError" class="variant"><a href="#variant.ValidationError" class="anchor">§</a><h3 class="code-header">ValidationError(<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</h3></section><div class="docblock"><p>Custom validation error</p>
-</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-DataFileBuilderError" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><a href="#impl-Debug-for-DataFileBuilderError" class="anchor">§</a><h3 class="code-header">impl <a cla [...]
+</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-DataFileBuilderError" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><a href="#impl-Debug-for-DataFileBuilderError" class="anchor">§</a><h3 class="code-header">impl <a cla [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/error/trait.Error.html" title="trait core::error::Error">Error</a> + 'static,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.as_error_source" class="method trait-impl"><a href="#method.as_error_source" class="anchor">§</a><h4 class="code-header">fn <a class="fn">as_error_source</a>(&amp;self) -&gt; &amp;(dyn <a class="trait" href="https://doc [...]
 to benefit from Rust’s automatic dereferencing of method
diff --git a/api/iceberg/spec/enum.DataFileFormat.html b/api/iceberg/spec/enum.DataFileFormat.html
index b3a998f3..319a334a 100644
--- a/api/iceberg/spec/enum.DataFileFormat.html
+++ b/api/iceberg/spec/enum.DataFileFormat.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Format of this data."><title>DataFileFormat in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388. [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Format of this data."><title>DataFileFormat in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388. [...]
     Avro,
     Orc,
     Parquet,
@@ -6,14 +6,14 @@
 </div></details><h2 id="variants" class="variants section-header">Variants<a href="#variants" class="anchor">§</a></h2><div class="variants"><section id="variant.Avro" class="variant"><a href="#variant.Avro" class="anchor">§</a><h3 class="code-header">Avro</h3></section><div class="docblock"><p>Avro file format: <a href="https://avro.apache.org/">https://avro.apache.org/</a></p>
 </div><section id="variant.Orc" class="variant"><a href="#variant.Orc" class="anchor">§</a><h3 class="code-header">Orc</h3></section><div class="docblock"><p>Orc file format: <a href="https://orc.apache.org/">https://orc.apache.org/</a></p>
 </div><section id="variant.Parquet" class="variant"><a href="#variant.Parquet" class="anchor">§</a><h3 class="code-header">Parquet</h3></section><div class="docblock"><p>Parquet file format: <a href="https://parquet.apache.org/">https://parquet.apache.org/</a></p>
-</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-DataFileFormat" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1287">source</a><a href="#impl-Clone-for-DataFileFormat" class="anchor">§</a><h3 class="code-header">impl <a class="trait" h [...]
+</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-DataFileFormat" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1492">source</a><a href="#impl-Clone-for-DataFileFormat" class="anchor">§</a><h3 class="code-header">impl <a class="trait" h [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/str/traits/trait.FromStr.html" title="trait core::str::traits::FromStr">FromStr</a>,
-    &lt;Self as <a class="trait" href="https://doc.rust-lang.org/nightly/core/str/traits/trait.FromStr.html" title="trait core::str::traits::FromStr">FromStr</a>&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/str/traits/trait.FromStr.html#associatedtype.Err" title="type core::str::traits::FromStr::Err">Err</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html" title="trait core::fmt::Display">Display</a>,</div></h3></sectio [...]
-    __D: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Displ [...]
+    &lt;Self as <a class="trait" href="https://doc.rust-lang.org/nightly/core/str/traits/trait.FromStr.html" title="trait core::str::traits::FromStr">FromStr</a>&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/str/traits/trait.FromStr.html#associatedtype.Err" title="type core::str::traits::FromStr::Err">Err</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html" title="trait core::fmt::Display">Display</a>,</div></h3></sectio [...]
+    __D: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Displ [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-DataFileFormat" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1287">source</a><a href="#impl-Serialize-for-DataFileFormat" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html" title="tr [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html" title="trait core::fmt::Display">Display</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.serialize" class="method trait-impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1287">source</a><a href="#method.serialize" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/ [...]
-    __S: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><section id="impl-Copy-for-DataFileFormat" class="impl"><a class="src rightside" href="../../src/iceber [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-DataFileFormat" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1492">source</a><a href="#impl-Serialize-for-DataFileFormat" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html" title="tr [...]
+    Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html" title="trait core::fmt::Display">Display</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.serialize" class="method trait-impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1492">source</a><a href="#method.serialize" class="anchor">§</a><h4 class="code-header">fn <a href="https://docs.rs/ [...]
+    __S: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><section id="impl-Copy-for-DataFileFormat" class="impl"><a class="src rightside" href="../../src/iceber [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/enum.ManifestStatus.html b/api/iceberg/spec/enum.ManifestStatus.html
index 4e8634a9..fb448b1e 100644
--- a/api/iceberg/spec/enum.ManifestStatus.html
+++ b/api/iceberg/spec/enum.ManifestStatus.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Used to track additions and deletions in ManifestEntry."><title>ManifestStatus in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Used to track additions and deletions in ManifestEntry."><title>ManifestStatus in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff [...]
     Existing = 0,
     Added = 1,
     Deleted = 2,
@@ -7,9 +7,9 @@
 </div><section id="variant.Added" class="variant"><a href="#variant.Added" class="anchor">§</a><h3 class="code-header">Added = 1</h3></section><div class="docblock"><p>Value: 1</p>
 </div><section id="variant.Deleted" class="variant"><a href="#variant.Deleted" class="anchor">§</a><h3 class="code-header">Deleted = 2</h3></section><div class="docblock"><p>Value: 2</p>
 <p>Deletes are informational only and not used in scans.</p>
-</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-ManifestStatus" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#983">source</a><a href="#impl-Clone-for-ManifestStatus" class="anchor">§</a><h3 class="code-header">impl <a class="trait" hr [...]
+</div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-ManifestStatus" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1188">source</a><a href="#impl-Clone-for-ManifestStatus" class="anchor">§</a><h3 class="code-header">impl <a class="trait" h [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-TryFrom%3Ci32%3E-for-ManifestStatus" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#995-1009">source</a><a href="#impl-TryFrom%3Ci32%3E-for-ManifestStatus" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait. [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-TryFrom%3Ci32%3E-for-ManifestStatus" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1200-1214">source</a><a href="#impl-TryFrom%3Ci32%3E-for-ManifestStatus" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/enum.Operation.html b/api/iceberg/spec/enum.Operation.html
index 4fc600b6..e4c7221d 100644
--- a/api/iceberg/spec/enum.Operation.html
+++ b/api/iceberg/spec/enum.Operation.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The operation field is used by some operations, like snapshot expiration, to skip processing certain snapshots."><title>Operation in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac52 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The operation field is used by some operations, like snapshot expiration, to skip processing certain snapshots."><title>Operation in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac52 [...]
     Append,
     Replace,
     Overwrite,
@@ -9,12 +9,12 @@
 i.e., compaction, changing the data file format, or relocating data files.</p>
 </div><section id="variant.Overwrite" class="variant"><a href="#variant.Overwrite" class="anchor">§</a><h3 class="code-header">Overwrite</h3></section><div class="docblock"><p>Data and delete files were added and removed in a logical overwrite operation.</p>
 </div><section id="variant.Delete" class="variant"><a href="#variant.Delete" class="anchor">§</a><h3 class="code-header">Delete</h3></section><div class="docblock"><p>Data files were removed and their contents logically deleted and/or delete files were added to delete rows.</p>
-</div></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-Operation" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#55-65">source</a><a href="#impl-Operation" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Operation.html" title="enum iceberg::spec::O [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Operation" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#40">source</a><a href="#impl-Clone-for-Operation" class="anchor">§</a><h3 class="code-header">impl <a c [...]
-    __D: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Parti [...]
+</div></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-Operation" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#57-67">source</a><a href="#impl-Operation" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Operation.html" title="enum iceberg::spec::O [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Operation" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#42">source</a><a href="#impl-Clone-for-Operation" class="anchor">§</a><h3 class="code-header">impl <a c [...]
+    __D: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Parti [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-Operation" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#40">source</a><a href="#impl-Serialize-for-Operation" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html" title="trait serde::s [...]
-    __S: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><section id="impl-Eq-for-Operation" class="impl"><a class="src rightside" href="../../src/iceberg/spec/ [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-Operation" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#42">source</a><a href="#impl-Serialize-for-Operation" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html" title="trait serde::s [...]
+    __S: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><section id="impl-Eq-for-Operation" class="impl"><a class="src rightside" href="../../src/iceberg/spec/ [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/enum.SnapshotRetention.html b/api/iceberg/spec/enum.SnapshotRetention.html
index 31d8089f..24f50968 100644
--- a/api/iceberg/spec/enum.SnapshotRetention.html
+++ b/api/iceberg/spec/enum.SnapshotRetention.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The snapshot expiration procedure removes snapshots from table metadata and applies the table’s retention policy."><title>SnapshotRetention in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f9 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The snapshot expiration procedure removes snapshots from table metadata and applies the table’s retention policy."><title>SnapshotRetention in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f9 [...]
     Branch {
         min_snapshots_to_keep: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>&gt;,
         max_snapshot_age_ms: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>&gt;,
@@ -19,16 +19,16 @@ Defaults to table property history.expire.max-ref-age-ms. The main branch never
 </div></div></div><section id="variant.Tag" class="variant"><a href="#variant.Tag" class="anchor">§</a><h3 class="code-header">Tag</h3></section><div class="docblock"><p>Tags are labels for individual snapshots.</p>
 </div><div class="sub-variant" id="variant.Tag.fields"><h4>Fields</h4><div class="sub-variant-field"><span id="variant.Tag.field.max_ref_age_ms" class="section-header"><a href="#variant.Tag.field.max_ref_age_ms" class="anchor field">§</a><code>max_ref_age_ms: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>&gt;</ [...]
 Defaults to table property history.expire.max-ref-age-ms. The main branch never expires.</p>
-</div></div></div></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-SnapshotRetention" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#387-400">source</a><a href="#impl-SnapshotRetention" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.SnapshotRetent [...]
+</div></div></div></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-SnapshotRetention" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#389-402">source</a><a href="#impl-SnapshotRetention" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.SnapshotRetent [...]
     min_snapshots_to_keep: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>&gt;,
     max_snapshot_age_ms: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>&gt;,
     max_ref_age_ms: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>&gt;,
 ) -&gt; Self</h4></section></summary><div class="docblock"><p>Create a new branch retention policy</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-SnapshotRetention" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#356">source</a><a href="#impl-Clone-for-SnapshotRetention" class="anchor">§</a><h3 class="code- [...]
-    __D: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Parti [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-SnapshotRetention" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#358">source</a><a href="#impl-Clone-for-SnapshotRetention" class="anchor">§</a><h3 class="code- [...]
+    __D: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Parti [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-SnapshotRetention" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#356">source</a><a href="#impl-Serialize-for-SnapshotRetention" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html" titl [...]
-    __S: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><section id="impl-Eq-for-SnapshotRetention" class="impl"><a class="src rightside" href="../../src/icebe [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-SnapshotRetention" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#358">source</a><a href="#impl-Serialize-for-SnapshotRetention" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html" titl [...]
+    __S: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><section id="impl-Eq-for-SnapshotRetention" class="impl"><a class="src rightside" href="../../src/icebe [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/fn.read_data_files_from_avro.html b/api/iceberg/spec/fn.read_data_files_from_avro.html
index cc34beda..a6bfd611 100644
--- a/api/iceberg/spec/fn.read_data_files_from_avro.html
+++ b/api/iceberg/spec/fn.read_data_files_from_avro.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Parse data files from avro bytes."><title>read_data_files_from_avro in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans- [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Parse data files from avro bytes."><title>read_data_files_from_avro in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans- [...]
     reader: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut R</a>,
     schema: &amp;<a class="struct" href="struct.Schema.html" title="struct iceberg::spec::Schema">Schema</a>,
     partition_type: &amp;<a class="struct" href="struct.StructType.html" title="struct iceberg::spec::StructType">StructType</a>,
diff --git a/api/iceberg/spec/fn.write_data_files_to_avro.html b/api/iceberg/spec/fn.write_data_files_to_avro.html
index ceb054a8..50ca7193 100644
--- a/api/iceberg/spec/fn.write_data_files_to_avro.html
+++ b/api/iceberg/spec/fn.write_data_files_to_avro.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Convert data files to avro bytes and write to writer. Return the bytes written."><title>write_data_files_to_avro in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,Fira [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Convert data files to avro bytes and write to writer. Return the bytes written."><title>write_data_files_to_avro in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,Fira [...]
     writer: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut W</a>,
     data_files: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a class="struct" href="struct.DataFile.html" title="struct iceberg::spec::DataFile">DataFile</a>&gt;,
     partition_type: &amp;<a class="struct" href="struct.StructType.html" title="struct iceberg::spec::StructType">StructType</a>,
diff --git a/api/iceberg/spec/index.html b/api/iceberg/spec/index.html
index aafc042b..5f43b7de 100644
--- a/api/iceberg/spec/index.html
+++ b/api/iceberg/spec/index.html
@@ -4,7 +4,7 @@ guaranteed to be correct when used.</div></li><li><div class="item-name"><a clas
 Elements can be either optional or required. Element types may be any type.</div></li><li><div class="item-name"><a class="struct" href="struct.Manifest.html" title="struct iceberg::spec::Manifest">Manifest</a></div><div class="desc docblock-short">A manifest contains metadata and a list of entries.</div></li><li><div class="item-name"><a class="struct" href="struct.ManifestEntry.html" title="struct iceberg::spec::ManifestEntry">ManifestEntry</a></div><div class="desc docblock-short">A m [...]
 files, along with each file’s partition data tuple, metrics, and tracking
 information.</div></li><li><div class="item-name"><a class="struct" href="struct.ManifestFile.html" title="struct iceberg::spec::ManifestFile">ManifestFile</a></div><div class="desc docblock-short">Entry in a manifest list.</div></li><li><div class="item-name"><a class="struct" href="struct.ManifestList.html" title="struct iceberg::spec::ManifestList">ManifestList</a></div><div class="desc docblock-short">Snapshots are embedded in table metadata, but the list of manifests for a
-snapshot are stored in a separate manifest list file.</div></li><li><div class="item-name"><a class="struct" href="struct.ManifestListWriter.html" title="struct iceberg::spec::ManifestListWriter">ManifestListWriter</a></div><div class="desc docblock-short">A manifest list writer.</div></li><li><div class="item-name"><a class="struct" href="struct.ManifestMetadata.html" title="struct iceberg::spec::ManifestMetadata">ManifestMetadata</a></div><div class="desc docblock-short">Meta data of a [...]
+snapshot are stored in a separate manifest list file.</div></li><li><div class="item-name"><a class="struct" href="struct.ManifestListWriter.html" title="struct iceberg::spec::ManifestListWriter">ManifestListWriter</a></div><div class="desc docblock-short">A manifest list writer.</div></li><li><div class="item-name"><a class="struct" href="struct.ManifestMetadata.html" title="struct iceberg::spec::ManifestMetadata">ManifestMetadata</a></div><div class="desc docblock-short">Meta data of a [...]
 It used in Literal::Map, to make it hashable, the order of key-value pairs is stored in a separate vector
 so that we can hash the map in a deterministic way. But it also means that the order of key-value pairs is matter
 for the hash value.</div></li><li><div class="item-name"><a class="struct" href="struct.MapType.html" title="struct iceberg::spec::MapType">MapType</a></div><div class="desc docblock-short">A map is a collection of key-value pairs with a key type and a value type.
@@ -21,5 +21,5 @@ They are used to transport schema information as part of the REST specification.
 The main difference to <a href="struct.PartitionSpec.html" title="struct iceberg::spec::PartitionSpec"><code>PartitionSpec</code></a> is that the field ids are optional.</div></li><li><div class="item-name"><a class="struct" href="struct.UnboundPartitionSpecBuilder.html" title="struct iceberg::spec::UnboundPartitionSpecBuilder">UnboundPartitionSpecBuilder</a></div><div class="desc docblock-short">Create a new UnboundPartitionSpec</div></li><li><div class="item-name"><a class="struct" hre [...]
 position deletes (all v1 files are data files)</div></li><li><div class="item-name"><a class="enum" href="enum.DataFileBuilderError.html" title="enum iceberg::spec::DataFileBuilderError">DataFileBuilderError</a></div><div class="desc docblock-short">Error type for DataFileBuilder</div></li><li><div class="item-name"><a class="enum" href="enum.DataFileFormat.html" title="enum iceberg::spec::DataFileFormat">DataFileFormat</a></div><div class="desc docblock-short">Format of this data.</div> [...]
 in addition to transforming data values.</div></li><li><div class="item-name"><a class="enum" href="enum.Type.html" title="enum iceberg::spec::Type">Type</a></div><div class="desc docblock-short">All data types are either primitives or nested types, which are maps, lists, or structs.</div></li><li><div class="item-name"><a class="enum" href="enum.ViewFormatVersion.html" title="enum iceberg::spec::ViewFormatVersion">ViewFormatVersion</a></div><div class="desc docblock-short">Iceberg forma [...]
-Representations are documented ways to express a view definition.</div></li></ul><h2 id="constants" class="section-header">Constants<a href="#constants" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="constant" href="constant.MAIN_BRANCH.html" title="constant iceberg::spec::MAIN_BRANCH">MAIN_BRANCH</a></div><div class="desc docblock-short">The ref name of the main branch of the table.</div></li><li><div class="item-name"><a class="constant" href="cons [...]
+Representations are documented ways to express a view definition.</div></li></ul><h2 id="constants" class="section-header">Constants<a href="#constants" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="constant" href="constant.MAIN_BRANCH.html" title="constant iceberg::spec::MAIN_BRANCH">MAIN_BRANCH</a></div><div class="desc docblock-short">The ref name of the main branch of the table.</div></li><li><div class="item-name"><a class="constant" href="cons [...]
 Return the bytes written.</div></li></ul><h2 id="types" class="section-header">Type Aliases<a href="#types" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="type" href="type.ManifestEntryRef.html" title="type iceberg::spec::ManifestEntryRef">ManifestEntryRef</a></div><div class="desc docblock-short">Reference to <a href="struct.ManifestEntry.html" title="struct iceberg::spec::ManifestEntry"><code>ManifestEntry</code></a>.</div></li><li><div class="item [...]
\ No newline at end of file
diff --git a/api/iceberg/spec/manifest/struct.ManifestWriterBuilder.html b/api/iceberg/spec/manifest/struct.ManifestWriterBuilder.html
new file mode 100644
index 00000000..e30bc942
--- /dev/null
+++ b/api/iceberg/spec/manifest/struct.ManifestWriterBuilder.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="refresh" content="0;URL=../../../iceberg/spec/struct.ManifestWriterBuilder.html">
+    <title>Redirection</title>
+</head>
+<body>
+    <p>Redirecting to <a href="../../../iceberg/spec/struct.ManifestWriterBuilder.html">../../../iceberg/spec/struct.ManifestWriterBuilder.html</a>...</p>
+    <script>location.replace("../../../iceberg/spec/struct.ManifestWriterBuilder.html" + location.search + location.hash);</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/api/iceberg/spec/sidebar-items.js b/api/iceberg/spec/sidebar-items.js
index 3bac044d..835d10fe 100644
--- a/api/iceberg/spec/sidebar-items.js
+++ b/api/iceberg/spec/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = {"constant":["MAIN_BRANCH","PROPERTY_CURRENT_SCHEMA","PROPERTY_CURRENT_SNAPSHOT_ID","PROPERTY_CURRENT_SNAPSHOT_SUMMARY","PROPERTY_CURRENT_SNAPSHOT_TIMESTAMP","PROPERTY_DEFAULT_PARTITION_SPEC","PROPERTY_DEFAULT_SORT_ORDER","PROPERTY_FORMAT_VERSION","PROPERTY_METADATA_PREVIOUS_VERSIONS_MAX","PROPERTY_METADATA_PREVIOUS_VERSIONS_MAX_DEFAULT","PROPERTY_SNAPSHOT_COUNT","PROPERTY_UUID","RESERVED_PROPERTIES","UNASSIGNED_SEQUENCE_NUMBER"],"enum":["DataContentType","DataFile [...]
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"constant":["MAIN_BRANCH","PROPERTY_CURRENT_SCHEMA","PROPERTY_CURRENT_SNAPSHOT_ID","PROPERTY_CURRENT_SNAPSHOT_SUMMARY","PROPERTY_CURRENT_SNAPSHOT_TIMESTAMP","PROPERTY_DEFAULT_PARTITION_SPEC","PROPERTY_DEFAULT_SORT_ORDER","PROPERTY_FORMAT_VERSION","PROPERTY_METADATA_PREVIOUS_VERSIONS_MAX","PROPERTY_METADATA_PREVIOUS_VERSIONS_MAX_DEFAULT","PROPERTY_SNAPSHOT_COUNT","PROPERTY_UUID","RESERVED_PROPERTIES","UNASSIGNED_SEQUENCE_NUMBER","UNASSIGNED_SNAPSHOT_ID"],"enum":["D [...]
\ No newline at end of file
diff --git a/api/iceberg/spec/snapshot/constant.UNASSIGNED_SNAPSHOT_ID.html b/api/iceberg/spec/snapshot/constant.UNASSIGNED_SNAPSHOT_ID.html
new file mode 100644
index 00000000..07223e2a
--- /dev/null
+++ b/api/iceberg/spec/snapshot/constant.UNASSIGNED_SNAPSHOT_ID.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="refresh" content="0;URL=../../../iceberg/spec/constant.UNASSIGNED_SNAPSHOT_ID.html">
+    <title>Redirection</title>
+</head>
+<body>
+    <p>Redirecting to <a href="../../../iceberg/spec/constant.UNASSIGNED_SNAPSHOT_ID.html">../../../iceberg/spec/constant.UNASSIGNED_SNAPSHOT_ID.html</a>...</p>
+    <script>location.replace("../../../iceberg/spec/constant.UNASSIGNED_SNAPSHOT_ID.html" + location.search + location.hash);</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/api/iceberg/spec/struct.DataFile.html b/api/iceberg/spec/struct.DataFile.html
index f96374c6..05abfe3a 100644
--- a/api/iceberg/spec/struct.DataFile.html
+++ b/api/iceberg/spec/struct.DataFile.html
@@ -1,40 +1,40 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Data file carries data file path, partition tuple, metrics, …"><title>DataFile in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff [...]
-</div></details><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-DataFile" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1132-1214">source</a><a href="#impl-DataFile" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.DataFile.html" title="struct icebe [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.file_path" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1138-1140">source</a><h4 class="code-header">pub fn <a href="#method.file_path" class="fn">file_path</a>(&amp;self) -&gt; &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a></h4></section></summary><div class="docblock"><p>Get the file path as full URI with FS  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.file_format" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1142-1144">source</a><h4 class="code-header">pub fn <a href="#method.file_format" class="fn">file_format</a>(&amp;self) -&gt; <a class="enum" href="enum.DataFileFormat.html" title="enum iceberg::spec::DataFileFormat">DataFileFormat</a></h4></section></summary><div class="docblock"><p>Get the file format  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.partition" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1146-1148">source</a><h4 class="code-header">pub fn <a href="#method.partition" class="fn">partition</a>(&amp;self) -&gt; &amp;<a class="struct" href="struct.Struct.html" title="struct iceberg::spec::Struct">Struct</a></h4></section></summary><div class="docblock"><p>Get the partition values of the file.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.record_count" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1150-1152">source</a><h4 class="code-header">pub fn <a href="#method.record_count" class="fn">record_count</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Get the record count in the data f [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.file_size_in_bytes" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1154-1156">source</a><h4 class="code-header">pub fn <a href="#method.file_size_in_bytes" class="fn">file_size_in_bytes</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Get the file siz [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.column_sizes" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1161-1163">source</a><h4 class="code-header">pub fn <a href="#method.column_sizes" class="fn">column_sizes</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt; [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Data file carries data file path, partition tuple, metrics, …"><title>DataFile in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff [...]
+</div></details><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-DataFile" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1337-1419">source</a><a href="#impl-DataFile" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.DataFile.html" title="struct icebe [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.file_path" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1343-1345">source</a><h4 class="code-header">pub fn <a href="#method.file_path" class="fn">file_path</a>(&amp;self) -&gt; &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a></h4></section></summary><div class="docblock"><p>Get the file path as full URI with FS  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.file_format" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1347-1349">source</a><h4 class="code-header">pub fn <a href="#method.file_format" class="fn">file_format</a>(&amp;self) -&gt; <a class="enum" href="enum.DataFileFormat.html" title="enum iceberg::spec::DataFileFormat">DataFileFormat</a></h4></section></summary><div class="docblock"><p>Get the file format  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.partition" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1351-1353">source</a><h4 class="code-header">pub fn <a href="#method.partition" class="fn">partition</a>(&amp;self) -&gt; &amp;<a class="struct" href="struct.Struct.html" title="struct iceberg::spec::Struct">Struct</a></h4></section></summary><div class="docblock"><p>Get the partition values of the file.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.record_count" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1355-1357">source</a><h4 class="code-header">pub fn <a href="#method.record_count" class="fn">record_count</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Get the record count in the data f [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.file_size_in_bytes" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1359-1361">source</a><h4 class="code-header">pub fn <a href="#method.file_size_in_bytes" class="fn">file_size_in_bytes</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Get the file siz [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.column_sizes" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1366-1368">source</a><h4 class="code-header">pub fn <a href="#method.column_sizes" class="fn">column_sizes</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt; [...]
 Map from column id to the total size on disk of all regions that
 store the column. Does not include bytes necessary to read other
 columns, like footers. Null for row-oriented formats (Avro)</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.value_counts" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1167-1169">source</a><h4 class="code-header">pub fn <a href="#method.value_counts" class="fn">value_counts</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt; [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.value_counts" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1372-1374">source</a><h4 class="code-header">pub fn <a href="#method.value_counts" class="fn">value_counts</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt; [...]
 Map from column id to number of values in the column (including null
 and NaN values)</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.null_value_counts" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1172-1174">source</a><h4 class="code-header">pub fn <a href="#method.null_value_counts" class="fn">null_value_counts</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap"> [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.null_value_counts" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1377-1379">source</a><h4 class="code-header">pub fn <a href="#method.null_value_counts" class="fn">null_value_counts</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap"> [...]
 Map from column id to number of null values in the column</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.nan_value_counts" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1177-1179">source</a><h4 class="code-header">pub fn <a href="#method.nan_value_counts" class="fn">nan_value_counts</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">Has [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.nan_value_counts" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1382-1384">source</a><h4 class="code-header">pub fn <a href="#method.nan_value_counts" class="fn">nan_value_counts</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">Has [...]
 Map from column id to number of NaN values in the column</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.lower_bounds" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1182-1184">source</a><h4 class="code-header">pub fn <a href="#method.lower_bounds" class="fn">lower_bounds</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt; [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.lower_bounds" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1387-1389">source</a><h4 class="code-header">pub fn <a href="#method.lower_bounds" class="fn">lower_bounds</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt; [...]
 Map from column id to lower bound in the column serialized as binary.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.upper_bounds" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1187-1189">source</a><h4 class="code-header">pub fn <a href="#method.upper_bounds" class="fn">upper_bounds</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt; [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.upper_bounds" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1392-1394">source</a><h4 class="code-header">pub fn <a href="#method.upper_bounds" class="fn">upper_bounds</a>(&amp;self) -&gt; &amp;<a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt; [...]
 Map from column id to upper bound in the column serialized as binary.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.key_metadata" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1191-1193">source</a><h4 class="code-header">pub fn <a href="#method.key_metadata" class="fn">key_metadata</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;[<a class="primitive" href="https://d [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.split_offsets" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1196-1198">source</a><h4 class="code-header">pub fn <a href="#method.split_offsets" class="fn">split_offsets</a>(&amp;self) -&gt; &amp;[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>]</h4></section></summary><div class="docblock"><p>Get the split offsets of [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.key_metadata" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1396-1398">source</a><h4 class="code-header">pub fn <a href="#method.key_metadata" class="fn">key_metadata</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;[<a class="primitive" href="https://d [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.split_offsets" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1401-1403">source</a><h4 class="code-header">pub fn <a href="#method.split_offsets" class="fn">split_offsets</a>(&amp;self) -&gt; &amp;[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>]</h4></section></summary><div class="docblock"><p>Get the split offsets of [...]
 For example, all row group offsets in a Parquet file.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.equality_ids" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1202-1204">source</a><h4 class="code-header">pub fn <a href="#method.equality_ids" class="fn">equality_ids</a>(&amp;self) -&gt; &amp;[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>]</h4></section></summary><div class="docblock"><p>Get the equality ids of the [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.equality_ids" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1407-1409">source</a><h4 class="code-header">pub fn <a href="#method.equality_ids" class="fn">equality_ids</a>(&amp;self) -&gt; &amp;[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>]</h4></section></summary><div class="docblock"><p>Get the equality ids of the [...]
 Field ids used to determine row equality in equality delete files.
 null when content is not EqualityDeletes.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.sort_order_id" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1211-1213">source</a><h4 class="code-header">pub fn <a href="#method.sort_order_id" class="fn">sort_order_id</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc. [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.sort_order_id" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1416-1418">source</a><h4 class="code-header">pub fn <a href="#method.sort_order_id" class="fn">sort_order_id</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc. [...]
 Only data files and equality delete files should be
 written with a non-null order id. Position deletes are required to be
 sorted by file and position, not a table order, and should set sort
 order id to null. Readers must ignore sort order id for position
 delete files.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-DataFile" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><a href="#impl-Clone-for-DataFile" class="anchor">§</a><h3 class="code-header">impl <a c [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-DataFile" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><a href="#impl-Clone-for-DataFile" class="anchor">§</a><h3 class="code-header">impl <a c [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-DataFile" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><a href="#impl-Eq-for-DataFile" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.DataFile.html" title="struc [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-DataFile" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><a href="#impl-Eq-for-DataFile" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.DataFile.html" title="struc [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/struct.DataFileBuilder.html b/api/iceberg/spec/struct.DataFileBuilder.html
index 1080c0ce..332a6baf 100644
--- a/api/iceberg/spec/struct.DataFileBuilder.html
+++ b/api/iceberg/spec/struct.DataFileBuilder.html
@@ -1,38 +1,38 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Builder for `DataFile`."><title>DataFileBuilder in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d [...]
-</div></details><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-DataFileBuilder" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><a href="#impl-DataFileBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.DataFileBuilder.html" tit [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Builder for `DataFile`."><title>DataFileBuilder in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d [...]
+</div></details><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-DataFileBuilder" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><a href="#impl-DataFileBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.DataFileBuilder.html" tit [...]
 <p>Type of content stored by the data file: data, equality deletes,
 or position deletes (all v1 files are data files)</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.file_path" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.file_path" class="fn">file_path</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>) -&gt; <a class="primitive" href="https://doc. [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.file_path" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.file_path" class="fn">file_path</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>) -&gt; <a class="primitive" href="https://doc. [...]
 <p>Full URI for the file with FS scheme</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.file_format" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.file_format" class="fn">file_format</a>(&amp;mut self, value: <a class="enum" href="enum.DataFileFormat.html" title="enum iceberg::spec::DataFileFormat">DataFileFormat</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/s [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.file_format" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.file_format" class="fn">file_format</a>(&amp;mut self, value: <a class="enum" href="enum.DataFileFormat.html" title="enum iceberg::spec::DataFileFormat">DataFileFormat</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/s [...]
 <p>String file format name, avro, orc or parquet</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.partition" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.partition" class="fn">partition</a>(&amp;mut self, value: <a class="struct" href="struct.Struct.html" title="struct iceberg::spec::Struct">Struct</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.h [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.partition" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.partition" class="fn">partition</a>(&amp;mut self, value: <a class="struct" href="struct.Struct.html" title="struct iceberg::spec::Struct">Struct</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.h [...]
 <p>Partition data tuple, schema based on the partition spec output using
 partition field ids for the struct field ids</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.record_count" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.record_count" class="fn">record_count</a>(&amp;mut self, value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.r [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.record_count" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.record_count" class="fn">record_count</a>(&amp;mut self, value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.r [...]
 <p>Number of records in this file</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.file_size_in_bytes" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.file_size_in_bytes" class="fn">file_size_in_bytes</a>(&amp;mut self, value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/night [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.file_size_in_bytes" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.file_size_in_bytes" class="fn">file_size_in_bytes</a>(&amp;mut self, value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/night [...]
 <p>Total file size in bytes</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.column_sizes" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.column_sizes" class="fn">column_sizes</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a cl [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.column_sizes" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.column_sizes" class="fn">column_sizes</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a cl [...]
 key field id: 117
 value field id: 118</p>
 <p>Map from column id to the total size on disk of all regions that
 store the column. Does not include bytes necessary to read other
 columns, like footers. Leave null for row-oriented formats (Avro)</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.value_counts" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.value_counts" class="fn">value_counts</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a cl [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.value_counts" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.value_counts" class="fn">value_counts</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a cl [...]
 key field id: 119
 value field id: 120</p>
 <p>Map from column id to number of values in the column (including null
 and NaN values)</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.null_value_counts" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.null_value_counts" class="fn">null_value_counts</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashM [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.null_value_counts" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.null_value_counts" class="fn">null_value_counts</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashM [...]
 key field id: 121
 value field id: 122</p>
 <p>Map from column id to number of null values in the column</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.nan_value_counts" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.nan_value_counts" class="fn">nan_value_counts</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap< [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.nan_value_counts" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.nan_value_counts" class="fn">nan_value_counts</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap< [...]
 key field id: 138
 value field id: 139</p>
 <p>Map from column id to number of NaN values in the column</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.lower_bounds" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.lower_bounds" class="fn">lower_bounds</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a cl [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.lower_bounds" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.lower_bounds" class="fn">lower_bounds</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a cl [...]
 key field id: 126
 value field id: 127</p>
 <p>Map from column id to lower bound in the column serialized as binary.
@@ -42,7 +42,7 @@ in the column for the file.</p>
 <ul>
 <li><a href="https://iceberg.apache.org/spec/#binary-single-value-serialization">Binary single-value serialization</a></li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.upper_bounds" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.upper_bounds" class="fn">upper_bounds</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a cl [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.upper_bounds" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.upper_bounds" class="fn">upper_bounds</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a cl [...]
 key field id: 129
 value field id: 130</p>
 <p>Map from column id to upper bound in the column serialized as binary.
@@ -52,19 +52,19 @@ values in the column for the file.</p>
 <ul>
 <li><a href="https://iceberg.apache.org/spec/#binary-single-value-serialization">Binary single-value serialization</a></li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.key_metadata" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.key_metadata" class="fn">key_metadata</a>(&amp;mut self, value: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-l [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.key_metadata" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.key_metadata" class="fn">key_metadata</a>(&amp;mut self, value: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-l [...]
 <p>Implementation-specific key metadata for encryption</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.split_offsets" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.split_offsets" class="fn">split_offsets</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-la [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.split_offsets" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.split_offsets" class="fn">split_offsets</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-la [...]
 element field id: 133</p>
 <p>Split offsets for the data file. For example, all row group offsets
 in a Parquet file. Must be sorted ascending</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.equality_ids" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.equality_ids" class="fn">equality_ids</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang. [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.equality_ids" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.equality_ids" class="fn">equality_ids</a>(&amp;mut self, value: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang. [...]
 element field id: 136</p>
 <p>Field ids used to determine row equality in equality delete files.
 Required when content is EqualityDeletes and should be null
 otherwise. Fields with ids listed in this column must be present
 in the delete file</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.sort_order_id" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.sort_order_id" class="fn">sort_order_id</a>(&amp;mut self, value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitiv [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.sort_order_id" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.sort_order_id" class="fn">sort_order_id</a>(&amp;mut self, value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitiv [...]
 <p>ID representing sort order for this file.</p>
 <p>If sort order ID is missing or unknown, then the order is assumed to
 be unsorted. Only data files and equality delete files should be
@@ -72,10 +72,10 @@ written with a non-null order id. Position deletes are required to be
 sorted by file and position, not a table order, and should set sort
 order id to null. Readers must ignore sort order id for position
 delete files.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.build" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><h4 class="code-header">pub fn <a href="#method.build" class="fn">build</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="struct" href="struct.DataFile.html" title="struct iceberg: [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.build" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><h4 class="code-header">pub fn <a href="#method.build" class="fn">build</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="struct" href="struct.DataFile.html" title="struct iceberg: [...]
 <h5 id="errors"><a class="doc-anchor" href="#errors">§</a>Errors</h5>
 <p>If a required field has not been initialized.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-DataFileBuilder" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1012">source</a><a href="#impl-Clone-for-DataFileBuilder" class="anchor">§</a><h3 class="code-hea [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-DataFileBuilder" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1217">source</a><a href="#impl-Clone-for-DataFileBuilder" class="anchor">§</a><h3 class="code-hea [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/struct.ManifestEntry.html b/api/iceberg/spec/struct.ManifestEntry.html
index e9caeb1b..e0e7db6f 100644
--- a/api/iceberg/spec/struct.ManifestEntry.html
+++ b/api/iceberg/spec/struct.ManifestEntry.html
@@ -1,22 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A manifest is an immutable Avro file that lists data files or delete files, along with each file’s partition data tuple, metrics, and tracking information."><title>ManifestEntry in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML( [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A manifest is an immutable Avro file that lists data files or delete files, along with each file’s partition data tuple, metrics, and tracking information."><title>ManifestEntry in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML( [...]
 files, along with each file’s partition data tuple, metrics, and tracking
 information.</p>
-</div></details><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-ManifestEntry" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#868">source</a><a href="#impl-ManifestEntry" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ManifestEntry.html" title="str [...]
+</div></details><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-ManifestEntry" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1073">source</a><a href="#impl-ManifestEntry" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ManifestEntry.html" title="st [...]
 On the builder, call <code>.status(...)</code>, <code>.snapshot_id(...)</code>(optional), <code>.sequence_number(...)</code>(optional), <code>.file_sequence_number(...)</code>(optional), <code>.data_file(...)</code> to set the values of the fields.
 Finally, call <code>.build()</code> to create the instance of <code>ManifestEntry</code>.</p>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-ManifestEntry-1" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#898-980">source</a><a href="#impl-ManifestEntry-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ManifestEntry.html" title="struct iceberg::spec::ManifestEntry">ManifestEntry</a></h3></section></summary><div class="impl-items"><details class="toggle [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.status" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#908-910">source</a><h4 class="code-header">pub fn <a href="#method.status" class="fn">status</a>(&amp;self) -&gt; <a class="enum" href="enum.ManifestStatus.html" title="enum iceberg::spec::ManifestStatus">ManifestStatus</a></h4></section></summary><div class="docblock"><p>Status of this manifest entry</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#914-916">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(&amp;self) -&gt; <a class="enum" href="enum.DataContentType.html" title="enum iceberg::spec::DataContentType">DataContentType</a></h4></section></summary><div class="docblock"><p>Content type of  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.file_format" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#920-922">source</a><h4 class="code-header">pub fn <a href="#method.file_format" class="fn">file_format</a>(&amp;self) -&gt; <a class="enum" href="enum.DataFileFormat.html" title="enum iceberg::spec::DataFileFormat">DataFileFormat</a></h4></section></summary><div class="docblock"><p>File format of this ma [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.file_path" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#926-928">source</a><h4 class="code-header">pub fn <a href="#method.file_path" class="fn">file_path</a>(&amp;self) -&gt; &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a></h4></section></summary><div class="docblock"><p>Data file path of this manifest entry.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.record_count" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#932-934">source</a><h4 class="code-header">pub fn <a href="#method.record_count" class="fn">record_count</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Data file record count of the manife [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.snapshot_id" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#959-961">source</a><h4 class="code-header">pub fn <a href="#method.snapshot_id" class="fn">snapshot_id</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lan [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.sequence_number" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#965-967">source</a><h4 class="code-header">pub fn <a href="#method.sequence_number" class="fn">sequence_number</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https:// [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.file_size_in_bytes" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#971-973">source</a><h4 class="code-header">pub fn <a href="#method.file_size_in_bytes" class="fn">file_size_in_bytes</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>File size in bytes.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.data_file" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#977-979">source</a><h4 class="code-header">pub fn <a href="#method.data_file" class="fn">data_file</a>(&amp;self) -&gt; &amp;<a class="struct" href="struct.DataFile.html" title="struct iceberg::spec::DataFile">DataFile</a></h4></section></summary><div class="docblock"><p>get a reference to the actual data  [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-ManifestEntry" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#868">source</a><a href="#impl-Clone-for-ManifestEntry" class="anchor">§</a><h3 class="code-header"> [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-ManifestEntry-1" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1103-1185">source</a><a href="#impl-ManifestEntry-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ManifestEntry.html" title="struct iceberg::spec::ManifestEntry">ManifestEntry</a></h3></section></summary><div class="impl-items"><details class="togg [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.status" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1113-1115">source</a><h4 class="code-header">pub fn <a href="#method.status" class="fn">status</a>(&amp;self) -&gt; <a class="enum" href="enum.ManifestStatus.html" title="enum iceberg::spec::ManifestStatus">ManifestStatus</a></h4></section></summary><div class="docblock"><p>Status of this manifest entry</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.content_type" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1119-1121">source</a><h4 class="code-header">pub fn <a href="#method.content_type" class="fn">content_type</a>(&amp;self) -&gt; <a class="enum" href="enum.DataContentType.html" title="enum iceberg::spec::DataContentType">DataContentType</a></h4></section></summary><div class="docblock"><p>Content type o [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.file_format" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1125-1127">source</a><h4 class="code-header">pub fn <a href="#method.file_format" class="fn">file_format</a>(&amp;self) -&gt; <a class="enum" href="enum.DataFileFormat.html" title="enum iceberg::spec::DataFileFormat">DataFileFormat</a></h4></section></summary><div class="docblock"><p>File format of this  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.file_path" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1131-1133">source</a><h4 class="code-header">pub fn <a href="#method.file_path" class="fn">file_path</a>(&amp;self) -&gt; &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a></h4></section></summary><div class="docblock"><p>Data file path of this manifest entry.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.record_count" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1137-1139">source</a><h4 class="code-header">pub fn <a href="#method.record_count" class="fn">record_count</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>Data file record count of the mani [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.snapshot_id" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1164-1166">source</a><h4 class="code-header">pub fn <a href="#method.snapshot_id" class="fn">snapshot_id</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-l [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.sequence_number" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1170-1172">source</a><h4 class="code-header">pub fn <a href="#method.sequence_number" class="fn">sequence_number</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https: [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.file_size_in_bytes" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1176-1178">source</a><h4 class="code-header">pub fn <a href="#method.file_size_in_bytes" class="fn">file_size_in_bytes</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></h4></section></summary><div class="docblock"><p>File size in bytes.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.data_file" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1182-1184">source</a><h4 class="code-header">pub fn <a href="#method.data_file" class="fn">data_file</a>(&amp;self) -&gt; &amp;<a class="struct" href="struct.DataFile.html" title="struct iceberg::spec::DataFile">DataFile</a></h4></section></summary><div class="docblock"><p>get a reference to the actual dat [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-ManifestEntry" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1073">source</a><a href="#impl-Clone-for-ManifestEntry" class="anchor">§</a><h3 class="code-header" [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-ManifestEntry" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#868">source</a><a href="#impl-Eq-for-ManifestEntry" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.ManifestEntry.html [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-ManifestEntry" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#1073">source</a><a href="#impl-Eq-for-ManifestEntry" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.ManifestEntry.htm [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/struct.ManifestMetadata.html b/api/iceberg/spec/struct.ManifestMetadata.html
index a1d1b05b..83b0775b 100644
--- a/api/iceberg/spec/struct.ManifestMetadata.html
+++ b/api/iceberg/spec/struct.ManifestMetadata.html
@@ -1,11 +1,11 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Meta data of a manifest that is stored in the key-value metadata of the Avro file"><title>ManifestMetadata in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-R [...]
-</div></details><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-ManifestMetadata" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#755">source</a><a href="#impl-ManifestMetadata" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ManifestMetadata.html" t [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Meta data of a manifest that is stored in the key-value metadata of the Avro file"><title>ManifestMetadata in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-R [...]
+</div></details><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-ManifestMetadata" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#960">source</a><a href="#impl-ManifestMetadata" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ManifestMetadata.html" t [...]
 On the builder, call <code>.schema(...)</code>, <code>.schema_id(...)</code>, <code>.partition_spec(...)</code>, <code>.format_version(...)</code>, <code>.content(...)</code> to set the values of the fields.
 Finally, call <code>.build()</code> to create the instance of <code>ManifestMetadata</code>.</p>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-ManifestMetadata-1" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#770-860">source</a><a href="#impl-ManifestMetadata-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ManifestMetadata.html" title="struct iceberg::spec::ManifestMetadata">ManifestMetadata</a></h3></section></summary><div class="impl-items"><detail [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-ManifestMetadata" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#755">source</a><a href="#impl-Clone-for-ManifestMetadata" class="anchor">§</a><h3 class="code-he [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-ManifestMetadata-1" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#975-1065">source</a><a href="#impl-ManifestMetadata-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ManifestMetadata.html" title="struct iceberg::spec::ManifestMetadata">ManifestMetadata</a></h3></section></summary><div class="impl-items"><detai [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-ManifestMetadata" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#960">source</a><a href="#impl-Clone-for-ManifestMetadata" class="anchor">§</a><h3 class="code-he [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-ManifestMetadata" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#755">source</a><a href="#impl-Eq-for-ManifestMetadata" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.ManifestMeta [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-ManifestMetadata" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#960">source</a><a href="#impl-Eq-for-ManifestMetadata" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.ManifestMeta [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/struct.ManifestWriter.html b/api/iceberg/spec/struct.ManifestWriter.html
index 2fb7b01f..fef1d4a6 100644
--- a/api/iceberg/spec/struct.ManifestWriter.html
+++ b/api/iceberg/spec/struct.ManifestWriter.html
@@ -1,6 +1,28 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A manifest writer."><title>ManifestWriter in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.wo [...]
-</div></details><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-ManifestWriter" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#199-356">source</a><a href="#impl-ManifestWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ManifestWriter.html" tit [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#237-355">source</a><h4 class="code-header">pub async fn <a href="#method.write" class="fn">write</a>(self, manifest: <a class="struct" href="struct.Manifest.html" title="struct iceberg::spec::Manifest">Manifest</a>) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a  [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A manifest writer."><title>ManifestWriter in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.wo [...]
+</div></details><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-ManifestWriter" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#265-561">source</a><a href="#impl-ManifestWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ManifestWriter.html" tit [...]
+    &amp;mut self,
+    data_file: <a class="struct" href="struct.DataFile.html" title="struct iceberg::spec::DataFile">DataFile</a>,
+    sequence_number: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>,
+) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>&gt;</h4></section></summary><div class="docblock"><p>Add file as an added entry with a specific sequence number. The entry’s snapshot ID will be this manifest’s snapshot ID. The entry’s data sequence
+number will be the provided data sequence number. The entry’s file sequence number will be
+assigned at commit.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.add_delete_file" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#389-405">source</a><h4 class="code-header">pub fn <a href="#method.add_delete_file" class="fn">add_delete_file</a>(
+    &amp;mut self,
+    data_file: <a class="struct" href="struct.DataFile.html" title="struct iceberg::spec::DataFile">DataFile</a>,
+    sequence_number: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>,
+    file_sequence_number: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>&gt;,
+) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>&gt;</h4></section></summary><div class="docblock"><p>Add a file as delete manifest entry. The entry’s snapshot ID will be this manifest’s snapshot ID.
+However, the original data and file sequence numbers of the file must be preserved when
+the file is marked as deleted.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.add_existing_file" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#422-439">source</a><h4 class="code-header">pub fn <a href="#method.add_existing_file" class="fn">add_existing_file</a>(
+    &amp;mut self,
+    data_file: <a class="struct" href="struct.DataFile.html" title="struct iceberg::spec::DataFile">DataFile</a>,
+    snapshot_id: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>,
+    sequence_number: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>,
+    file_sequence_number: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>&gt;,
+) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>&gt;</h4></section></summary><div class="docblock"><p>Add an file as existing manifest entry. The original data and file sequence numbers, snapshot ID,
+which were assigned at commit, must be preserved when adding an existing entry.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.write_manifest_file" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#477-560">source</a><h4 class="code-header">pub async fn <a href="#method.write_manifest_file" class="fn">write_manifest_file</a>(self) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="struct" href="struct.ManifestFile.html" title="struct iceber [...]
 </div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-ManifestWriter" class="impl"><a href="#impl-Freeze-for-ManifestWriter" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Fre [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
diff --git a/api/iceberg/spec/struct.ManifestWriter.html b/api/iceberg/spec/struct.ManifestWriterBuilder.html
similarity index 83%
copy from api/iceberg/spec/struct.ManifestWriter.html
copy to api/iceberg/spec/struct.ManifestWriterBuilder.html
index 2fb7b01f..e72410c9 100644
--- a/api/iceberg/spec/struct.ManifestWriter.html
+++ b/api/iceberg/spec/struct.ManifestWriterBuilder.html
@@ -1,7 +1,15 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A manifest writer."><title>ManifestWriter in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.wo [...]
-</div></details><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-ManifestWriter" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#199-356">source</a><a href="#impl-ManifestWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ManifestWriter.html" tit [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#237-355">source</a><h4 class="code-header">pub async fn <a href="#method.write" class="fn">write</a>(self, manifest: <a class="struct" href="struct.Manifest.html" title="struct iceberg::spec::Manifest">Manifest</a>) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a  [...]
-</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-ManifestWriter" class="impl"><a href="#impl-Freeze-for-ManifestWriter" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait core::marker::Fre [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The builder used to create a `ManifestWriter`."><title>ManifestWriterBuilder in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2, [...]
+</div></details><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-ManifestWriterBuilder" class="impl"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#126-179">source</a><a href="#impl-ManifestWriterBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ManifestWr [...]
+    output: <a class="struct" href="../io/struct.OutputFile.html" title="struct iceberg::io::OutputFile">OutputFile</a>,
+    snapshot_id: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>&gt;,
+    key_metadata: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;,
+    schema: <a class="type" href="type.SchemaRef.html" title="type iceberg::spec::SchemaRef">SchemaRef</a>,
+    partition_spec: <a class="struct" href="struct.PartitionSpec.html" title="struct iceberg::spec::PartitionSpec">PartitionSpec</a>,
+) -&gt; Self</h4></section></summary><div class="docblock"><p>Create a new builder.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.build_v1" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#145-154">source</a><h4 class="code-header">pub fn <a href="#method.build_v1" class="fn">build_v1</a>(self) -&gt; <a class="struct" href="struct.ManifestWriter.html" title="struct iceberg::spec::ManifestWriter">ManifestWriter</a></h4></section></summary><div class="docblock"><p>Build a <a href="struct.Manife [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.build_v2_data" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#157-166">source</a><h4 class="code-header">pub fn <a href="#method.build_v2_data" class="fn">build_v2_data</a>(self) -&gt; <a class="struct" href="struct.ManifestWriter.html" title="struct iceberg::spec::ManifestWriter">ManifestWriter</a></h4></section></summary><div class="docblock"><p>Build a <a href [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.build_v2_deletes" class="method"><a class="src rightside" href="../../src/iceberg/spec/manifest.rs.html#169-178">source</a><h4 class="code-header">pub fn <a href="#method.build_v2_deletes" class="fn">build_v2_deletes</a>(self) -&gt; <a class="struct" href="struct.ManifestWriter.html" title="struct iceberg::spec::ManifestWriter">ManifestWriter</a></h4></section></summary><div class="docblock"><p>Build  [...]
+</div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-ManifestWriterBuilder" class="impl"><a href="#impl-Freeze-for-ManifestWriterBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="trait cor [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/struct.Snapshot.html b/api/iceberg/spec/struct.Snapshot.html
index 2521f3cf..87b973c7 100644
--- a/api/iceberg/spec/struct.Snapshot.html
+++ b/api/iceberg/spec/struct.Snapshot.html
@@ -1,26 +1,26 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A snapshot represents the state of a table at some time and is used to access the complete set of data files in the table."><title>Snapshot in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f9 [...]
-</div></details><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-Snapshot" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#83">source</a><a href="#impl-Snapshot" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Snapshot.html" title="struct iceberg::spe [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A snapshot represents the state of a table at some time and is used to access the complete set of data files in the table."><title>Snapshot in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f9 [...]
+</div></details><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-Snapshot" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#85">source</a><a href="#impl-Snapshot" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Snapshot.html" title="struct iceberg::spe [...]
 On the builder, call <code>.snapshot_id(...)</code>, <code>.parent_snapshot_id(...)</code>(optional), <code>.sequence_number(...)</code>, <code>.timestamp_ms(...)</code>, <code>.manifest_list(...)</code>, <code>.summary(...)</code>, <code>.schema_id(...)</code>(optional) to set the values of the fields.
 Finally, call <code>.build()</code> to create the instance of <code>Snapshot</code>.</p>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Snapshot-1" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#112-214">source</a><a href="#impl-Snapshot-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Snapshot.html" title="struct iceberg::spec::Snapshot">Snapshot</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><sum [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.parent_snapshot_id" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#121-123">source</a><h4 class="code-header">pub fn <a href="#method.parent_snapshot_id" class="fn">parent_snapshot_id</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href= [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.sequence_number" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#127-129">source</a><h4 class="code-header">pub fn <a href="#method.sequence_number" class="fn">sequence_number</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a></h4></section></summary><div class="docblock"><p>Get sequence_number of the  [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.manifest_list" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#132-134">source</a><h4 class="code-header">pub fn <a href="#method.manifest_list" class="fn">manifest_list</a>(&amp;self) -&gt; &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a></h4></section></summary><div class="docblock"><p>Get location of manifest_lis [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.summary" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#138-140">source</a><h4 class="code-header">pub fn <a href="#method.summary" class="fn">summary</a>(&amp;self) -&gt; &amp;<a class="struct" href="struct.Summary.html" title="struct iceberg::spec::Summary">Summary</a></h4></section></summary><div class="docblock"><p>Get summary of the snapshot</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#143-145">source</a><h4 class="code-header">pub fn <a href="#method.timestamp" class="fn">timestamp</a>(&amp;self) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="struct" href="https://docs.rs/chrono/latest/chrono/datetime/struct.DateTime.html" title="st [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp_ms" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#149-151">source</a><h4 class="code-header">pub fn <a href="#method.timestamp_ms" class="fn">timestamp_ms</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a></h4></section></summary><div class="docblock"><p>Get the timestamp of when the snapsh [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.schema_id" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#155-157">source</a><h4 class="code-header">pub fn <a href="#method.schema_id" class="fn">schema_id</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="type" href="type.SchemaId.html" title="type [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.schema" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#160-173">source</a><h4 class="code-header">pub fn <a href="#method.schema" class="fn">schema</a>(&amp;self, table_metadata: &amp;<a class="struct" href="struct.TableMetadata.html" title="struct iceberg::spec::TableMetadata">TableMetadata</a>) -&gt; <a class="type" href="../type.Result.html" title="type iceber [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.load_manifest_list" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#185-206">source</a><h4 class="code-header">pub async fn <a href="#method.load_manifest_list" class="fn">load_manifest_list</a>(
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Snapshot-1" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#114-216">source</a><a href="#impl-Snapshot-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Snapshot.html" title="struct iceberg::spec::Snapshot">Snapshot</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><sum [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.parent_snapshot_id" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#123-125">source</a><h4 class="code-header">pub fn <a href="#method.parent_snapshot_id" class="fn">parent_snapshot_id</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href= [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.sequence_number" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#129-131">source</a><h4 class="code-header">pub fn <a href="#method.sequence_number" class="fn">sequence_number</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a></h4></section></summary><div class="docblock"><p>Get sequence_number of the  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.manifest_list" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#134-136">source</a><h4 class="code-header">pub fn <a href="#method.manifest_list" class="fn">manifest_list</a>(&amp;self) -&gt; &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a></h4></section></summary><div class="docblock"><p>Get location of manifest_lis [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.summary" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#140-142">source</a><h4 class="code-header">pub fn <a href="#method.summary" class="fn">summary</a>(&amp;self) -&gt; &amp;<a class="struct" href="struct.Summary.html" title="struct iceberg::spec::Summary">Summary</a></h4></section></summary><div class="docblock"><p>Get summary of the snapshot</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#145-147">source</a><h4 class="code-header">pub fn <a href="#method.timestamp" class="fn">timestamp</a>(&amp;self) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="struct" href="https://docs.rs/chrono/latest/chrono/datetime/struct.DateTime.html" title="st [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp_ms" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#151-153">source</a><h4 class="code-header">pub fn <a href="#method.timestamp_ms" class="fn">timestamp_ms</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a></h4></section></summary><div class="docblock"><p>Get the timestamp of when the snapsh [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.schema_id" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#157-159">source</a><h4 class="code-header">pub fn <a href="#method.schema_id" class="fn">schema_id</a>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="type" href="type.SchemaId.html" title="type [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.schema" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#162-175">source</a><h4 class="code-header">pub fn <a href="#method.schema" class="fn">schema</a>(&amp;self, table_metadata: &amp;<a class="struct" href="struct.TableMetadata.html" title="struct iceberg::spec::TableMetadata">TableMetadata</a>) -&gt; <a class="type" href="../type.Result.html" title="type iceber [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.load_manifest_list" class="method"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#187-208">source</a><h4 class="code-header">pub async fn <a href="#method.load_manifest_list" class="fn">load_manifest_list</a>(
     &amp;self,
     file_io: &amp;<a class="struct" href="../io/struct.FileIO.html" title="struct iceberg::io::FileIO">FileIO</a>,
     table_metadata: &amp;<a class="struct" href="struct.TableMetadata.html" title="struct iceberg::spec::TableMetadata">TableMetadata</a>,
 ) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="struct" href="struct.ManifestList.html" title="struct iceberg::spec::ManifestList">ManifestList</a>&gt;</h4></section></summary><div class="docblock"><p>Load manifest list.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Snapshot" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#83">source</a><a href="#impl-Clone-for-Snapshot" class="anchor">§</a><h3 class="code-header">impl <a cla [...]
-    __D: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Parti [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Snapshot" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#85">source</a><a href="#impl-Clone-for-Snapshot" class="anchor">§</a><h3 class="code-header">impl <a cla [...]
+    __D: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Parti [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-Snapshot" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#83">source</a><a href="#impl-Serialize-for-Snapshot" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html" title="trait serde::ser [...]
-    __S: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><section id="impl-Eq-for-Snapshot" class="impl"><a class="src rightside" href="../../src/iceberg/spec/s [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-Snapshot" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#85">source</a><a href="#impl-Serialize-for-Snapshot" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html" title="trait serde::ser [...]
+    __S: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><section id="impl-Eq-for-Snapshot" class="impl"><a class="src rightside" href="../../src/iceberg/spec/s [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/struct.SnapshotReference.html b/api/iceberg/spec/struct.SnapshotReference.html
index 7b45c5c7..b7d55833 100644
--- a/api/iceberg/spec/struct.SnapshotReference.html
+++ b/api/iceberg/spec/struct.SnapshotReference.html
@@ -1,16 +1,16 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Iceberg tables keep track of branches and tags using snapshot references."><title>SnapshotReference in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular- [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Iceberg tables keep track of branches and tags using snapshot references."><title>SnapshotReference in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular- [...]
     pub snapshot_id: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>,
     pub retention: <a class="enum" href="enum.SnapshotRetention.html" title="enum iceberg::spec::SnapshotRetention">SnapshotRetention</a>,
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Iceberg tables keep track of branches and tags using snapshot references.</p>
 </div></details><h2 id="fields" class="fields section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.snapshot_id" class="structfield section-header"><a href="#structfield.snapshot_id" class="anchor field">§</a><code>snapshot_id: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a></code></span><div class="docblock"><p>A reference’s snapshot ID. The tagged snapshot or latest snapshot of a branch.</p>
 </div><span id="structfield.retention" class="structfield section-header"><a href="#structfield.retention" class="anchor field">§</a><code>retention: <a class="enum" href="enum.SnapshotRetention.html" title="enum iceberg::spec::SnapshotRetention">SnapshotRetention</a></code></span><div class="docblock"><p>Snapshot retention policy</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-SnapshotReference" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#339-344">source</a><a href="#impl-SnapshotReference" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.SnapshotReference.html" titl [...]
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-SnapshotReference-1" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#346-354">source</a><a href="#impl-SnapshotReference-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.SnapshotReference.html" title="struct iceberg::spec::SnapshotReference">SnapshotReference</a></h3></section></summary><div class="impl-items"><d [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-SnapshotReference" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#328">source</a><a href="#impl-Clone-for-SnapshotReference" class="anchor">§</a><h3 class="code- [...]
-    __D: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Parti [...]
+</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-SnapshotReference" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#341-346">source</a><a href="#impl-SnapshotReference" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.SnapshotReference.html" titl [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-SnapshotReference-1" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#348-356">source</a><a href="#impl-SnapshotReference-1" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.SnapshotReference.html" title="struct iceberg::spec::SnapshotReference">SnapshotReference</a></h3></section></summary><div class="impl-items"><d [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-SnapshotReference" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#330">source</a><a href="#impl-Clone-for-SnapshotReference" class="anchor">§</a><h3 class="code- [...]
+    __D: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Parti [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-SnapshotReference" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#328">source</a><a href="#impl-Serialize-for-SnapshotReference" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html" titl [...]
-    __S: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><section id="impl-Eq-for-SnapshotReference" class="impl"><a class="src rightside" href="../../src/icebe [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-SnapshotReference" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#330">source</a><a href="#impl-Serialize-for-SnapshotReference" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html" titl [...]
+    __S: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><section id="impl-Eq-for-SnapshotReference" class="impl"><a class="src rightside" href="../../src/icebe [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/struct.Summary.html b/api/iceberg/spec/struct.Summary.html
index 33d9af7a..bddf2318 100644
--- a/api/iceberg/spec/struct.Summary.html
+++ b/api/iceberg/spec/struct.Summary.html
@@ -1,14 +1,14 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Summarises the changes in the snapshot."><title>Summary in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a7 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Summarises the changes in the snapshot."><title>Summary in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a7 [...]
     pub operation: <a class="enum" href="enum.Operation.html" title="enum iceberg::spec::Operation">Operation</a>,
     pub additional_properties: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>&gt;,
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Summarises the changes in the snapshot.</p>
 </div></details><h2 id="fields" class="fields section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.operation" class="structfield section-header"><a href="#structfield.operation" class="anchor field">§</a><code>operation: <a class="enum" href="enum.Operation.html" title="enum iceberg::spec::Operation">Operation</a></code></span><div class="docblock"><p>The type of operation in the snapshot</p>
 </div><span id="structfield.additional_properties" class="structfield section-header"><a href="#structfield.additional_properties" class="anchor field">§</a><code>additional_properties: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String< [...]
-</div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Summary" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#67">source</a><a href="#impl-Clone-for-Summary" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust- [...]
-    __D: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Parti [...]
+</div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Summary" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#69">source</a><a href="#impl-Clone-for-Summary" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust- [...]
+    __D: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserializer.html" title="trait serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Parti [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-Summary" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#67">source</a><a href="#impl-Serialize-for-Summary" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html" title="trait serde::ser:: [...]
-    __S: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><section id="impl-Eq-for-Summary" class="impl"><a class="src rightside" href="../../src/iceberg/spec/sn [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-Summary" class="impl"><a class="src rightside" href="../../src/iceberg/spec/snapshot.rs.html#69">source</a><a href="#impl-Serialize-for-Summary" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html" title="trait serde::ser:: [...]
+    __S: <a class="trait" href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><section id="impl-Eq-for-Summary" class="impl"><a class="src rightside" href="../../src/iceberg/spec/sn [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/type.ManifestEntryRef.html b/api/iceberg/spec/type.ManifestEntryRef.html
index d2e525a7..b28d3eaf 100644
--- a/api/iceberg/spec/type.ManifestEntryRef.html
+++ b/api/iceberg/spec/type.ManifestEntryRef.html
@@ -1,2 +1,2 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reference to `ManifestEntry`."><title>ManifestEntryRef in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a78 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reference to `ManifestEntry`."><title>ManifestEntryRef in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a78 [...]
 </div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct ManifestEntryRef { <span class="comment">/* private fields */</span> }</code></pre><script src="../../type.impl/alloc/sync/struct.Arc.js" data-self-path="iceberg::spec::manifest::ManifestEntryRef" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg/spec/type.SnapshotRef.html b/api/iceberg/spec/type.SnapshotRef.html
index ffdae773..ee8211b6 100644
--- a/api/iceberg/spec/type.SnapshotRef.html
+++ b/api/iceberg/spec/type.SnapshotRef.html
@@ -1,2 +1,2 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reference to `Snapshot`."><title>SnapshotRef in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reference to `Snapshot`."><title>SnapshotRef in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388 [...]
 </div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct SnapshotRef { <span class="comment">/* private fields */</span> }</code></pre><script src="../../type.impl/alloc/sync/struct.Arc.js" data-self-path="iceberg::spec::snapshot::SnapshotRef" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg/transaction/index.html b/api/iceberg/transaction/index.html
index 042e24a0..449912f3 100644
--- a/api/iceberg/transaction/index.html
+++ b/api/iceberg/transaction/index.html
@@ -1,2 +1,2 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="This module contains transaction api."><title>iceberg::transaction - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e497 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="This module contains transaction api."><title>iceberg::transaction - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e497 [...]
 </div></details><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.FastAppendAction.html" title="struct iceberg::transaction::FastAppendAction">FastAppendAction</a></div><div class="desc docblock-short">FastAppendAction is a transaction action for fast append data files to the table.</div></li><li><div class="item-name"><a class="struct" href="struct.ReplaceSortOrderAc [...]
\ No newline at end of file
diff --git a/api/iceberg/transaction/struct.FastAppendAction.html b/api/iceberg/transaction/struct.FastAppendAction.html
index b6be5a76..8ef13418 100644
--- a/api/iceberg/transaction/struct.FastAppendAction.html
+++ b/api/iceberg/transaction/struct.FastAppendAction.html
@@ -1,9 +1,9 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="FastAppendAction is a transaction action for fast append data files to the table."><title>FastAppendAction in iceberg::transaction - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,Fir [...]
-</div></details><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-FastAppendAction%3C'a%3E" class="impl"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#180-215">source</a><a href="#impl-FastAppendAction%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="struct" href="str [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="FastAppendAction is a transaction action for fast append data files to the table."><title>FastAppendAction in iceberg::transaction - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,Fir [...]
+</div></details><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-FastAppendAction%3C'a%3E" class="impl"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#179-214">source</a><a href="#impl-FastAppendAction%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="struct" href="str [...]
     &amp;mut self,
     data_files: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a class="struct" href="../spec/struct.DataFile.html" title="struct iceberg::spec::DataFile">DataFile</a>&gt;,
 ) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut Self</a>&gt;</h4></section></summary><div class="docblock"><p>Add data files to the snapshot.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.apply" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#210-214">source</a><h4 class="code-header">pub async fn <a href="#method.apply" class="fn">apply</a>(self) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="struct" href="struct.Transaction.html" title="struct iceberg::transaction::Transaction">Transaction</a>& [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.apply" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#209-213">source</a><h4 class="code-header">pub async fn <a href="#method.apply" class="fn">apply</a>(self) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="struct" href="struct.Transaction.html" title="struct iceberg::transaction::Transaction">Transaction</a>& [...]
 </div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-FastAppendAction%3C'a%3E" class="impl"><a href="#impl-Freeze-for-FastAppendAction%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html"  [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
diff --git a/api/iceberg/transaction/struct.ReplaceSortOrderAction.html b/api/iceberg/transaction/struct.ReplaceSortOrderAction.html
index 311942cc..8a7177f5 100644
--- a/api/iceberg/transaction/struct.ReplaceSortOrderAction.html
+++ b/api/iceberg/transaction/struct.ReplaceSortOrderAction.html
@@ -1,7 +1,7 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Transaction action for replacing sort order."><title>ReplaceSortOrderAction in iceberg::transaction - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd. [...]
-</div></details><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-ReplaceSortOrderAction%3C'a%3E" class="impl"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#536-603">source</a><a href="#impl-ReplaceSortOrderAction%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="struc [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.desc" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#543-545">source</a><h4 class="code-header">pub fn <a href="#method.desc" class="fn">desc</a>(self, name: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>, null_order: <a class="enum" href="../spec/enum.NullOrder.html" title="enum iceberg::spec::NullOrder">NullOrder [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.apply" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#548-572">source</a><h4 class="code-header">pub fn <a href="#method.apply" class="fn">apply</a>(self) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="struct" href="struct.Transaction.html" title="struct iceberg::transaction::Transaction">Transaction</a>&lt;'a& [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Transaction action for replacing sort order."><title>ReplaceSortOrderAction in iceberg::transaction - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd. [...]
+</div></details><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-ReplaceSortOrderAction%3C'a%3E" class="impl"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#534-601">source</a><a href="#impl-ReplaceSortOrderAction%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="struc [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.desc" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#541-543">source</a><h4 class="code-header">pub fn <a href="#method.desc" class="fn">desc</a>(self, name: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>, null_order: <a class="enum" href="../spec/enum.NullOrder.html" title="enum iceberg::spec::NullOrder">NullOrder [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.apply" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#546-570">source</a><h4 class="code-header">pub fn <a href="#method.apply" class="fn">apply</a>(self) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="struct" href="struct.Transaction.html" title="struct iceberg::transaction::Transaction">Transaction</a>&lt;'a& [...]
 </div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-ReplaceSortOrderAction%3C'a%3E" class="impl"><a href="#impl-Freeze-for-ReplaceSortOrderAction%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.F [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
diff --git a/api/iceberg/transaction/struct.Transaction.html b/api/iceberg/transaction/struct.Transaction.html
index 76c944a3..7b09134c 100644
--- a/api/iceberg/transaction/struct.Transaction.html
+++ b/api/iceberg/transaction/struct.Transaction.html
@@ -1,18 +1,18 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Table transaction."><title>Transaction in iceberg::transaction - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d38 [...]
-</div></details><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-Transaction%3C'a%3E" class="impl"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#49-173">source</a><a href="#impl-Transaction%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="struct" href="struct.Transac [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.upgrade_table_version" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#83-103">source</a><h4 class="code-header">pub fn <a href="#method.upgrade_table_version" class="fn">upgrade_table_version</a>(
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Table transaction."><title>Transaction in iceberg::transaction - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d38 [...]
+</div></details><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-Transaction%3C'a%3E" class="impl"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#48-172">source</a><a href="#impl-Transaction%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="struct" href="struct.Transac [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.upgrade_table_version" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#82-102">source</a><h4 class="code-header">pub fn <a href="#method.upgrade_table_version" class="fn">upgrade_table_version</a>(
     self,
     format_version: <a class="enum" href="../spec/enum.FormatVersion.html" title="enum iceberg::spec::FormatVersion">FormatVersion</a>,
 ) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;Self&gt;</h4></section></summary><div class="docblock"><p>Sets table to a new version.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.set_properties" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#106-109">source</a><h4 class="code-header">pub fn <a href="#method.set_properties" class="fn">set_properties</a>(self, props: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a clas [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.fast_append" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#134-147">source</a><h4 class="code-header">pub fn <a href="#method.fast_append" class="fn">fast_append</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.set_properties" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#105-108">source</a><h4 class="code-header">pub fn <a href="#method.set_properties" class="fn">set_properties</a>(self, props: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a clas [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.fast_append" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#133-146">source</a><h4 class="code-header">pub fn <a href="#method.fast_append" class="fn">fast_append</a>(
     self,
     commit_uuid: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://docs.rs/uuid/1.11.0/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>&gt;,
     key_metadata: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;,
 ) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="struct" href="struct.FastAppendAction.html" title="struct iceberg::transaction::FastAppendAction">FastAppendAction</a>&lt;'a&gt;&gt;</h4></section></summary><div class="docblock"><p>Creates a fast append action.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.replace_sort_order" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#150-155">source</a><h4 class="code-header">pub fn <a href="#method.replace_sort_order" class="fn">replace_sort_order</a>(self) -&gt; <a class="struct" href="struct.ReplaceSortOrderAction.html" title="struct iceberg::transaction::ReplaceSortOrderAction">ReplaceSortOrderAction</a>&lt;'a&gt;</h4></sect [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_properties" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#158-161">source</a><h4 class="code-header">pub fn <a href="#method.remove_properties" class="fn">remove_properties</a>(self, keys: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="https://doc.rust-la [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.commit" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#164-172">source</a><h4 class="code-header">pub async fn <a href="#method.commit" class="fn">commit</a>(self, catalog: &amp;impl <a class="trait" href="../trait.Catalog.html" title="trait iceberg::Catalog">Catalog</a>) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.replace_sort_order" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#149-154">source</a><h4 class="code-header">pub fn <a href="#method.replace_sort_order" class="fn">replace_sort_order</a>(self) -&gt; <a class="struct" href="struct.ReplaceSortOrderAction.html" title="struct iceberg::transaction::ReplaceSortOrderAction">ReplaceSortOrderAction</a>&lt;'a&gt;</h4></sect [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.remove_properties" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#157-160">source</a><h4 class="code-header">pub fn <a href="#method.remove_properties" class="fn">remove_properties</a>(self, keys: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="struct" href="https://doc.rust-la [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.commit" class="method"><a class="src rightside" href="../../src/iceberg/transaction.rs.html#163-171">source</a><h4 class="code-header">pub async fn <a href="#method.commit" class="fn">commit</a>(self, catalog: &amp;impl <a class="trait" href="../trait.Catalog.html" title="trait iceberg::Catalog">Catalog</a>) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a [...]
 </div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-Transaction%3C'a%3E" class="impl"><a href="#impl-Freeze-for-Transaction%3C'a%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'a&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html" title="tra [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
diff --git a/api/search-index.js b/api/search-index.js
index 66d985be..802c1352 100644
--- a/api/search-index.js
+++ b/api/search-index.js
@@ -1,5 +1,5 @@
 var searchIndex = new Map(JSON.parse('[\
-["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPPPPIPPPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNCNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFFKRRNNNNNNNNHHNNNNNNNNNNNNNNNNNNNNNNNNNNNMMMNMHMNNNNNNNHNNNNNNPPPPPPPPFKRGFIPPPPPPPPFPPPPPPPPPGGFPPFPIPPFNNMNNNNNNNNNNNNNNNNNNNNNNNNNN [...]
+["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPPPPIPPPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNCNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFFKRRNNNNNNNNHHNNNNNNNNNNNNNNNNNNNNNNNNNNNMMMNMHMNNNNNNNHNNNNNNPPPPPPPPFKRGFIPPPPPPPPFPPPPPPPPPGGFPPFPIPPFNNMNNNNNNNNNNNNNNNNNNNNNNNNNN [...]
 ["iceberg_catalog_glue",{"t":"SSSSSFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNQ","n":["AWS_ACCESS_KEY_ID","AWS_PROFILE_NAME","AWS_REGION_NAME","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN","GlueCatalog","GlueCatalogConfig","borrow","borrow","borrow_mut","borrow_mut","builder","create_namespace","create_table","deref","deref","deref_mut","deref_mut","drop","drop","drop_namespace","drop_table","file_io","fmt","fmt","from","from","get_namespace","init","init","into","into","into_shared","i [...]
 ["iceberg_catalog_hms",{"t":"PPFFGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Buffered","Framed","HmsCatalog","HmsCatalogConfig","HmsThriftTransport","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","builder","create_namespace","create_table","default","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop_namespace","drop_table","file_io","fmt","fmt","fmt","from","from","from","get_namespace","init","init","init","into [...]
 ["iceberg_catalog_memory",{"t":"FNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["MemoryCatalog","borrow","borrow_mut","create_namespace","create_table","deref","deref_mut","drop","drop_namespace","drop_table","fmt","from","get_namespace","init","into","list_namespaces","list_tables","load_table","namespace_exists","new","rename_table","table_exists","try_from","try_into","type_id","update_namespace","update_table","vzip"],"q":[[0,"iceberg_catalog_memory"],[28,"iceberg_catalog_memory::catalog"],[29,"i [...]
diff --git a/api/search.desc/iceberg/iceberg-desc-0-.js b/api/search.desc/iceberg/iceberg-desc-0-.js
index c9fc7cb9..a54579b3 100644
--- a/api/search.desc/iceberg/iceberg-desc-0-.js
+++ b/api/search.desc/iceberg/iceberg-desc-0-.js
@@ -1 +1 @@
-searchState.loadedDescShard("iceberg", 0, "Apache Iceberg Official Native Rust Implementation\nAdd a new schema to the table\nAdd snapshot to table.\nAdd sort order to table.\nAdd a new partition spec to the table\nAssign a new UUID to the table\nThe catalog API for Iceberg Rust.\nThe table’s current schema id must match the requirement.\nIceberg data is invalid.\nThe table’s default sort order id must match the …\nThe table’s default spec id must match the requirement.\nContains the err [...]
\ No newline at end of file
+searchState.loadedDescShard("iceberg", 0, "Apache Iceberg Official Native Rust Implementation\nAdd a new schema to the table\nAdd snapshot to table.\nAdd sort order to table.\nAdd a new partition spec to the table\nAssign a new UUID to the table\nThe catalog API for Iceberg Rust.\nThe table’s current schema id must match the requirement.\nIceberg data is invalid.\nThe table’s default sort order id must match the …\nThe table’s default spec id must match the requirement.\nContains the err [...]
\ No newline at end of file
diff --git a/api/settings.html b/api/settings.html
index 0b4d7eab..dfaf9d28 100644
--- a/api/settings.html
+++ b/api/settings.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Settings of Rustdoc"><title>Settings</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Regular-562 [...]
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Settings of Rustdoc"><title>Settings</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Regular-562 [...]
\ No newline at end of file
diff --git a/api/src/iceberg/io/object_cache.rs.html b/api/src/iceberg/io/object_cache.rs.html
index e1818802..85fb3156 100644
--- a/api/src/iceberg/io/object_cache.rs.html
+++ b/api/src/iceberg/io/object_cache.rs.html
@@ -403,11 +403,6 @@
 <a href="#403" id="403">403</a>
 <a href="#404" id="404">404</a>
 <a href="#405" id="405">405</a>
-<a href="#406" id="406">406</a>
-<a href="#407" id="407">407</a>
-<a href="#408" id="408">408</a>
-<a href="#409" id="409">409</a>
-<a href="#410" id="410">410</a>
 </pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -602,9 +597,8 @@
     <span class="kw">use super</span>::<span class="kw-2">*</span>;
     <span class="kw">use </span><span class="kw">crate</span>::io::{FileIO, OutputFile};
     <span class="kw">use </span><span class="kw">crate</span>::spec::{
-        DataContentType, DataFileBuilder, DataFileFormat, FormatVersion, Literal, Manifest,
-        ManifestContentType, ManifestEntry, ManifestListWriter, ManifestMetadata, ManifestStatus,
-        ManifestWriter, Struct, TableMetadata,
+        DataContentType, DataFileBuilder, DataFileFormat, Literal, ManifestEntry,
+        ManifestListWriter, ManifestStatus, ManifestWriterBuilder, Struct, TableMetadata,
     };
     <span class="kw">use </span><span class="kw">crate</span>::table::Table;
     <span class="kw">use </span><span class="kw">crate</span>::TableIdent;
@@ -674,37 +668,33 @@
             <span class="kw">let </span>current_partition_spec = <span class="self">self</span>.table.metadata().default_partition_spec();
 
             <span class="comment">// Write data files
-            </span><span class="kw">let </span>data_file_manifest = ManifestWriter::new(
+            </span><span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestWriterBuilder::new(
                 <span class="self">self</span>.next_manifest_file(),
-                current_snapshot.snapshot_id(),
+                <span class="prelude-val">Some</span>(current_snapshot.snapshot_id()),
                 <span class="macro">vec!</span>[],
+                current_schema.clone(),
+                current_partition_spec.as_ref().clone(),
             )
-            .write(Manifest::new(
-                ManifestMetadata::builder()
-                    .schema(current_schema.clone())
-                    .content(ManifestContentType::Data)
-                    .format_version(FormatVersion::V2)
-                    .partition_spec((<span class="kw-2">**</span>current_partition_spec).clone())
-                    .schema_id(current_schema.schema_id())
-                    .build(),
-                <span class="macro">vec!</span>[ManifestEntry::builder()
-                    .status(ManifestStatus::Added)
-                    .data_file(
-                        DataFileBuilder::default()
-                            .content(DataContentType::Data)
-                            .file_path(<span class="macro">format!</span>(<span class="string">"{}/1.parquet"</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.table_location))
-                            .file_format(DataFileFormat::Parquet)
-                            .file_size_in_bytes(<span class="number">100</span>)
-                            .record_count(<span class="number">1</span>)
-                            .partition(Struct::from_iter([<span class="prelude-val">Some</span>(Literal::long(<span class="number">100</span>))]))
-                            .key_metadata(<span class="prelude-val">None</span>)
-                            .build()
-                            .unwrap(),
-                    )
-                    .build()],
-            ))
-            .<span class="kw">await
-            </span>.unwrap();
+            .build_v2_data();
+            writer
+                .add_entry(
+                    ManifestEntry::builder()
+                        .status(ManifestStatus::Added)
+                        .data_file(
+                            DataFileBuilder::default()
+                                .content(DataContentType::Data)
+                                .file_path(<span class="macro">format!</span>(<span class="string">"{}/1.parquet"</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.table_location))
+                                .file_format(DataFileFormat::Parquet)
+                                .file_size_in_bytes(<span class="number">100</span>)
+                                .record_count(<span class="number">1</span>)
+                                .partition(Struct::from_iter([<span class="prelude-val">Some</span>(Literal::long(<span class="number">100</span>))]))
+                                .build()
+                                .unwrap(),
+                        )
+                        .build(),
+                )
+                .unwrap();
+            <span class="kw">let </span>data_file_manifest = writer.write_manifest_file().<span class="kw">await</span>.unwrap();
 
             <span class="comment">// Write to manifest list
             </span><span class="kw">let </span><span class="kw-2">mut </span>manifest_list_write = ManifestListWriter::v2(
diff --git a/api/src/iceberg/scan.rs.html b/api/src/iceberg/scan.rs.html
index 78eb5b63..1d828005 100644
--- a/api/src/iceberg/scan.rs.html
+++ b/api/src/iceberg/scan.rs.html
@@ -1885,6 +1885,9 @@
 <a href="#1885" id="1885">1885</a>
 <a href="#1886" id="1886">1886</a>
 <a href="#1887" id="1887">1887</a>
+<a href="#1888" id="1888">1888</a>
+<a href="#1889" id="1889">1889</a>
+<a href="#1890" id="1890">1890</a>
 </pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -2870,9 +2873,9 @@
     <span class="kw">use </span><span class="kw">crate</span>::io::{FileIO, OutputFile};
     <span class="kw">use </span><span class="kw">crate</span>::scan::FileScanTask;
     <span class="kw">use </span><span class="kw">crate</span>::spec::{
-        DataContentType, DataFileBuilder, DataFileFormat, Datum, FormatVersion, Literal, Manifest,
-        ManifestContentType, ManifestEntry, ManifestListWriter, ManifestMetadata, ManifestStatus,
-        ManifestWriter, NestedField, PrimitiveType, Schema, Struct, TableMetadata, Type,
+        DataContentType, DataFileBuilder, DataFileFormat, Datum, Literal, ManifestEntry,
+        ManifestListWriter, ManifestStatus, ManifestWriterBuilder, NestedField, PrimitiveType,
+        Schema, Struct, TableMetadata, Type,
     };
     <span class="kw">use </span><span class="kw">crate</span>::table::Table;
     <span class="kw">use </span><span class="kw">crate</span>::TableIdent;
@@ -2946,20 +2949,16 @@
             <span class="kw">let </span>current_partition_spec = <span class="self">self</span>.table.metadata().default_partition_spec();
 
             <span class="comment">// Write data files
-            </span><span class="kw">let </span>data_file_manifest = ManifestWriter::new(
+            </span><span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestWriterBuilder::new(
                 <span class="self">self</span>.next_manifest_file(),
-                current_snapshot.snapshot_id(),
+                <span class="prelude-val">Some</span>(current_snapshot.snapshot_id()),
                 <span class="macro">vec!</span>[],
+                current_schema.clone(),
+                current_partition_spec.as_ref().clone(),
             )
-            .write(Manifest::new(
-                ManifestMetadata::builder()
-                    .schema(current_schema.clone())
-                    .content(ManifestContentType::Data)
-                    .format_version(FormatVersion::V2)
-                    .partition_spec((<span class="kw-2">**</span>current_partition_spec).clone())
-                    .schema_id(current_schema.schema_id())
-                    .build(),
-                <span class="macro">vec!</span>[
+            .build_v2_data();
+            writer
+                .add_entry(
                     ManifestEntry::builder()
                         .status(ManifestStatus::Added)
                         .data_file(
@@ -2975,6 +2974,10 @@
                                 .unwrap(),
                         )
                         .build(),
+                )
+                .unwrap();
+            writer
+                .add_delete_entry(
                     ManifestEntry::builder()
                         .status(ManifestStatus::Deleted)
                         .snapshot_id(parent_snapshot.snapshot_id())
@@ -2992,6 +2995,10 @@
                                 .unwrap(),
                         )
                         .build(),
+                )
+                .unwrap();
+            writer
+                .add_existing_entry(
                     ManifestEntry::builder()
                         .status(ManifestStatus::Existing)
                         .snapshot_id(parent_snapshot.snapshot_id())
@@ -3009,10 +3016,9 @@
                                 .unwrap(),
                         )
                         .build(),
-                ],
-            ))
-            .<span class="kw">await
-            </span>.unwrap();
+                )
+                .unwrap();
+            <span class="kw">let </span>data_file_manifest = writer.write_manifest_file().<span class="kw">await</span>.unwrap();
 
             <span class="comment">// Write to manifest list
             </span><span class="kw">let </span><span class="kw-2">mut </span>manifest_list_write = ManifestListWriter::v2(
diff --git a/api/src/iceberg/spec/manifest.rs.html b/api/src/iceberg/spec/manifest.rs.html
index 82af4852..4c53d5a3 100644
--- a/api/src/iceberg/spec/manifest.rs.html
+++ b/api/src/iceberg/spec/manifest.rs.html
@@ -2467,6 +2467,445 @@
 <a href="#2467" id="2467">2467</a>
 <a href="#2468" id="2468">2468</a>
 <a href="#2469" id="2469">2469</a>
+<a href="#2470" id="2470">2470</a>
+<a href="#2471" id="2471">2471</a>
+<a href="#2472" id="2472">2472</a>
+<a href="#2473" id="2473">2473</a>
+<a href="#2474" id="2474">2474</a>
+<a href="#2475" id="2475">2475</a>
+<a href="#2476" id="2476">2476</a>
+<a href="#2477" id="2477">2477</a>
+<a href="#2478" id="2478">2478</a>
+<a href="#2479" id="2479">2479</a>
+<a href="#2480" id="2480">2480</a>
+<a href="#2481" id="2481">2481</a>
+<a href="#2482" id="2482">2482</a>
+<a href="#2483" id="2483">2483</a>
+<a href="#2484" id="2484">2484</a>
+<a href="#2485" id="2485">2485</a>
+<a href="#2486" id="2486">2486</a>
+<a href="#2487" id="2487">2487</a>
+<a href="#2488" id="2488">2488</a>
+<a href="#2489" id="2489">2489</a>
+<a href="#2490" id="2490">2490</a>
+<a href="#2491" id="2491">2491</a>
+<a href="#2492" id="2492">2492</a>
+<a href="#2493" id="2493">2493</a>
+<a href="#2494" id="2494">2494</a>
+<a href="#2495" id="2495">2495</a>
+<a href="#2496" id="2496">2496</a>
+<a href="#2497" id="2497">2497</a>
+<a href="#2498" id="2498">2498</a>
+<a href="#2499" id="2499">2499</a>
+<a href="#2500" id="2500">2500</a>
+<a href="#2501" id="2501">2501</a>
+<a href="#2502" id="2502">2502</a>
+<a href="#2503" id="2503">2503</a>
+<a href="#2504" id="2504">2504</a>
+<a href="#2505" id="2505">2505</a>
+<a href="#2506" id="2506">2506</a>
+<a href="#2507" id="2507">2507</a>
+<a href="#2508" id="2508">2508</a>
+<a href="#2509" id="2509">2509</a>
+<a href="#2510" id="2510">2510</a>
+<a href="#2511" id="2511">2511</a>
+<a href="#2512" id="2512">2512</a>
+<a href="#2513" id="2513">2513</a>
+<a href="#2514" id="2514">2514</a>
+<a href="#2515" id="2515">2515</a>
+<a href="#2516" id="2516">2516</a>
+<a href="#2517" id="2517">2517</a>
+<a href="#2518" id="2518">2518</a>
+<a href="#2519" id="2519">2519</a>
+<a href="#2520" id="2520">2520</a>
+<a href="#2521" id="2521">2521</a>
+<a href="#2522" id="2522">2522</a>
+<a href="#2523" id="2523">2523</a>
+<a href="#2524" id="2524">2524</a>
+<a href="#2525" id="2525">2525</a>
+<a href="#2526" id="2526">2526</a>
+<a href="#2527" id="2527">2527</a>
+<a href="#2528" id="2528">2528</a>
+<a href="#2529" id="2529">2529</a>
+<a href="#2530" id="2530">2530</a>
+<a href="#2531" id="2531">2531</a>
+<a href="#2532" id="2532">2532</a>
+<a href="#2533" id="2533">2533</a>
+<a href="#2534" id="2534">2534</a>
+<a href="#2535" id="2535">2535</a>
+<a href="#2536" id="2536">2536</a>
+<a href="#2537" id="2537">2537</a>
+<a href="#2538" id="2538">2538</a>
+<a href="#2539" id="2539">2539</a>
+<a href="#2540" id="2540">2540</a>
+<a href="#2541" id="2541">2541</a>
+<a href="#2542" id="2542">2542</a>
+<a href="#2543" id="2543">2543</a>
+<a href="#2544" id="2544">2544</a>
+<a href="#2545" id="2545">2545</a>
+<a href="#2546" id="2546">2546</a>
+<a href="#2547" id="2547">2547</a>
+<a href="#2548" id="2548">2548</a>
+<a href="#2549" id="2549">2549</a>
+<a href="#2550" id="2550">2550</a>
+<a href="#2551" id="2551">2551</a>
+<a href="#2552" id="2552">2552</a>
+<a href="#2553" id="2553">2553</a>
+<a href="#2554" id="2554">2554</a>
+<a href="#2555" id="2555">2555</a>
+<a href="#2556" id="2556">2556</a>
+<a href="#2557" id="2557">2557</a>
+<a href="#2558" id="2558">2558</a>
+<a href="#2559" id="2559">2559</a>
+<a href="#2560" id="2560">2560</a>
+<a href="#2561" id="2561">2561</a>
+<a href="#2562" id="2562">2562</a>
+<a href="#2563" id="2563">2563</a>
+<a href="#2564" id="2564">2564</a>
+<a href="#2565" id="2565">2565</a>
+<a href="#2566" id="2566">2566</a>
+<a href="#2567" id="2567">2567</a>
+<a href="#2568" id="2568">2568</a>
+<a href="#2569" id="2569">2569</a>
+<a href="#2570" id="2570">2570</a>
+<a href="#2571" id="2571">2571</a>
+<a href="#2572" id="2572">2572</a>
+<a href="#2573" id="2573">2573</a>
+<a href="#2574" id="2574">2574</a>
+<a href="#2575" id="2575">2575</a>
+<a href="#2576" id="2576">2576</a>
+<a href="#2577" id="2577">2577</a>
+<a href="#2578" id="2578">2578</a>
+<a href="#2579" id="2579">2579</a>
+<a href="#2580" id="2580">2580</a>
+<a href="#2581" id="2581">2581</a>
+<a href="#2582" id="2582">2582</a>
+<a href="#2583" id="2583">2583</a>
+<a href="#2584" id="2584">2584</a>
+<a href="#2585" id="2585">2585</a>
+<a href="#2586" id="2586">2586</a>
+<a href="#2587" id="2587">2587</a>
+<a href="#2588" id="2588">2588</a>
+<a href="#2589" id="2589">2589</a>
+<a href="#2590" id="2590">2590</a>
+<a href="#2591" id="2591">2591</a>
+<a href="#2592" id="2592">2592</a>
+<a href="#2593" id="2593">2593</a>
+<a href="#2594" id="2594">2594</a>
+<a href="#2595" id="2595">2595</a>
+<a href="#2596" id="2596">2596</a>
+<a href="#2597" id="2597">2597</a>
+<a href="#2598" id="2598">2598</a>
+<a href="#2599" id="2599">2599</a>
+<a href="#2600" id="2600">2600</a>
+<a href="#2601" id="2601">2601</a>
+<a href="#2602" id="2602">2602</a>
+<a href="#2603" id="2603">2603</a>
+<a href="#2604" id="2604">2604</a>
+<a href="#2605" id="2605">2605</a>
+<a href="#2606" id="2606">2606</a>
+<a href="#2607" id="2607">2607</a>
+<a href="#2608" id="2608">2608</a>
+<a href="#2609" id="2609">2609</a>
+<a href="#2610" id="2610">2610</a>
+<a href="#2611" id="2611">2611</a>
+<a href="#2612" id="2612">2612</a>
+<a href="#2613" id="2613">2613</a>
+<a href="#2614" id="2614">2614</a>
+<a href="#2615" id="2615">2615</a>
+<a href="#2616" id="2616">2616</a>
+<a href="#2617" id="2617">2617</a>
+<a href="#2618" id="2618">2618</a>
+<a href="#2619" id="2619">2619</a>
+<a href="#2620" id="2620">2620</a>
+<a href="#2621" id="2621">2621</a>
+<a href="#2622" id="2622">2622</a>
+<a href="#2623" id="2623">2623</a>
+<a href="#2624" id="2624">2624</a>
+<a href="#2625" id="2625">2625</a>
+<a href="#2626" id="2626">2626</a>
+<a href="#2627" id="2627">2627</a>
+<a href="#2628" id="2628">2628</a>
+<a href="#2629" id="2629">2629</a>
+<a href="#2630" id="2630">2630</a>
+<a href="#2631" id="2631">2631</a>
+<a href="#2632" id="2632">2632</a>
+<a href="#2633" id="2633">2633</a>
+<a href="#2634" id="2634">2634</a>
+<a href="#2635" id="2635">2635</a>
+<a href="#2636" id="2636">2636</a>
+<a href="#2637" id="2637">2637</a>
+<a href="#2638" id="2638">2638</a>
+<a href="#2639" id="2639">2639</a>
+<a href="#2640" id="2640">2640</a>
+<a href="#2641" id="2641">2641</a>
+<a href="#2642" id="2642">2642</a>
+<a href="#2643" id="2643">2643</a>
+<a href="#2644" id="2644">2644</a>
+<a href="#2645" id="2645">2645</a>
+<a href="#2646" id="2646">2646</a>
+<a href="#2647" id="2647">2647</a>
+<a href="#2648" id="2648">2648</a>
+<a href="#2649" id="2649">2649</a>
+<a href="#2650" id="2650">2650</a>
+<a href="#2651" id="2651">2651</a>
+<a href="#2652" id="2652">2652</a>
+<a href="#2653" id="2653">2653</a>
+<a href="#2654" id="2654">2654</a>
+<a href="#2655" id="2655">2655</a>
+<a href="#2656" id="2656">2656</a>
+<a href="#2657" id="2657">2657</a>
+<a href="#2658" id="2658">2658</a>
+<a href="#2659" id="2659">2659</a>
+<a href="#2660" id="2660">2660</a>
+<a href="#2661" id="2661">2661</a>
+<a href="#2662" id="2662">2662</a>
+<a href="#2663" id="2663">2663</a>
+<a href="#2664" id="2664">2664</a>
+<a href="#2665" id="2665">2665</a>
+<a href="#2666" id="2666">2666</a>
+<a href="#2667" id="2667">2667</a>
+<a href="#2668" id="2668">2668</a>
+<a href="#2669" id="2669">2669</a>
+<a href="#2670" id="2670">2670</a>
+<a href="#2671" id="2671">2671</a>
+<a href="#2672" id="2672">2672</a>
+<a href="#2673" id="2673">2673</a>
+<a href="#2674" id="2674">2674</a>
+<a href="#2675" id="2675">2675</a>
+<a href="#2676" id="2676">2676</a>
+<a href="#2677" id="2677">2677</a>
+<a href="#2678" id="2678">2678</a>
+<a href="#2679" id="2679">2679</a>
+<a href="#2680" id="2680">2680</a>
+<a href="#2681" id="2681">2681</a>
+<a href="#2682" id="2682">2682</a>
+<a href="#2683" id="2683">2683</a>
+<a href="#2684" id="2684">2684</a>
+<a href="#2685" id="2685">2685</a>
+<a href="#2686" id="2686">2686</a>
+<a href="#2687" id="2687">2687</a>
+<a href="#2688" id="2688">2688</a>
+<a href="#2689" id="2689">2689</a>
+<a href="#2690" id="2690">2690</a>
+<a href="#2691" id="2691">2691</a>
+<a href="#2692" id="2692">2692</a>
+<a href="#2693" id="2693">2693</a>
+<a href="#2694" id="2694">2694</a>
+<a href="#2695" id="2695">2695</a>
+<a href="#2696" id="2696">2696</a>
+<a href="#2697" id="2697">2697</a>
+<a href="#2698" id="2698">2698</a>
+<a href="#2699" id="2699">2699</a>
+<a href="#2700" id="2700">2700</a>
+<a href="#2701" id="2701">2701</a>
+<a href="#2702" id="2702">2702</a>
+<a href="#2703" id="2703">2703</a>
+<a href="#2704" id="2704">2704</a>
+<a href="#2705" id="2705">2705</a>
+<a href="#2706" id="2706">2706</a>
+<a href="#2707" id="2707">2707</a>
+<a href="#2708" id="2708">2708</a>
+<a href="#2709" id="2709">2709</a>
+<a href="#2710" id="2710">2710</a>
+<a href="#2711" id="2711">2711</a>
+<a href="#2712" id="2712">2712</a>
+<a href="#2713" id="2713">2713</a>
+<a href="#2714" id="2714">2714</a>
+<a href="#2715" id="2715">2715</a>
+<a href="#2716" id="2716">2716</a>
+<a href="#2717" id="2717">2717</a>
+<a href="#2718" id="2718">2718</a>
+<a href="#2719" id="2719">2719</a>
+<a href="#2720" id="2720">2720</a>
+<a href="#2721" id="2721">2721</a>
+<a href="#2722" id="2722">2722</a>
+<a href="#2723" id="2723">2723</a>
+<a href="#2724" id="2724">2724</a>
+<a href="#2725" id="2725">2725</a>
+<a href="#2726" id="2726">2726</a>
+<a href="#2727" id="2727">2727</a>
+<a href="#2728" id="2728">2728</a>
+<a href="#2729" id="2729">2729</a>
+<a href="#2730" id="2730">2730</a>
+<a href="#2731" id="2731">2731</a>
+<a href="#2732" id="2732">2732</a>
+<a href="#2733" id="2733">2733</a>
+<a href="#2734" id="2734">2734</a>
+<a href="#2735" id="2735">2735</a>
+<a href="#2736" id="2736">2736</a>
+<a href="#2737" id="2737">2737</a>
+<a href="#2738" id="2738">2738</a>
+<a href="#2739" id="2739">2739</a>
+<a href="#2740" id="2740">2740</a>
+<a href="#2741" id="2741">2741</a>
+<a href="#2742" id="2742">2742</a>
+<a href="#2743" id="2743">2743</a>
+<a href="#2744" id="2744">2744</a>
+<a href="#2745" id="2745">2745</a>
+<a href="#2746" id="2746">2746</a>
+<a href="#2747" id="2747">2747</a>
+<a href="#2748" id="2748">2748</a>
+<a href="#2749" id="2749">2749</a>
+<a href="#2750" id="2750">2750</a>
+<a href="#2751" id="2751">2751</a>
+<a href="#2752" id="2752">2752</a>
+<a href="#2753" id="2753">2753</a>
+<a href="#2754" id="2754">2754</a>
+<a href="#2755" id="2755">2755</a>
+<a href="#2756" id="2756">2756</a>
+<a href="#2757" id="2757">2757</a>
+<a href="#2758" id="2758">2758</a>
+<a href="#2759" id="2759">2759</a>
+<a href="#2760" id="2760">2760</a>
+<a href="#2761" id="2761">2761</a>
+<a href="#2762" id="2762">2762</a>
+<a href="#2763" id="2763">2763</a>
+<a href="#2764" id="2764">2764</a>
+<a href="#2765" id="2765">2765</a>
+<a href="#2766" id="2766">2766</a>
+<a href="#2767" id="2767">2767</a>
+<a href="#2768" id="2768">2768</a>
+<a href="#2769" id="2769">2769</a>
+<a href="#2770" id="2770">2770</a>
+<a href="#2771" id="2771">2771</a>
+<a href="#2772" id="2772">2772</a>
+<a href="#2773" id="2773">2773</a>
+<a href="#2774" id="2774">2774</a>
+<a href="#2775" id="2775">2775</a>
+<a href="#2776" id="2776">2776</a>
+<a href="#2777" id="2777">2777</a>
+<a href="#2778" id="2778">2778</a>
+<a href="#2779" id="2779">2779</a>
+<a href="#2780" id="2780">2780</a>
+<a href="#2781" id="2781">2781</a>
+<a href="#2782" id="2782">2782</a>
+<a href="#2783" id="2783">2783</a>
+<a href="#2784" id="2784">2784</a>
+<a href="#2785" id="2785">2785</a>
+<a href="#2786" id="2786">2786</a>
+<a href="#2787" id="2787">2787</a>
+<a href="#2788" id="2788">2788</a>
+<a href="#2789" id="2789">2789</a>
+<a href="#2790" id="2790">2790</a>
+<a href="#2791" id="2791">2791</a>
+<a href="#2792" id="2792">2792</a>
+<a href="#2793" id="2793">2793</a>
+<a href="#2794" id="2794">2794</a>
+<a href="#2795" id="2795">2795</a>
+<a href="#2796" id="2796">2796</a>
+<a href="#2797" id="2797">2797</a>
+<a href="#2798" id="2798">2798</a>
+<a href="#2799" id="2799">2799</a>
+<a href="#2800" id="2800">2800</a>
+<a href="#2801" id="2801">2801</a>
+<a href="#2802" id="2802">2802</a>
+<a href="#2803" id="2803">2803</a>
+<a href="#2804" id="2804">2804</a>
+<a href="#2805" id="2805">2805</a>
+<a href="#2806" id="2806">2806</a>
+<a href="#2807" id="2807">2807</a>
+<a href="#2808" id="2808">2808</a>
+<a href="#2809" id="2809">2809</a>
+<a href="#2810" id="2810">2810</a>
+<a href="#2811" id="2811">2811</a>
+<a href="#2812" id="2812">2812</a>
+<a href="#2813" id="2813">2813</a>
+<a href="#2814" id="2814">2814</a>
+<a href="#2815" id="2815">2815</a>
+<a href="#2816" id="2816">2816</a>
+<a href="#2817" id="2817">2817</a>
+<a href="#2818" id="2818">2818</a>
+<a href="#2819" id="2819">2819</a>
+<a href="#2820" id="2820">2820</a>
+<a href="#2821" id="2821">2821</a>
+<a href="#2822" id="2822">2822</a>
+<a href="#2823" id="2823">2823</a>
+<a href="#2824" id="2824">2824</a>
+<a href="#2825" id="2825">2825</a>
+<a href="#2826" id="2826">2826</a>
+<a href="#2827" id="2827">2827</a>
+<a href="#2828" id="2828">2828</a>
+<a href="#2829" id="2829">2829</a>
+<a href="#2830" id="2830">2830</a>
+<a href="#2831" id="2831">2831</a>
+<a href="#2832" id="2832">2832</a>
+<a href="#2833" id="2833">2833</a>
+<a href="#2834" id="2834">2834</a>
+<a href="#2835" id="2835">2835</a>
+<a href="#2836" id="2836">2836</a>
+<a href="#2837" id="2837">2837</a>
+<a href="#2838" id="2838">2838</a>
+<a href="#2839" id="2839">2839</a>
+<a href="#2840" id="2840">2840</a>
+<a href="#2841" id="2841">2841</a>
+<a href="#2842" id="2842">2842</a>
+<a href="#2843" id="2843">2843</a>
+<a href="#2844" id="2844">2844</a>
+<a href="#2845" id="2845">2845</a>
+<a href="#2846" id="2846">2846</a>
+<a href="#2847" id="2847">2847</a>
+<a href="#2848" id="2848">2848</a>
+<a href="#2849" id="2849">2849</a>
+<a href="#2850" id="2850">2850</a>
+<a href="#2851" id="2851">2851</a>
+<a href="#2852" id="2852">2852</a>
+<a href="#2853" id="2853">2853</a>
+<a href="#2854" id="2854">2854</a>
+<a href="#2855" id="2855">2855</a>
+<a href="#2856" id="2856">2856</a>
+<a href="#2857" id="2857">2857</a>
+<a href="#2858" id="2858">2858</a>
+<a href="#2859" id="2859">2859</a>
+<a href="#2860" id="2860">2860</a>
+<a href="#2861" id="2861">2861</a>
+<a href="#2862" id="2862">2862</a>
+<a href="#2863" id="2863">2863</a>
+<a href="#2864" id="2864">2864</a>
+<a href="#2865" id="2865">2865</a>
+<a href="#2866" id="2866">2866</a>
+<a href="#2867" id="2867">2867</a>
+<a href="#2868" id="2868">2868</a>
+<a href="#2869" id="2869">2869</a>
+<a href="#2870" id="2870">2870</a>
+<a href="#2871" id="2871">2871</a>
+<a href="#2872" id="2872">2872</a>
+<a href="#2873" id="2873">2873</a>
+<a href="#2874" id="2874">2874</a>
+<a href="#2875" id="2875">2875</a>
+<a href="#2876" id="2876">2876</a>
+<a href="#2877" id="2877">2877</a>
+<a href="#2878" id="2878">2878</a>
+<a href="#2879" id="2879">2879</a>
+<a href="#2880" id="2880">2880</a>
+<a href="#2881" id="2881">2881</a>
+<a href="#2882" id="2882">2882</a>
+<a href="#2883" id="2883">2883</a>
+<a href="#2884" id="2884">2884</a>
+<a href="#2885" id="2885">2885</a>
+<a href="#2886" id="2886">2886</a>
+<a href="#2887" id="2887">2887</a>
+<a href="#2888" id="2888">2888</a>
+<a href="#2889" id="2889">2889</a>
+<a href="#2890" id="2890">2890</a>
+<a href="#2891" id="2891">2891</a>
+<a href="#2892" id="2892">2892</a>
+<a href="#2893" id="2893">2893</a>
+<a href="#2894" id="2894">2894</a>
+<a href="#2895" id="2895">2895</a>
+<a href="#2896" id="2896">2896</a>
+<a href="#2897" id="2897">2897</a>
+<a href="#2898" id="2898">2898</a>
+<a href="#2899" id="2899">2899</a>
+<a href="#2900" id="2900">2900</a>
+<a href="#2901" id="2901">2901</a>
+<a href="#2902" id="2902">2902</a>
+<a href="#2903" id="2903">2903</a>
+<a href="#2904" id="2904">2904</a>
+<a href="#2905" id="2905">2905</a>
+<a href="#2906" id="2906">2906</a>
+<a href="#2907" id="2907">2907</a>
+<a href="#2908" id="2908">2908</a>
 </pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -2503,7 +2942,7 @@
 <span class="kw">use super</span>::{
     Datum, FieldSummary, FormatVersion, ManifestContentType, ManifestFile, PartitionSpec,
     PrimitiveLiteral, PrimitiveType, Schema, SchemaId, SchemaRef, Struct, StructType,
-    INITIAL_SEQUENCE_NUMBER, UNASSIGNED_SEQUENCE_NUMBER,
+    INITIAL_SEQUENCE_NUMBER, UNASSIGNED_SEQUENCE_NUMBER, UNASSIGNED_SNAPSHOT_ID,
 };
 <span class="kw">use </span><span class="kw">crate</span>::error::Result;
 <span class="kw">use </span><span class="kw">crate</span>::io::OutputFile;
@@ -2583,11 +3022,75 @@
     }
 }
 
+<span class="doccomment">/// The builder used to create a [`ManifestWriter`].
+</span><span class="kw">pub struct </span>ManifestWriterBuilder {
+    output: OutputFile,
+    snapshot_id: <span class="prelude-ty">Option</span>&lt;i64&gt;,
+    key_metadata: Vec&lt;u8&gt;,
+    schema: SchemaRef,
+    partition_spec: PartitionSpec,
+}
+
+<span class="kw">impl </span>ManifestWriterBuilder {
+    <span class="doccomment">/// Create a new builder.
+    </span><span class="kw">pub fn </span>new(
+        output: OutputFile,
+        snapshot_id: <span class="prelude-ty">Option</span>&lt;i64&gt;,
+        key_metadata: Vec&lt;u8&gt;,
+        schema: SchemaRef,
+        partition_spec: PartitionSpec,
+    ) -&gt; <span class="self">Self </span>{
+        <span class="self">Self </span>{
+            output,
+            snapshot_id,
+            key_metadata,
+            schema,
+            partition_spec,
+        }
+    }
+
+    <span class="doccomment">/// Build a [`ManifestWriter`] for format version 1.
+    </span><span class="kw">pub fn </span>build_v1(<span class="self">self</span>) -&gt; ManifestWriter {
+        <span class="kw">let </span>metadata = ManifestMetadata::builder()
+            .schema_id(<span class="self">self</span>.schema.schema_id())
+            .schema(<span class="self">self</span>.schema)
+            .partition_spec(<span class="self">self</span>.partition_spec)
+            .format_version(FormatVersion::V1)
+            .content(ManifestContentType::Data)
+            .build();
+        ManifestWriter::new(<span class="self">self</span>.output, <span class="self">self</span>.snapshot_id, <span class="self">self</span>.key_metadata, metadata)
+    }
+
+    <span class="doccomment">/// Build a [`ManifestWriter`] for format version 2, data content.
+    </span><span class="kw">pub fn </span>build_v2_data(<span class="self">self</span>) -&gt; ManifestWriter {
+        <span class="kw">let </span>metadata = ManifestMetadata::builder()
+            .schema_id(<span class="self">self</span>.schema.schema_id())
+            .schema(<span class="self">self</span>.schema)
+            .partition_spec(<span class="self">self</span>.partition_spec)
+            .format_version(FormatVersion::V2)
+            .content(ManifestContentType::Data)
+            .build();
+        ManifestWriter::new(<span class="self">self</span>.output, <span class="self">self</span>.snapshot_id, <span class="self">self</span>.key_metadata, metadata)
+    }
+
+    <span class="doccomment">/// Build a [`ManifestWriter`] for format version 2, deletes content.
+    </span><span class="kw">pub fn </span>build_v2_deletes(<span class="self">self</span>) -&gt; ManifestWriter {
+        <span class="kw">let </span>metadata = ManifestMetadata::builder()
+            .schema_id(<span class="self">self</span>.schema.schema_id())
+            .schema(<span class="self">self</span>.schema)
+            .partition_spec(<span class="self">self</span>.partition_spec)
+            .format_version(FormatVersion::V2)
+            .content(ManifestContentType::Deletes)
+            .build();
+        ManifestWriter::new(<span class="self">self</span>.output, <span class="self">self</span>.snapshot_id, <span class="self">self</span>.key_metadata, metadata)
+    }
+}
+
 <span class="doccomment">/// A manifest writer.
 </span><span class="kw">pub struct </span>ManifestWriter {
     output: OutputFile,
 
-    snapshot_id: i64,
+    snapshot_id: <span class="prelude-ty">Option</span>&lt;i64&gt;,
 
     added_files: u32,
     added_rows: u64,
@@ -2600,7 +3103,9 @@
 
     key_metadata: Vec&lt;u8&gt;,
 
-    partitions: Vec&lt;Struct&gt;,
+    manifset_entries: Vec&lt;ManifestEntry&gt;,
+
+    metadata: ManifestMetadata,
 }
 
 <span class="kw">struct </span>PartitionFieldStats {
@@ -2667,7 +3172,12 @@
 
 <span class="kw">impl </span>ManifestWriter {
     <span class="doccomment">/// Create a new manifest writer.
-    </span><span class="kw">pub fn </span>new(output: OutputFile, snapshot_id: i64, key_metadata: Vec&lt;u8&gt;) -&gt; <span class="self">Self </span>{
+    </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>new(
+        output: OutputFile,
+        snapshot_id: <span class="prelude-ty">Option</span>&lt;i64&gt;,
+        key_metadata: Vec&lt;u8&gt;,
+        metadata: ManifestMetadata,
+    ) -&gt; <span class="self">Self </span>{
         <span class="self">Self </span>{
             output,
             snapshot_id,
@@ -2679,7 +3189,8 @@
             deleted_rows: <span class="number">0</span>,
             min_seq_num: <span class="prelude-val">None</span>,
             key_metadata,
-            partitions: <span class="macro">vec!</span>[],
+            manifset_entries: Vec::new(),
+            metadata,
         }
     }
 
@@ -2687,14 +3198,13 @@
         <span class="kw-2">&amp;mut </span><span class="self">self</span>,
         partition_type: <span class="kw-2">&amp;</span>StructType,
     ) -&gt; <span class="prelude-ty">Result</span>&lt;Vec&lt;FieldSummary&gt;&gt; {
-        <span class="kw">let </span>partitions = std::mem::take(<span class="kw-2">&amp;mut </span><span class="self">self</span>.partitions);
         <span class="kw">let </span><span class="kw-2">mut </span>field_stats: Vec&lt;<span class="kw">_</span>&gt; = partition_type
             .fields()
             .iter()
             .map(|f| PartitionFieldStats::new(f.field_type.as_primitive_type().unwrap().clone()))
             .collect();
-        <span class="kw">for </span>partition <span class="kw">in </span>partitions {
-            <span class="kw">for </span>(literal, stat) <span class="kw">in </span>partition.into_iter().zip_eq(field_stats.iter_mut()) {
+        <span class="kw">for </span>partition <span class="kw">in </span><span class="self">self</span>.manifset_entries.iter().map(|e| <span class="kw-2">&amp;</span>e.data_file.partition) {
+            <span class="kw">for </span>(literal, stat) <span class="kw">in </span>partition.iter().zip_eq(field_stats.iter_mut()) {
                 <span class="kw">let </span>primitive_literal = literal.map(|v| v.as_primitive_literal().unwrap());
                 stat.update(primitive_literal)<span class="question-mark">?</span>;
             }
@@ -2702,15 +3212,184 @@
         <span class="prelude-val">Ok</span>(field_stats.into_iter().map(|stat| stat.finish()).collect())
     }
 
-    <span class="doccomment">/// Write a manifest.
-    </span><span class="kw">pub async fn </span>write(<span class="kw-2">mut </span><span class="self">self</span>, manifest: Manifest) -&gt; <span class="prelude-ty">Result</span>&lt;ManifestFile&gt; {
+    <span class="kw">fn </span>check_data_file(<span class="kw-2">&amp;</span><span class="self">self</span>, data_file: <span class="kw-2">&amp;</span>DataFile) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">match </span><span class="self">self</span>.metadata.content {
+            ManifestContentType::Data =&gt; {
+                <span class="kw">if </span>data_file.content != DataContentType::Data {
+                    <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                        ErrorKind::DataInvalid,
+                        <span class="macro">format!</span>(
+                            <span class="string">"Content type of entry {:?} should have DataContentType::Data"</span>,
+                            data_file.content
+                        ),
+                    ));
+                }
+            }
+            ManifestContentType::Deletes =&gt; {
+                <span class="kw">if </span>data_file.content != DataContentType::EqualityDeletes
+                    &amp;&amp; data_file.content != DataContentType::PositionDeletes
+                {
+                    <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                    ErrorKind::DataInvalid,
+                    <span class="macro">format!</span>(<span class="string">"Content type of entry {:?} should have DataContentType::EqualityDeletes or DataContentType::PositionDeletes"</span>, data_file.content),
+                ));
+                }
+            }
+        }
+        <span class="prelude-val">Ok</span>(())
+    }
+
+    <span class="doccomment">/// Add a new manifest entry. This method will update following status of the entry:
+    /// - Update the entry status to `Added`
+    /// - Set the snapshot id to the current snapshot id
+    /// - Set the sequence number to `None` if it is invalid(smaller than 0)
+    /// - Set the file sequence number to `None`
+    </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>add_entry(<span class="kw-2">&amp;mut </span><span class="self">self</span>, <span class="kw-2">mut </span>entry: ManifestEntry) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="self">self</span>.check_data_file(<span class="kw-2">&amp;</span>entry.data_file)<span class="question-mark">?</span>;
+        <span class="kw">if </span>entry.sequence_number().is_some_and(|n| n &gt;= <span class="number">0</span>) {
+            entry.status = ManifestStatus::Added;
+            entry.snapshot_id = <span class="self">self</span>.snapshot_id;
+            entry.file_sequence_number = <span class="prelude-val">None</span>;
+        } <span class="kw">else </span>{
+            entry.status = ManifestStatus::Added;
+            entry.snapshot_id = <span class="self">self</span>.snapshot_id;
+            entry.sequence_number = <span class="prelude-val">None</span>;
+            entry.file_sequence_number = <span class="prelude-val">None</span>;
+        };
+        <span class="self">self</span>.add_entry_inner(entry)<span class="question-mark">?</span>;
+        <span class="prelude-val">Ok</span>(())
+    }
+
+    <span class="doccomment">/// Add file as an added entry with a specific sequence number. The entry's snapshot ID will be this manifest's snapshot ID. The entry's data sequence
+    /// number will be the provided data sequence number. The entry's file sequence number will be
+    /// assigned at commit.
+    </span><span class="kw">pub fn </span>add_file(<span class="kw-2">&amp;mut </span><span class="self">self</span>, data_file: DataFile, sequence_number: i64) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="self">self</span>.check_data_file(<span class="kw-2">&amp;</span>data_file)<span class="question-mark">?</span>;
+        <span class="kw">let </span>entry = ManifestEntry {
+            status: ManifestStatus::Added,
+            snapshot_id: <span class="self">self</span>.snapshot_id,
+            sequence_number: (sequence_number &gt;= <span class="number">0</span>).then_some(sequence_number),
+            file_sequence_number: <span class="prelude-val">None</span>,
+            data_file,
+        };
+        <span class="self">self</span>.add_entry_inner(entry)<span class="question-mark">?</span>;
+        <span class="prelude-val">Ok</span>(())
+    }
+
+    <span class="doccomment">/// Add a delete manifest entry. This method will update following status of the entry:
+    /// - Update the entry status to `Deleted`
+    /// - Set the snapshot id to the current snapshot id
+    ///
+    /// # TODO
+    /// Remove this allow later
+    </span><span class="attr">#[allow(dead_code)]
+    </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>add_delete_entry(<span class="kw-2">&amp;mut </span><span class="self">self</span>, <span class="kw-2">mut </span>entry: ManifestEntry) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="self">self</span>.check_data_file(<span class="kw-2">&amp;</span>entry.data_file)<span class="question-mark">?</span>;
+        entry.status = ManifestStatus::Deleted;
+        entry.snapshot_id = <span class="self">self</span>.snapshot_id;
+        <span class="self">self</span>.add_entry_inner(entry)<span class="question-mark">?</span>;
+        <span class="prelude-val">Ok</span>(())
+    }
+
+    <span class="doccomment">/// Add a file as delete manifest entry. The entry's snapshot ID will be this manifest's snapshot ID.
+    /// However, the original data and file sequence numbers of the file must be preserved when
+    /// the file is marked as deleted.
+    </span><span class="kw">pub fn </span>add_delete_file(
+        <span class="kw-2">&amp;mut </span><span class="self">self</span>,
+        data_file: DataFile,
+        sequence_number: i64,
+        file_sequence_number: <span class="prelude-ty">Option</span>&lt;i64&gt;,
+    ) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="self">self</span>.check_data_file(<span class="kw-2">&amp;</span>data_file)<span class="question-mark">?</span>;
+        <span class="kw">let </span>entry = ManifestEntry {
+            status: ManifestStatus::Deleted,
+            snapshot_id: <span class="self">self</span>.snapshot_id,
+            sequence_number: <span class="prelude-val">Some</span>(sequence_number),
+            file_sequence_number,
+            data_file,
+        };
+        <span class="self">self</span>.add_entry_inner(entry)<span class="question-mark">?</span>;
+        <span class="prelude-val">Ok</span>(())
+    }
+
+    <span class="doccomment">/// Add an existing manifest entry. This method will update following status of the entry:
+    /// - Update the entry status to `Existing`
+    ///
+    /// # TODO
+    /// Remove this allow later
+    </span><span class="attr">#[allow(dead_code)]
+    </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>add_existing_entry(<span class="kw-2">&amp;mut </span><span class="self">self</span>, <span class="kw-2">mut </span>entry: ManifestEntry) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="self">self</span>.check_data_file(<span class="kw-2">&amp;</span>entry.data_file)<span class="question-mark">?</span>;
+        entry.status = ManifestStatus::Existing;
+        <span class="self">self</span>.add_entry_inner(entry)<span class="question-mark">?</span>;
+        <span class="prelude-val">Ok</span>(())
+    }
+
+    <span class="doccomment">/// Add an file as existing manifest entry. The original data and file sequence numbers, snapshot ID,
+    /// which were assigned at commit, must be preserved when adding an existing entry.
+    </span><span class="kw">pub fn </span>add_existing_file(
+        <span class="kw-2">&amp;mut </span><span class="self">self</span>,
+        data_file: DataFile,
+        snapshot_id: i64,
+        sequence_number: i64,
+        file_sequence_number: <span class="prelude-ty">Option</span>&lt;i64&gt;,
+    ) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="self">self</span>.check_data_file(<span class="kw-2">&amp;</span>data_file)<span class="question-mark">?</span>;
+        <span class="kw">let </span>entry = ManifestEntry {
+            status: ManifestStatus::Existing,
+            snapshot_id: <span class="prelude-val">Some</span>(snapshot_id),
+            sequence_number: <span class="prelude-val">Some</span>(sequence_number),
+            file_sequence_number,
+            data_file,
+        };
+        <span class="self">self</span>.add_entry_inner(entry)<span class="question-mark">?</span>;
+        <span class="prelude-val">Ok</span>(())
+    }
+
+    <span class="kw">fn </span>add_entry_inner(<span class="kw-2">&amp;mut </span><span class="self">self</span>, entry: ManifestEntry) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="comment">// Check if the entry has sequence number
+        </span><span class="kw">if </span>(entry.status == ManifestStatus::Deleted || entry.status == ManifestStatus::Existing)
+            &amp;&amp; (entry.sequence_number.is_none() || entry.file_sequence_number.is_none())
+        {
+            <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+                ErrorKind::DataInvalid,
+                <span class="string">"Manifest entry with status Existing or Deleted should have sequence number"</span>,
+            ));
+        }
+
+        <span class="comment">// Update the statistics
+        </span><span class="kw">match </span>entry.status {
+            ManifestStatus::Added =&gt; {
+                <span class="self">self</span>.added_files += <span class="number">1</span>;
+                <span class="self">self</span>.added_rows += entry.data_file.record_count;
+            }
+            ManifestStatus::Deleted =&gt; {
+                <span class="self">self</span>.deleted_files += <span class="number">1</span>;
+                <span class="self">self</span>.deleted_rows += entry.data_file.record_count;
+            }
+            ManifestStatus::Existing =&gt; {
+                <span class="self">self</span>.existing_files += <span class="number">1</span>;
+                <span class="self">self</span>.existing_rows += entry.data_file.record_count;
+            }
+        }
+        <span class="kw">if </span>entry.is_alive() {
+            <span class="kw">if let </span><span class="prelude-val">Some</span>(seq_num) = entry.sequence_number {
+                <span class="self">self</span>.min_seq_num = <span class="prelude-val">Some</span>(<span class="self">self</span>.min_seq_num.map_or(seq_num, |v| min(v, seq_num)));
+            }
+        }
+        <span class="self">self</span>.manifset_entries.push(entry);
+        <span class="prelude-val">Ok</span>(())
+    }
+
+    <span class="doccomment">/// Write manifest file and return it.
+    </span><span class="kw">pub async fn </span>write_manifest_file(<span class="kw-2">mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;ManifestFile&gt; {
         <span class="comment">// Create the avro writer
-        </span><span class="kw">let </span>partition_type = manifest
-            .metadata
+        </span><span class="kw">let </span>partition_type = <span class="self">self
+            </span>.metadata
             .partition_spec
-            .partition_type(<span class="kw-2">&amp;</span>manifest.metadata.schema)<span class="question-mark">?</span>;
-        <span class="kw">let </span>table_schema = <span class="kw-2">&amp;</span>manifest.metadata.schema;
-        <span class="kw">let </span>avro_schema = <span class="kw">match </span>manifest.metadata.format_version {
+            .partition_type(<span class="kw-2">&amp;</span><span class="self">self</span>.metadata.schema)<span class="question-mark">?</span>;
+        <span class="kw">let </span>table_schema = <span class="kw-2">&amp;</span><span class="self">self</span>.metadata.schema;
+        <span class="kw">let </span>avro_schema = <span class="kw">match </span><span class="self">self</span>.metadata.format_version {
             FormatVersion::V1 =&gt; manifest_schema_v1(<span class="kw-2">&amp;</span>partition_type)<span class="question-mark">?</span>,
             FormatVersion::V2 =&gt; manifest_schema_v2(<span class="kw-2">&amp;</span>partition_type)<span class="question-mark">?</span>,
         };
@@ -2728,69 +3407,36 @@
         )<span class="question-mark">?</span>;
         avro_writer.add_user_metadata(
             <span class="string">"partition-spec"</span>.to_string(),
-            to_vec(<span class="kw-2">&amp;</span>manifest.metadata.partition_spec.fields()).map_err(|err| {
+            to_vec(<span class="kw-2">&amp;</span><span class="self">self</span>.metadata.partition_spec.fields()).map_err(|err| {
                 Error::new(ErrorKind::DataInvalid, <span class="string">"Fail to serialize partition spec"</span>)
                     .with_source(err)
             })<span class="question-mark">?</span>,
         )<span class="question-mark">?</span>;
         avro_writer.add_user_metadata(
             <span class="string">"partition-spec-id"</span>.to_string(),
-            manifest.metadata.partition_spec.spec_id().to_string(),
+            <span class="self">self</span>.metadata.partition_spec.spec_id().to_string(),
         )<span class="question-mark">?</span>;
         avro_writer.add_user_metadata(
             <span class="string">"format-version"</span>.to_string(),
-            (manifest.metadata.format_version <span class="kw">as </span>u8).to_string(),
+            (<span class="self">self</span>.metadata.format_version <span class="kw">as </span>u8).to_string(),
         )<span class="question-mark">?</span>;
-        <span class="kw">if </span>manifest.metadata.format_version == FormatVersion::V2 {
+        <span class="kw">if </span><span class="self">self</span>.metadata.format_version == FormatVersion::V2 {
             avro_writer
-                .add_user_metadata(<span class="string">"content"</span>.to_string(), manifest.metadata.content.to_string())<span class="question-mark">?</span>;
+                .add_user_metadata(<span class="string">"content"</span>.to_string(), <span class="self">self</span>.metadata.content.to_string())<span class="question-mark">?</span>;
         }
 
+        <span class="kw">let </span>partition_summary = <span class="self">self</span>.construct_partition_summaries(<span class="kw-2">&amp;</span>partition_type)<span class="question-mark">?</span>;
         <span class="comment">// Write manifest entries
-        </span><span class="kw">for </span>entry <span class="kw">in </span>manifest.entries {
-            <span class="kw">if </span>(entry.status == ManifestStatus::Deleted || entry.status == ManifestStatus::Existing)
-                &amp;&amp; (entry.sequence_number.is_none() || entry.file_sequence_number.is_none())
-            {
-                <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-                    ErrorKind::DataInvalid,
-                    <span class="string">"Manifest entry with status Existing or Deleted should have sequence number"</span>,
-                ));
-            }
-
-            <span class="kw">match </span>entry.status {
-                ManifestStatus::Added =&gt; {
-                    <span class="self">self</span>.added_files += <span class="number">1</span>;
-                    <span class="self">self</span>.added_rows += entry.data_file.record_count;
-                }
-                ManifestStatus::Deleted =&gt; {
-                    <span class="self">self</span>.deleted_files += <span class="number">1</span>;
-                    <span class="self">self</span>.deleted_rows += entry.data_file.record_count;
-                }
-                ManifestStatus::Existing =&gt; {
-                    <span class="self">self</span>.existing_files += <span class="number">1</span>;
-                    <span class="self">self</span>.existing_rows += entry.data_file.record_count;
-                }
-            }
-
-            <span class="kw">if </span>entry.is_alive() {
-                <span class="kw">if let </span><span class="prelude-val">Some</span>(seq_num) = entry.sequence_number {
-                    <span class="self">self</span>.min_seq_num = <span class="prelude-val">Some</span>(<span class="self">self</span>.min_seq_num.map_or(seq_num, |v| min(v, seq_num)));
-                }
-            }
-
-            <span class="self">self</span>.partitions.push(entry.data_file.partition.clone());
-
-            <span class="kw">let </span>value = <span class="kw">match </span>manifest.metadata.format_version {
-                FormatVersion::V1 =&gt; to_value(_serde::ManifestEntryV1::try_from(
-                    (<span class="kw-2">*</span>entry).clone(),
-                    <span class="kw-2">&amp;</span>partition_type,
-                )<span class="question-mark">?</span>)<span class="question-mark">?
-                </span>.resolve(<span class="kw-2">&amp;</span>avro_schema)<span class="question-mark">?</span>,
-                FormatVersion::V2 =&gt; to_value(_serde::ManifestEntryV2::try_from(
-                    (<span class="kw-2">*</span>entry).clone(),
-                    <span class="kw-2">&amp;</span>partition_type,
-                )<span class="question-mark">?</span>)<span class="question-mark">?
-                </span>.resolve(<span class="kw-2">&amp;</span>avro_schema)<span class="question-mark">?</span>,
+        </span><span class="kw">for </span>entry <span class="kw">in </span>std::mem::take(<span class="kw-2">&amp;mut </span><span class="self">self</span>.manifset_entries) {
+            <span class="kw">let </span>value = <span class="kw">match </span><span class="self">self</span>.metadata.format_version {
+                FormatVersion::V1 =&gt; {
+                    to_value(_serde::ManifestEntryV1::try_from(entry, <span class="kw-2">&amp;</span>partition_type)<span class="question-mark">?</span>)<span class="question-mark">?
+                        </span>.resolve(<span class="kw-2">&amp;</span>avro_schema)<span class="question-mark">?
+                </span>}
+                FormatVersion::V2 =&gt; {
+                    to_value(_serde::ManifestEntryV2::try_from(entry, <span class="kw-2">&amp;</span>partition_type)<span class="question-mark">?</span>)<span class="question-mark">?
+                        </span>.resolve(<span class="kw-2">&amp;</span>avro_schema)<span class="question-mark">?
+                </span>}
             };
 
             avro_writer.append(value)<span class="question-mark">?</span>;
@@ -2800,18 +3446,16 @@
         <span class="kw">let </span>length = content.len();
         <span class="self">self</span>.output.write(Bytes::from(content)).<span class="kw">await</span><span class="question-mark">?</span>;
 
-        <span class="kw">let </span>partition_summary = <span class="self">self</span>.construct_partition_summaries(<span class="kw-2">&amp;</span>partition_type)<span class="question-mark">?</span>;
-
         <span class="prelude-val">Ok</span>(ManifestFile {
             manifest_path: <span class="self">self</span>.output.location().to_string(),
             manifest_length: length <span class="kw">as </span>i64,
-            partition_spec_id: manifest.metadata.partition_spec.spec_id(),
-            content: manifest.metadata.content,
+            partition_spec_id: <span class="self">self</span>.metadata.partition_spec.spec_id(),
+            content: <span class="self">self</span>.metadata.content,
             <span class="comment">// sequence_number and min_sequence_number with UNASSIGNED_SEQUENCE_NUMBER will be replace with
             // real sequence number in `ManifestListWriter`.
             </span>sequence_number: UNASSIGNED_SEQUENCE_NUMBER,
             min_sequence_number: <span class="self">self</span>.min_seq_num.unwrap_or(UNASSIGNED_SEQUENCE_NUMBER),
-            added_snapshot_id: <span class="self">self</span>.snapshot_id,
+            added_snapshot_id: <span class="self">self</span>.snapshot_id.unwrap_or(UNASSIGNED_SNAPSHOT_ID),
             added_files_count: <span class="prelude-val">Some</span>(<span class="self">self</span>.added_files),
             existing_files_count: <span class="prelude-val">Some</span>(<span class="self">self</span>.existing_files),
             deleted_files_count: <span class="prelude-val">Some</span>(<span class="self">self</span>.deleted_files),
@@ -4168,16 +4812,18 @@
                 .build()
                 .unwrap(),
         );
-        <span class="kw">let </span>manifest = Manifest {
-            metadata: ManifestMetadata {
-                schema_id: <span class="number">0</span>,
-                schema: schema.clone(),
-                partition_spec: PartitionSpec::builder(schema).with_spec_id(<span class="number">0</span>).build().unwrap(),
-                content: ManifestContentType::Data,
-                format_version: FormatVersion::V2,
-            },
-            entries: <span class="macro">vec!</span>[
-                Arc::new(ManifestEntry {
+        <span class="kw">let </span>metadata = ManifestMetadata {
+            schema_id: <span class="number">0</span>,
+            schema: schema.clone(),
+            partition_spec: PartitionSpec::builder(schema)
+                .with_spec_id(<span class="number">0</span>)
+                .build()
+                .unwrap(),
+            content: ManifestContentType::Data,
+            format_version: FormatVersion::V2,
+        };
+        <span class="kw">let </span><span class="kw-2">mut </span>entries = <span class="macro">vec!</span>[
+                ManifestEntry {
                     status: ManifestStatus::Added,
                     snapshot_id: <span class="prelude-val">None</span>,
                     sequence_number: <span class="prelude-val">None</span>,
@@ -4200,13 +4846,34 @@
                         equality_ids: Vec::new(),
                         sort_order_id: <span class="prelude-val">None</span>,
                     }
-                })
-            ]
-        };
-
-        <span class="kw">let </span>writer = |output_file: OutputFile| ManifestWriter::new(output_file, <span class="number">1</span>, <span class="macro">vec!</span>[]);
+                }
+            ];
 
-        test_manifest_read_write(manifest, writer).<span class="kw">await</span>;
+        <span class="comment">// write manifest to file
+        </span><span class="kw">let </span>tmp_dir = TempDir::new().unwrap();
+        <span class="kw">let </span>path = tmp_dir.path().join(<span class="string">"test_manifest.avro"</span>);
+        <span class="kw">let </span>io = FileIOBuilder::new_fs_io().build().unwrap();
+        <span class="kw">let </span>output_file = io.new_output(path.to_str().unwrap()).unwrap();
+        <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestWriterBuilder::new(
+            output_file,
+            <span class="prelude-val">Some</span>(<span class="number">1</span>),
+            <span class="macro">vec!</span>[],
+            metadata.schema.clone(),
+            metadata.partition_spec.clone(),
+        )
+        .build_v2_data();
+        <span class="kw">for </span>entry <span class="kw">in </span><span class="kw-2">&amp;</span>entries {
+            writer.add_entry(entry.clone()).unwrap();
+        }
+        writer.write_manifest_file().<span class="kw">await</span>.unwrap();
+
+        <span class="comment">// read back the manifest file and check the content
+        </span><span class="kw">let </span>actual_manifest =
+            Manifest::parse_avro(fs::read(path).expect(<span class="string">"read_file must succeed"</span>).as_slice())
+                .unwrap();
+        <span class="comment">// The snapshot id is assigned when the entry is added to the manifest.
+        </span>entries[<span class="number">0</span>].snapshot_id = <span class="prelude-val">Some</span>(<span class="number">1</span>);
+        <span class="macro">assert_eq!</span>(actual_manifest, Manifest::new(metadata, entries));
     }
 
     <span class="attr">#[tokio::test]
@@ -4281,17 +4948,21 @@
                 .build()
                 .unwrap(),
         );
-        <span class="kw">let </span>manifest = Manifest {
-            metadata: ManifestMetadata {
-                schema_id: <span class="number">0</span>,
-                schema: schema.clone(),
-                partition_spec: PartitionSpec::builder(schema)
-                .with_spec_id(<span class="number">0</span>).add_partition_field(<span class="string">"v_int"</span>, <span class="string">"v_int"</span>, Transform::Identity).unwrap()
-                .add_partition_field(<span class="string">"v_long"</span>, <span class="string">"v_long"</span>, Transform::Identity).unwrap().build().unwrap(),
-                content: ManifestContentType::Data,
-                format_version: FormatVersion::V2,
-            },
-            entries: <span class="macro">vec!</span>[Arc::new(ManifestEntry {
+        <span class="kw">let </span>metadata = ManifestMetadata {
+            schema_id: <span class="number">0</span>,
+            schema: schema.clone(),
+            partition_spec: PartitionSpec::builder(schema)
+                .with_spec_id(<span class="number">0</span>)
+                .add_partition_field(<span class="string">"v_int"</span>, <span class="string">"v_int"</span>, Transform::Identity)
+                .unwrap()
+                .add_partition_field(<span class="string">"v_long"</span>, <span class="string">"v_long"</span>, Transform::Identity)
+                .unwrap()
+                .build()
+                .unwrap(),
+            content: ManifestContentType::Data,
+            format_version: FormatVersion::V2,
+        };
+        <span class="kw">let </span><span class="kw-2">mut </span>entries = <span class="macro">vec!</span>[ManifestEntry {
                 status: ManifestStatus::Added,
                 snapshot_id: <span class="prelude-val">None</span>,
                 sequence_number: <span class="prelude-val">None</span>,
@@ -4356,15 +5027,38 @@
                     equality_ids: <span class="macro">vec!</span>[],
                     sort_order_id: <span class="prelude-val">None</span>,
                 },
-            })],
-        };
-
-        <span class="kw">let </span>writer = |output_file: OutputFile| ManifestWriter::new(output_file, <span class="number">1</span>, <span class="macro">vec!</span>[]);
+            }];
 
-        <span class="kw">let </span>res = test_manifest_read_write(manifest, writer).<span class="kw">await</span>;
+        <span class="comment">// write manifest to file and check the return manifest file.
+        </span><span class="kw">let </span>tmp_dir = TempDir::new().unwrap();
+        <span class="kw">let </span>path = tmp_dir.path().join(<span class="string">"test_manifest.avro"</span>);
+        <span class="kw">let </span>io = FileIOBuilder::new_fs_io().build().unwrap();
+        <span class="kw">let </span>output_file = io.new_output(path.to_str().unwrap()).unwrap();
+        <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestWriterBuilder::new(
+            output_file,
+            <span class="prelude-val">Some</span>(<span class="number">2</span>),
+            <span class="macro">vec!</span>[],
+            metadata.schema.clone(),
+            metadata.partition_spec.clone(),
+        )
+        .build_v2_data();
+        <span class="kw">for </span>entry <span class="kw">in </span><span class="kw-2">&amp;</span>entries {
+            writer.add_entry(entry.clone()).unwrap();
+        }
+        <span class="kw">let </span>manifest_file = writer.write_manifest_file().<span class="kw">await</span>.unwrap();
+        <span class="macro">assert_eq!</span>(manifest_file.sequence_number, UNASSIGNED_SEQUENCE_NUMBER);
+        <span class="macro">assert_eq!</span>(
+            manifest_file.min_sequence_number,
+            UNASSIGNED_SEQUENCE_NUMBER
+        );
 
-        <span class="macro">assert_eq!</span>(res.sequence_number, UNASSIGNED_SEQUENCE_NUMBER);
-        <span class="macro">assert_eq!</span>(res.min_sequence_number, UNASSIGNED_SEQUENCE_NUMBER);
+        <span class="comment">// read back the manifest file and check the content
+        </span><span class="kw">let </span>actual_manifest =
+            Manifest::parse_avro(fs::read(path).expect(<span class="string">"read_file must succeed"</span>).as_slice())
+                .unwrap();
+        <span class="comment">// The snapshot id is assigned when the entry is added to the manifest.
+        </span>entries[<span class="number">0</span>].snapshot_id = <span class="prelude-val">Some</span>(<span class="number">2</span>);
+        <span class="macro">assert_eq!</span>(actual_manifest, Manifest::new(metadata, entries));
     }
 
     <span class="attr">#[tokio::test]
@@ -4392,15 +5086,17 @@
                 .build()
                 .unwrap(),
         );
-        <span class="kw">let </span>manifest = Manifest {
-            metadata: ManifestMetadata {
-                schema_id: <span class="number">1</span>,
-                schema: schema.clone(),
-                partition_spec: PartitionSpec::builder(schema).with_spec_id(<span class="number">0</span>).build().unwrap(),
-                content: ManifestContentType::Data,
-                format_version: FormatVersion::V1,
-            },
-            entries: <span class="macro">vec!</span>[Arc::new(ManifestEntry {
+        <span class="kw">let </span>metadata = ManifestMetadata {
+            schema_id: <span class="number">1</span>,
+            schema: schema.clone(),
+            partition_spec: PartitionSpec::builder(schema)
+                .with_spec_id(<span class="number">0</span>)
+                .build()
+                .unwrap(),
+            content: ManifestContentType::Data,
+            format_version: FormatVersion::V1,
+        };
+        <span class="kw">let </span><span class="kw-2">mut </span>entries = <span class="macro">vec!</span>[ManifestEntry {
                 status: ManifestStatus::Added,
                 snapshot_id: <span class="prelude-val">Some</span>(<span class="number">0</span>),
                 sequence_number: <span class="prelude-val">Some</span>(<span class="number">0</span>),
@@ -4423,13 +5119,33 @@
                     equality_ids: <span class="macro">vec!</span>[],
                     sort_order_id: <span class="prelude-val">Some</span>(<span class="number">0</span>),
                 }
-            })],
-        };
-
-        <span class="kw">let </span>writer =
-            |output_file: OutputFile| ManifestWriter::new(output_file, <span class="number">2966623707104393227</span>, <span class="macro">vec!</span>[]);
+            }];
 
-        test_manifest_read_write(manifest, writer).<span class="kw">await</span>;
+        <span class="comment">// write manifest to file
+        </span><span class="kw">let </span>tmp_dir = TempDir::new().unwrap();
+        <span class="kw">let </span>path = tmp_dir.path().join(<span class="string">"test_manifest.avro"</span>);
+        <span class="kw">let </span>io = FileIOBuilder::new_fs_io().build().unwrap();
+        <span class="kw">let </span>output_file = io.new_output(path.to_str().unwrap()).unwrap();
+        <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestWriterBuilder::new(
+            output_file,
+            <span class="prelude-val">Some</span>(<span class="number">3</span>),
+            <span class="macro">vec!</span>[],
+            metadata.schema.clone(),
+            metadata.partition_spec.clone(),
+        )
+        .build_v1();
+        <span class="kw">for </span>entry <span class="kw">in </span><span class="kw-2">&amp;</span>entries {
+            writer.add_entry(entry.clone()).unwrap();
+        }
+        writer.write_manifest_file().<span class="kw">await</span>.unwrap();
+
+        <span class="comment">// read back the manifest file and check the content
+        </span><span class="kw">let </span>actual_manifest =
+            Manifest::parse_avro(fs::read(path).expect(<span class="string">"read_file must succeed"</span>).as_slice())
+                .unwrap();
+        <span class="comment">// The snapshot id is assigned when the entry is added to the manifest.
+        </span>entries[<span class="number">0</span>].snapshot_id = <span class="prelude-val">Some</span>(<span class="number">3</span>);
+        <span class="macro">assert_eq!</span>(actual_manifest, Manifest::new(metadata, entries));
     }
 
     <span class="attr">#[tokio::test]
@@ -4456,16 +5172,19 @@
                 .build()
                 .unwrap(),
         );
-        <span class="kw">let </span>manifest = Manifest {
-            metadata: ManifestMetadata {
-                schema_id: <span class="number">0</span>,
-                schema: schema.clone(),
-                partition_spec: PartitionSpec::builder(schema).add_partition_field(<span class="string">"category"</span>, <span class="string">"category"</span>, Transform::Identity).unwrap().build().unwrap(),
-                content: ManifestContentType::Data,
-                format_version: FormatVersion::V1,
-            },
-            entries: <span class="macro">vec!</span>[
-                Arc::new(ManifestEntry {
+        <span class="kw">let </span>metadata = ManifestMetadata {
+            schema_id: <span class="number">0</span>,
+            schema: schema.clone(),
+            partition_spec: PartitionSpec::builder(schema)
+                .add_partition_field(<span class="string">"category"</span>, <span class="string">"category"</span>, Transform::Identity)
+                .unwrap()
+                .build()
+                .unwrap(),
+            content: ManifestContentType::Data,
+            format_version: FormatVersion::V1,
+        };
+        <span class="kw">let </span><span class="kw-2">mut </span>entries = <span class="macro">vec!</span>[
+                ManifestEntry {
                     status: ManifestStatus::Added,
                     snapshot_id: <span class="prelude-val">Some</span>(<span class="number">0</span>),
                     sequence_number: <span class="prelude-val">Some</span>(<span class="number">0</span>),
@@ -4503,17 +5222,43 @@
                         equality_ids: <span class="macro">vec!</span>[],
                         sort_order_id: <span class="prelude-val">Some</span>(<span class="number">0</span>),
                     },
-                })
-            ]
-        };
-
-        <span class="kw">let </span>writer = |output_file: OutputFile| ManifestWriter::new(output_file, <span class="number">1</span>, <span class="macro">vec!</span>[]);
+                }
+            ];
 
-        <span class="kw">let </span>entry = test_manifest_read_write(manifest, writer).<span class="kw">await</span>;
+        <span class="comment">// write manifest to file
+        </span><span class="kw">let </span>tmp_dir = TempDir::new().unwrap();
+        <span class="kw">let </span>path = tmp_dir.path().join(<span class="string">"test_manifest.avro"</span>);
+        <span class="kw">let </span>io = FileIOBuilder::new_fs_io().build().unwrap();
+        <span class="kw">let </span>output_file = io.new_output(path.to_str().unwrap()).unwrap();
+        <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestWriterBuilder::new(
+            output_file,
+            <span class="prelude-val">Some</span>(<span class="number">2</span>),
+            <span class="macro">vec!</span>[],
+            metadata.schema.clone(),
+            metadata.partition_spec.clone(),
+        )
+        .build_v1();
+        <span class="kw">for </span>entry <span class="kw">in </span><span class="kw-2">&amp;</span>entries {
+            writer.add_entry(entry.clone()).unwrap();
+        }
+        <span class="kw">let </span>manifest_file = writer.write_manifest_file().<span class="kw">await</span>.unwrap();
+        <span class="macro">assert_eq!</span>(manifest_file.partitions.len(), <span class="number">1</span>);
+        <span class="macro">assert_eq!</span>(
+            manifest_file.partitions[<span class="number">0</span>].lower_bound,
+            <span class="prelude-val">Some</span>(Datum::string(<span class="string">"x"</span>))
+        );
+        <span class="macro">assert_eq!</span>(
+            manifest_file.partitions[<span class="number">0</span>].upper_bound,
+            <span class="prelude-val">Some</span>(Datum::string(<span class="string">"x"</span>))
+        );
 
-        <span class="macro">assert_eq!</span>(entry.partitions.len(), <span class="number">1</span>);
-        <span class="macro">assert_eq!</span>(entry.partitions[<span class="number">0</span>].lower_bound, <span class="prelude-val">Some</span>(Datum::string(<span class="string">"x"</span>)));
-        <span class="macro">assert_eq!</span>(entry.partitions[<span class="number">0</span>].upper_bound, <span class="prelude-val">Some</span>(Datum::string(<span class="string">"x"</span>)));
+        <span class="comment">// read back the manifest file and check the content
+        </span><span class="kw">let </span>actual_manifest =
+            Manifest::parse_avro(fs::read(path).expect(<span class="string">"read_file must succeed"</span>).as_slice())
+                .unwrap();
+        <span class="comment">// The snapshot id is assigned when the entry is added to the manifest.
+        </span>entries[<span class="number">0</span>].snapshot_id = <span class="prelude-val">Some</span>(<span class="number">2</span>);
+        <span class="macro">assert_eq!</span>(actual_manifest, Manifest::new(metadata, entries));
     }
 
     <span class="attr">#[tokio::test]
@@ -4535,15 +5280,17 @@
                 .build()
                 .unwrap(),
         );
-        <span class="kw">let </span>manifest = Manifest {
-            metadata: ManifestMetadata {
-                schema_id: <span class="number">0</span>,
-                schema: schema.clone(),
-                partition_spec: PartitionSpec::builder(schema).with_spec_id(<span class="number">0</span>).build().unwrap(),
-                content: ManifestContentType::Data,
-                format_version: FormatVersion::V2,
-            },
-            entries: <span class="macro">vec!</span>[Arc::new(ManifestEntry {
+        <span class="kw">let </span>metadata = ManifestMetadata {
+            schema_id: <span class="number">0</span>,
+            schema: schema.clone(),
+            partition_spec: PartitionSpec::builder(schema)
+                .with_spec_id(<span class="number">0</span>)
+                .build()
+                .unwrap(),
+            content: ManifestContentType::Data,
+            format_version: FormatVersion::V2,
+        };
+        <span class="kw">let </span>entries = <span class="macro">vec!</span>[ManifestEntry {
                 status: ManifestStatus::Added,
                 snapshot_id: <span class="prelude-val">None</span>,
                 sequence_number: <span class="prelude-val">None</span>,
@@ -4578,18 +5325,34 @@
                     equality_ids: <span class="macro">vec!</span>[],
                     sort_order_id: <span class="prelude-val">None</span>,
                 },
-            })],
-        };
-
-        <span class="kw">let </span>writer = |output_file: OutputFile| ManifestWriter::new(output_file, <span class="number">1</span>, <span class="macro">vec!</span>[]);
+            }];
 
-        <span class="kw">let </span>(avro_bytes, <span class="kw">_</span>) = write_manifest(<span class="kw-2">&amp;</span>manifest, writer).<span class="kw">await</span>;
+        <span class="comment">// write manifest to file
+        </span><span class="kw">let </span>tmp_dir = TempDir::new().unwrap();
+        <span class="kw">let </span>path = tmp_dir.path().join(<span class="string">"test_manifest.avro"</span>);
+        <span class="kw">let </span>io = FileIOBuilder::new_fs_io().build().unwrap();
+        <span class="kw">let </span>output_file = io.new_output(path.to_str().unwrap()).unwrap();
+        <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestWriterBuilder::new(
+            output_file,
+            <span class="prelude-val">Some</span>(<span class="number">2</span>),
+            <span class="macro">vec!</span>[],
+            metadata.schema.clone(),
+            metadata.partition_spec.clone(),
+        )
+        .build_v2_data();
+        <span class="kw">for </span>entry <span class="kw">in </span><span class="kw-2">&amp;</span>entries {
+            writer.add_entry(entry.clone()).unwrap();
+        }
+        writer.write_manifest_file().<span class="kw">await</span>.unwrap();
 
-        <span class="comment">// The parse should succeed.
-        </span><span class="kw">let </span>actual_manifest = Manifest::parse_avro(avro_bytes.as_slice()).unwrap();
+        <span class="comment">// read back the manifest file and check the content
+        </span><span class="kw">let </span>actual_manifest =
+            Manifest::parse_avro(fs::read(path).expect(<span class="string">"read_file must succeed"</span>).as_slice())
+                .unwrap();
 
         <span class="comment">// Compared with original manifest, the lower_bounds and upper_bounds no longer has data for field 3, and
         // other parts should be same.
+        // The snapshot id is assigned when the entry is added to the manifest.
         </span><span class="kw">let </span>schema = Arc::new(
             Schema::builder()
                 .with_fields(<span class="macro">vec!</span>[
@@ -4617,7 +5380,7 @@
             },
             entries: <span class="macro">vec!</span>[Arc::new(ManifestEntry {
                 status: ManifestStatus::Added,
-                snapshot_id: <span class="prelude-val">None</span>,
+                snapshot_id: <span class="prelude-val">Some</span>(<span class="number">2</span>),
                 sequence_number: <span class="prelude-val">None</span>,
                 file_sequence_number: <span class="prelude-val">None</span>,
                 data_file: DataFile {
@@ -4688,16 +5451,15 @@
             .unwrap()
             .build()
             .unwrap();
-        <span class="kw">let </span>manifest = Manifest {
-            metadata: ManifestMetadata {
-                schema_id: <span class="number">0</span>,
-                schema,
-                partition_spec,
-                content: ManifestContentType::Data,
-                format_version: FormatVersion::V2,
-            },
-            entries: <span class="macro">vec!</span>[
-                Arc::new(ManifestEntry {
+        <span class="kw">let </span>metadata = ManifestMetadata {
+            schema_id: <span class="number">0</span>,
+            schema,
+            partition_spec,
+            content: ManifestContentType::Data,
+            format_version: FormatVersion::V2,
+        };
+        <span class="kw">let </span>entries = <span class="macro">vec!</span>[
+                ManifestEntry {
                     status: ManifestStatus::Added,
                     snapshot_id: <span class="prelude-val">None</span>,
                     sequence_number: <span class="prelude-val">None</span>,
@@ -4726,8 +5488,7 @@
                         equality_ids: Vec::new(),
                         sort_order_id: <span class="prelude-val">None</span>,
                     }
-                }),
-                Arc::new(
+                },
                     ManifestEntry {
                         status: ManifestStatus::Added,
                         snapshot_id: <span class="prelude-val">None</span>,
@@ -4757,9 +5518,7 @@
                             equality_ids: Vec::new(),
                             sort_order_id: <span class="prelude-val">None</span>,
                         }
-                    }
-                ),
-                Arc::new(
+                    },
                     ManifestEntry {
                         status: ManifestStatus::Added,
                         snapshot_id: <span class="prelude-val">None</span>,
@@ -4789,9 +5548,7 @@
                             equality_ids: Vec::new(),
                             sort_order_id: <span class="prelude-val">None</span>,
                         }
-                    }
-                ),
-                Arc::new(
+                    },
                     ManifestEntry {
                         status: ManifestStatus::Added,
                         snapshot_id: <span class="prelude-val">None</span>,
@@ -4821,14 +5578,27 @@
                             equality_ids: Vec::new(),
                             sort_order_id: <span class="prelude-val">None</span>,
                         }
-                    }
-                ),
-            ]
-        };
+                    },
+            ];
 
-        <span class="kw">let </span>writer = |output_file: OutputFile| ManifestWriter::new(output_file, <span class="number">1</span>, <span class="macro">vec!</span>[]);
+        <span class="comment">// write manifest to file
+        </span><span class="kw">let </span>tmp_dir = TempDir::new().unwrap();
+        <span class="kw">let </span>path = tmp_dir.path().join(<span class="string">"test_manifest.avro"</span>);
+        <span class="kw">let </span>io = FileIOBuilder::new_fs_io().build().unwrap();
+        <span class="kw">let </span>output_file = io.new_output(path.to_str().unwrap()).unwrap();
+        <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestWriterBuilder::new(
+            output_file,
+            <span class="prelude-val">Some</span>(<span class="number">1</span>),
+            <span class="macro">vec!</span>[],
+            metadata.schema.clone(),
+            metadata.partition_spec.clone(),
+        )
+        .build_v2_data();
+        <span class="kw">for </span>entry <span class="kw">in </span><span class="kw-2">&amp;</span>entries {
+            writer.add_entry(entry.clone()).unwrap();
+        }
+        <span class="kw">let </span>res = writer.write_manifest_file().<span class="kw">await</span>.unwrap();
 
-        <span class="kw">let </span>res = test_manifest_read_write(manifest, writer).<span class="kw">await</span>;
         <span class="macro">assert!</span>(res.partitions.len() == <span class="number">3</span>);
         <span class="macro">assert!</span>(res.partitions[<span class="number">0</span>].lower_bound == <span class="prelude-val">Some</span>(Datum::int(<span class="number">1111</span>)));
         <span class="macro">assert!</span>(res.partitions[<span class="number">0</span>].upper_bound == <span class="prelude-val">Some</span>(Datum::int(<span class="number">2021</span>)));
@@ -4846,31 +5616,139 @@
         <span class="macro">assert!</span>(res.partitions[<span class="number">2</span>].contains_nan == <span class="prelude-val">Some</span>(<span class="bool-val">false</span>));
     }
 
-    <span class="kw">async fn </span>test_manifest_read_write(
-        manifest: Manifest,
-        writer_builder: <span class="kw">impl </span>FnOnce(OutputFile) -&gt; ManifestWriter,
-    ) -&gt; ManifestFile {
-        <span class="kw">let </span>(bs, res) = write_manifest(<span class="kw-2">&amp;</span>manifest, writer_builder).<span class="kw">await</span>;
-        <span class="kw">let </span>actual_manifest = Manifest::parse_avro(bs.as_slice()).unwrap();
-
-        <span class="macro">assert_eq!</span>(actual_manifest, manifest);
-        res
-    }
+    <span class="attr">#[tokio::test]
+    </span><span class="kw">async fn </span>test_add_delete_existing() {
+        <span class="kw">let </span>schema = Arc::new(
+            Schema::builder()
+                .with_fields(<span class="macro">vec!</span>[
+                    Arc::new(NestedField::optional(
+                        <span class="number">1</span>,
+                        <span class="string">"id"</span>,
+                        Type::Primitive(PrimitiveType::Int),
+                    )),
+                    Arc::new(NestedField::optional(
+                        <span class="number">2</span>,
+                        <span class="string">"name"</span>,
+                        Type::Primitive(PrimitiveType::String),
+                    )),
+                ])
+                .build()
+                .unwrap(),
+        );
+        <span class="kw">let </span>metadata = ManifestMetadata {
+            schema_id: <span class="number">0</span>,
+            schema: schema.clone(),
+            partition_spec: PartitionSpec::builder(schema)
+                .with_spec_id(<span class="number">0</span>)
+                .build()
+                .unwrap(),
+            content: ManifestContentType::Data,
+            format_version: FormatVersion::V2,
+        };
+        <span class="kw">let </span><span class="kw-2">mut </span>entries = <span class="macro">vec!</span>[
+                ManifestEntry {
+                    status: ManifestStatus::Added,
+                    snapshot_id: <span class="prelude-val">None</span>,
+                    sequence_number: <span class="prelude-val">Some</span>(<span class="number">1</span>),
+                    file_sequence_number: <span class="prelude-val">Some</span>(<span class="number">1</span>),
+                    data_file: DataFile {
+                        content: DataContentType::Data,
+                        file_path: <span class="string">"s3a://icebergdata/demo/s1/t1/data/00000-0-ba56fbfa-f2ff-40c9-bb27-565ad6dc2be8-00000.parquet"</span>.to_string(),
+                        file_format: DataFileFormat::Parquet,
+                        partition: Struct::empty(),
+                        record_count: <span class="number">1</span>,
+                        file_size_in_bytes: <span class="number">5442</span>,
+                        column_sizes: HashMap::from([(<span class="number">1</span>, <span class="number">61</span>), (<span class="number">2</span>, <span class="number">73</span>)]),
+                        value_counts: HashMap::from([(<span class="number">1</span>, <span class="number">1</span>), (<span class="number">2</span>, <span class="number">1</span>)]),
+                        null_value_counts: HashMap::from([(<span class="number">1</span>, <span class="number">0</span>), (<span class="number">2</span>, <span class="number">0</span>)]),
+                        nan_value_counts: HashMap::new(),
+                        lower_bounds: HashMap::new(),
+                        upper_bounds: HashMap::new(),
+                        key_metadata: <span class="prelude-val">Some</span>(Vec::new()),
+                        split_offsets: <span class="macro">vec!</span>[<span class="number">4</span>],
+                        equality_ids: Vec::new(),
+                        sort_order_id: <span class="prelude-val">None</span>,
+                    },
+                },
+                ManifestEntry {
+                    status: ManifestStatus::Deleted,
+                    snapshot_id: <span class="prelude-val">Some</span>(<span class="number">1</span>),
+                    sequence_number: <span class="prelude-val">Some</span>(<span class="number">1</span>),
+                    file_sequence_number: <span class="prelude-val">Some</span>(<span class="number">1</span>),
+                    data_file: DataFile {
+                        content: DataContentType::Data,
+                        file_path: <span class="string">"s3a://icebergdata/demo/s1/t1/data/00000-0-ba56fbfa-f2ff-40c9-bb27-565ad6dc2be8-00000.parquet"</span>.to_string(),
+                        file_format: DataFileFormat::Parquet,
+                        partition: Struct::empty(),
+                        record_count: <span class="number">1</span>,
+                        file_size_in_bytes: <span class="number">5442</span>,
+                        column_sizes: HashMap::from([(<span class="number">1</span>, <span class="number">61</span>), (<span class="number">2</span>, <span class="number">73</span>)]),
+                        value_counts: HashMap::from([(<span class="number">1</span>, <span class="number">1</span>), (<span class="number">2</span>, <span class="number">1</span>)]),
+                        null_value_counts: HashMap::from([(<span class="number">1</span>, <span class="number">0</span>), (<span class="number">2</span>, <span class="number">0</span>)]),
+                        nan_value_counts: HashMap::new(),
+                        lower_bounds: HashMap::new(),
+                        upper_bounds: HashMap::new(),
+                        key_metadata: <span class="prelude-val">Some</span>(Vec::new()),
+                        split_offsets: <span class="macro">vec!</span>[<span class="number">4</span>],
+                        equality_ids: Vec::new(),
+                        sort_order_id: <span class="prelude-val">None</span>,
+                    },
+                },
+                ManifestEntry {
+                    status: ManifestStatus::Existing,
+                    snapshot_id: <span class="prelude-val">Some</span>(<span class="number">1</span>),
+                    sequence_number: <span class="prelude-val">Some</span>(<span class="number">1</span>),
+                    file_sequence_number: <span class="prelude-val">Some</span>(<span class="number">1</span>),
+                    data_file: DataFile {
+                        content: DataContentType::Data,
+                        file_path: <span class="string">"s3a://icebergdata/demo/s1/t1/data/00000-0-ba56fbfa-f2ff-40c9-bb27-565ad6dc2be8-00000.parquet"</span>.to_string(),
+                        file_format: DataFileFormat::Parquet,
+                        partition: Struct::empty(),
+                        record_count: <span class="number">1</span>,
+                        file_size_in_bytes: <span class="number">5442</span>,
+                        column_sizes: HashMap::from([(<span class="number">1</span>, <span class="number">61</span>), (<span class="number">2</span>, <span class="number">73</span>)]),
+                        value_counts: HashMap::from([(<span class="number">1</span>, <span class="number">1</span>), (<span class="number">2</span>, <span class="number">1</span>)]),
+                        null_value_counts: HashMap::from([(<span class="number">1</span>, <span class="number">0</span>), (<span class="number">2</span>, <span class="number">0</span>)]),
+                        nan_value_counts: HashMap::new(),
+                        lower_bounds: HashMap::new(),
+                        upper_bounds: HashMap::new(),
+                        key_metadata: <span class="prelude-val">Some</span>(Vec::new()),
+                        split_offsets: <span class="macro">vec!</span>[<span class="number">4</span>],
+                        equality_ids: Vec::new(),
+                        sort_order_id: <span class="prelude-val">None</span>,
+                    },
+                },
+            ];
 
-    <span class="doccomment">/// Utility method which writes out a manifest and returns the bytes.
-    </span><span class="kw">async fn </span>write_manifest(
-        manifest: <span class="kw-2">&amp;</span>Manifest,
-        writer_builder: <span class="kw">impl </span>FnOnce(OutputFile) -&gt; ManifestWriter,
-    ) -&gt; (Vec&lt;u8&gt;, ManifestFile) {
-        <span class="kw">let </span>temp_dir = TempDir::new().unwrap();
-        <span class="kw">let </span>path = temp_dir.path().join(<span class="string">"test_manifest.avro"</span>);
+        <span class="comment">// write manifest to file
+        </span><span class="kw">let </span>tmp_dir = TempDir::new().unwrap();
+        <span class="kw">let </span>path = tmp_dir.path().join(<span class="string">"test_manifest.avro"</span>);
         <span class="kw">let </span>io = FileIOBuilder::new_fs_io().build().unwrap();
         <span class="kw">let </span>output_file = io.new_output(path.to_str().unwrap()).unwrap();
-        <span class="kw">let </span>writer = writer_builder(output_file);
-        <span class="kw">let </span>res = writer.write(manifest.clone()).<span class="kw">await</span>.unwrap();
-
-        <span class="comment">// Verify manifest
-        </span>(fs::read(path).expect(<span class="string">"read_file must succeed"</span>), res)
+        <span class="kw">let </span><span class="kw-2">mut </span>writer = ManifestWriterBuilder::new(
+            output_file,
+            <span class="prelude-val">Some</span>(<span class="number">3</span>),
+            <span class="macro">vec!</span>[],
+            metadata.schema.clone(),
+            metadata.partition_spec.clone(),
+        )
+        .build_v2_data();
+        writer.add_entry(entries[<span class="number">0</span>].clone()).unwrap();
+        writer.add_delete_entry(entries[<span class="number">1</span>].clone()).unwrap();
+        writer.add_existing_entry(entries[<span class="number">2</span>].clone()).unwrap();
+        writer.write_manifest_file().<span class="kw">await</span>.unwrap();
+
+        <span class="comment">// read back the manifest file and check the content
+        </span><span class="kw">let </span>actual_manifest =
+            Manifest::parse_avro(fs::read(path).expect(<span class="string">"read_file must succeed"</span>).as_slice())
+                .unwrap();
+
+        <span class="comment">// The snapshot id is assigned when the entry is added and delete to the manifest. Existing entries are keep original.
+        </span>entries[<span class="number">0</span>].snapshot_id = <span class="prelude-val">Some</span>(<span class="number">3</span>);
+        entries[<span class="number">1</span>].snapshot_id = <span class="prelude-val">Some</span>(<span class="number">3</span>);
+        <span class="comment">// file sequence number is assigned to None when the entry is added and delete to the manifest.
+        </span>entries[<span class="number">0</span>].file_sequence_number = <span class="prelude-val">None</span>;
+        <span class="macro">assert_eq!</span>(actual_manifest, Manifest::new(metadata, entries));
     }
 
     <span class="attr">#[tokio::test]
diff --git a/api/src/iceberg/spec/snapshot.rs.html b/api/src/iceberg/spec/snapshot.rs.html
index 174b107d..ce99b850 100644
--- a/api/src/iceberg/spec/snapshot.rs.html
+++ b/api/src/iceberg/spec/snapshot.rs.html
@@ -442,6 +442,8 @@
 <a href="#442" id="442">442</a>
 <a href="#443" id="443">443</a>
 <a href="#444" id="444">444</a>
+<a href="#445" id="445">445</a>
+<a href="#446" id="446">446</a>
 </pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -478,6 +480,8 @@
 
 <span class="doccomment">/// The ref name of the main branch of the table.
 </span><span class="kw">pub const </span>MAIN_BRANCH: <span class="kw-2">&amp;</span>str = <span class="string">"main"</span>;
+<span class="doccomment">/// Placeholder for snapshot ID. The field with this value must be replaced with the actual snapshot ID before it is committed.
+</span><span class="kw">pub const </span>UNASSIGNED_SNAPSHOT_ID: i64 = -<span class="number">1</span>;
 
 <span class="doccomment">/// Reference to [`Snapshot`].
 </span><span class="kw">pub type </span>SnapshotRef = Arc&lt;Snapshot&gt;;
diff --git a/api/src/iceberg/transaction.rs.html b/api/src/iceberg/transaction.rs.html
index 91a9e8fe..86daf523 100644
--- a/api/src/iceberg/transaction.rs.html
+++ b/api/src/iceberg/transaction.rs.html
@@ -870,8 +870,6 @@
 <a href="#870" id="870">870</a>
 <a href="#871" id="871">871</a>
 <a href="#872" id="872">872</a>
-<a href="#873" id="873">873</a>
-<a href="#874" id="874">874</a>
 </pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -902,10 +900,9 @@
 <span class="kw">use </span><span class="kw">crate</span>::error::Result;
 <span class="kw">use </span><span class="kw">crate</span>::io::OutputFile;
 <span class="kw">use </span><span class="kw">crate</span>::spec::{
-    DataFile, DataFileFormat, FormatVersion, Manifest, ManifestEntry, ManifestFile,
-    ManifestListWriter, ManifestMetadata, ManifestWriter, NullOrder, Operation, Snapshot,
-    SnapshotReference, SnapshotRetention, SortDirection, SortField, SortOrder, Struct, StructType,
-    Summary, Transform, MAIN_BRANCH,
+    DataFile, DataFileFormat, FormatVersion, ManifestEntry, ManifestFile, ManifestListWriter,
+    ManifestWriterBuilder, NullOrder, Operation, Snapshot, SnapshotReference, SnapshotRetention,
+    SortDirection, SortField, SortOrder, Struct, StructType, Summary, Transform, MAIN_BRANCH,
 };
 <span class="kw">use </span><span class="kw">crate</span>::table::Table;
 <span class="kw">use </span><span class="kw">crate</span>::TableUpdate::UpgradeFormatVersion;
@@ -1252,43 +1249,42 @@
     <span class="comment">// Write manifest file for added data files and return the ManifestFile for ManifestList.
     </span><span class="kw">async fn </span>write_added_manifest(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;ManifestFile&gt; {
         <span class="kw">let </span>added_data_files = std::mem::take(<span class="kw-2">&amp;mut </span><span class="self">self</span>.added_data_files);
-        <span class="kw">let </span>manifest_entries = added_data_files
-            .into_iter()
-            .map(|data_file| {
-                <span class="kw">let </span>builder = ManifestEntry::builder()
-                    .status(<span class="kw">crate</span>::spec::ManifestStatus::Added)
-                    .data_file(data_file);
-                <span class="kw">if </span><span class="self">self</span>.tx.table.metadata().format_version() == FormatVersion::V1 {
-                    builder.snapshot_id(<span class="self">self</span>.snapshot_id).build()
-                } <span class="kw">else </span>{
-                    <span class="comment">// For format version &gt; 1, we set the snapshot id at the inherited time to avoid rewrite the manifest file when
-                    // commit failed.
-                    </span>builder.build()
-                }
-            })
-            .collect();
-        <span class="kw">let </span>schema = <span class="self">self</span>.tx.table.metadata().current_schema();
-        <span class="kw">let </span>manifest_meta = ManifestMetadata::builder()
-            .schema(schema.clone())
-            .schema_id(schema.schema_id())
-            .format_version(<span class="self">self</span>.tx.table.metadata().format_version())
-            .partition_spec(
+        <span class="kw">let </span>snapshot_id = <span class="self">self</span>.snapshot_id;
+        <span class="kw">let </span>manifest_entries = added_data_files.into_iter().map(|data_file| {
+            <span class="kw">let </span>builder = ManifestEntry::builder()
+                .status(<span class="kw">crate</span>::spec::ManifestStatus::Added)
+                .data_file(data_file);
+            <span class="kw">if </span><span class="self">self</span>.tx.table.metadata().format_version() == FormatVersion::V1 {
+                builder.snapshot_id(snapshot_id).build()
+            } <span class="kw">else </span>{
+                <span class="comment">// For format version &gt; 1, we set the snapshot id at the inherited time to avoid rewrite the manifest file when
+                // commit failed.
+                </span>builder.build()
+            }
+        });
+        <span class="kw">let </span><span class="kw-2">mut </span>writer = {
+            <span class="kw">let </span>builder = ManifestWriterBuilder::new(
+                <span class="self">self</span>.new_manifest_output()<span class="question-mark">?</span>,
+                <span class="prelude-val">Some</span>(<span class="self">self</span>.snapshot_id),
+                <span class="self">self</span>.key_metadata.clone(),
+                <span class="self">self</span>.tx.table.metadata().current_schema().clone(),
                 <span class="self">self</span>.tx
                     .table
                     .metadata()
                     .default_partition_spec()
                     .as_ref()
                     .clone(),
-            )
-            .content(<span class="kw">crate</span>::spec::ManifestContentType::Data)
-            .build();
-        <span class="kw">let </span>manifest = Manifest::new(manifest_meta, manifest_entries);
-        <span class="kw">let </span>writer = ManifestWriter::new(
-            <span class="self">self</span>.new_manifest_output()<span class="question-mark">?</span>,
-            <span class="self">self</span>.snapshot_id,
-            <span class="self">self</span>.key_metadata.clone(),
-        );
-        writer.write(manifest).<span class="kw">await
+            );
+            <span class="kw">if </span><span class="self">self</span>.tx.table.metadata().format_version() == FormatVersion::V1 {
+                builder.build_v1()
+            } <span class="kw">else </span>{
+                builder.build_v2_data()
+            }
+        };
+        <span class="kw">for </span>entry <span class="kw">in </span>manifest_entries {
+            writer.add_entry(entry)<span class="question-mark">?</span>;
+        }
+        writer.write_manifest_file().<span class="kw">await
     </span>}
 
     <span class="kw">async fn </span>manifest_file&lt;OP: SnapshotProduceOperation, MP: ManifestProcess&gt;(
diff --git a/api/trait.impl/core/marker/trait.Freeze.js b/api/trait.impl/core/marker/trait.Freeze.js
index b0da5213..d569c75d 100644
--- a/api/trait.impl/core/marker/trait.Freeze.js
+++ b/api/trait.impl/core/marker/trait.Freeze.js
@@ -1,5 +1,5 @@
 (function() {var implementors = {
-"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"iceberg/enum.TableUpdate.html\" title=\"enum iceberg::TableUpdate\">TableUpdate</a>",1,["iceberg::catalog::TableUpdate"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"icebe [...]
+"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"iceberg/enum.TableUpdate.html\" title=\"enum iceberg::TableUpdate\">TableUpdate</a>",1,["iceberg::catalog::TableUpdate"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"icebe [...]
 "iceberg_catalog_glue":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalog.html\" title=\"struct iceberg_catalog_glue::GlueCatalog\">GlueCatalog</a>",1,["iceberg_catalog_glue::catalog::GlueCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker [...]
 "iceberg_catalog_hms":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"iceberg_catalog_hms/enum.HmsThriftTransport.html\" title=\"enum iceberg_catalog_hms::HmsThriftTransport\">HmsThriftTransport</a>",1,["iceberg_catalog_hms::catalog::HmsThriftTransport"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\" [...]
 "iceberg_catalog_memory":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"struct\" href=\"iceberg_catalog_memory/struct.MemoryCatalog.html\" title=\"struct iceberg_catalog_memory::MemoryCatalog\">MemoryCatalog</a>",1,["iceberg_catalog_memory::catalog::MemoryCatalog"]]],
diff --git a/api/trait.impl/core/marker/trait.Send.js b/api/trait.impl/core/marker/trait.Send.js
index 3d442e50..56703765 100644
--- a/api/trait.impl/core/marker/trait.Send.js
+++ b/api/trait.impl/core/marker/trait.Send.js
@@ -1,5 +1,5 @@
 (function() {var implementors = {
-"iceberg":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"iceberg/enum.ErrorKind.html\" title=\"enum iceberg::ErrorKind\">ErrorKind</a>",1,["iceberg::error::ErrorKind"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"iceberg/enum.TableRequirement [...]
+"iceberg":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"iceberg/enum.ErrorKind.html\" title=\"enum iceberg::ErrorKind\">ErrorKind</a>",1,["iceberg::error::ErrorKind"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"iceberg/enum.TableRequirement [...]
 "iceberg_catalog_glue":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalog.html\" title=\"struct iceberg_catalog_glue::GlueCatalog\">GlueCatalog</a>",1,["iceberg_catalog_glue::catalog::GlueCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\" [...]
 "iceberg_catalog_hms":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"iceberg_catalog_hms/enum.HmsThriftTransport.html\" title=\"enum iceberg_catalog_hms::HmsThriftTransport\">HmsThriftTransport</a>",1,["iceberg_catalog_hms::catalog::HmsThriftTransport"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait co [...]
 "iceberg_catalog_memory":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"iceberg_catalog_memory/struct.MemoryCatalog.html\" title=\"struct iceberg_catalog_memory::MemoryCatalog\">MemoryCatalog</a>",1,["iceberg_catalog_memory::catalog::MemoryCatalog"]]],
diff --git a/api/trait.impl/core/marker/trait.Sync.js b/api/trait.impl/core/marker/trait.Sync.js
index abf57d39..384cd101 100644
--- a/api/trait.impl/core/marker/trait.Sync.js
+++ b/api/trait.impl/core/marker/trait.Sync.js
@@ -1,5 +1,5 @@
 (function() {var implementors = {
-"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"iceberg/writer/file_writer/struct.ParquetWriter.html\" title=\"struct iceberg::writer::file_writer::ParquetWriter\">ParquetWriter</a>",1,["iceberg::writer::file_writer::parquet_writer::ParquetWriter"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"t [...]
+"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"iceberg/writer/file_writer/struct.ParquetWriter.html\" title=\"struct iceberg::writer::file_writer::ParquetWriter\">ParquetWriter</a>",1,["iceberg::writer::file_writer::parquet_writer::ParquetWriter"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"t [...]
 "iceberg_catalog_glue":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalog.html\" title=\"struct iceberg_catalog_glue::GlueCatalog\">GlueCatalog</a>",1,["iceberg_catalog_glue::catalog::GlueCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\" [...]
 "iceberg_catalog_hms":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"iceberg_catalog_hms/enum.HmsThriftTransport.html\" title=\"enum iceberg_catalog_hms::HmsThriftTransport\">HmsThriftTransport</a>",1,["iceberg_catalog_hms::catalog::HmsThriftTransport"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait co [...]
 "iceberg_catalog_memory":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"iceberg_catalog_memory/struct.MemoryCatalog.html\" title=\"struct iceberg_catalog_memory::MemoryCatalog\">MemoryCatalog</a>",1,["iceberg_catalog_memory::catalog::MemoryCatalog"]]],
diff --git a/api/trait.impl/core/marker/trait.Unpin.js b/api/trait.impl/core/marker/trait.Unpin.js
index ea2b8ae7..d13dd169 100644
--- a/api/trait.impl/core/marker/trait.Unpin.js
+++ b/api/trait.impl/core/marker/trait.Unpin.js
@@ -1,5 +1,5 @@
 (function() {var implementors = {
-"iceberg":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"iceberg/enum.ErrorKind.html\" title=\"enum iceberg::ErrorKind\">ErrorKind</a>",1,["iceberg::error::ErrorKind"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"iceberg/enum.TableRequi [...]
+"iceberg":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"iceberg/enum.ErrorKind.html\" title=\"enum iceberg::ErrorKind\">ErrorKind</a>",1,["iceberg::error::ErrorKind"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"iceberg/enum.TableRequi [...]
 "iceberg_catalog_glue":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalog.html\" title=\"struct iceberg_catalog_glue::GlueCatalog\">GlueCatalog</a>",1,["iceberg_catalog_glue::catalog::GlueCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Un [...]
 "iceberg_catalog_hms":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"iceberg_catalog_hms/enum.HmsThriftTransport.html\" title=\"enum iceberg_catalog_hms::HmsThriftTransport\">HmsThriftTransport</a>",1,["iceberg_catalog_hms::catalog::HmsThriftTransport"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trai [...]
 "iceberg_catalog_memory":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"iceberg_catalog_memory/struct.MemoryCatalog.html\" title=\"struct iceberg_catalog_memory::MemoryCatalog\">MemoryCatalog</a>",1,["iceberg_catalog_memory::catalog::MemoryCatalog"]]],
diff --git a/api/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/api/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
index 7fc5c5bd..da682a87 100644
--- a/api/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
+++ b/api/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
@@ -1,5 +1,5 @@
 (function() {var implementors = {
-"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"struct\" href=\"iceberg/arrow/struct.ArrowReader.html\" title=\"struct iceberg::arrow::ArrowReader\">ArrowReader</a>",1,["iceberg::arrow::reader::ArrowReader"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.ht [...]
+"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"struct\" href=\"iceberg/arrow/struct.ArrowReader.html\" title=\"struct iceberg::arrow::ArrowReader\">ArrowReader</a>",1,["iceberg::arrow::reader::ArrowReader"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.ht [...]
 "iceberg_catalog_glue":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalog.html\" title=\"struct iceberg_catalog_glue::GlueCatalog\">GlueCatalog</a>",1,["iceberg_catalog_glue::catalog::GlueCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/un [...]
 "iceberg_catalog_hms":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"struct\" href=\"iceberg_catalog_hms/struct.HmsCatalog.html\" title=\"struct iceberg_catalog_hms::HmsCatalog\">HmsCatalog</a>",1,["iceberg_catalog_hms::catalog::HmsCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_saf [...]
 "iceberg_catalog_memory":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"struct\" href=\"iceberg_catalog_memory/struct.MemoryCatalog.html\" title=\"struct iceberg_catalog_memory::MemoryCatalog\">MemoryCatalog</a>",1,["iceberg_catalog_memory::catalog::MemoryCatalog"]]],
diff --git a/api/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/api/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
index eb50a2fd..d1d02691 100644
--- a/api/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
+++ b/api/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
@@ -1,5 +1,5 @@
 (function() {var implementors = {
-"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"struct\" href=\"iceberg/arrow/struct.ArrowReader.html\" title=\"struct iceberg::arrow::ArrowReader\">ArrowReader</a>",1,["iceberg::arrow::reader::ArrowReader"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\ [...]
+"iceberg":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"struct\" href=\"iceberg/arrow/struct.ArrowReader.html\" title=\"struct iceberg::arrow::ArrowReader\">ArrowReader</a>",1,["iceberg::arrow::reader::ArrowReader"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\ [...]
 "iceberg_catalog_glue":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalog.html\" title=\"struct iceberg_catalog_glue::GlueCatalog\">GlueCatalog</a>",1,["iceberg_catalog_glue::catalog::GlueCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe [...]
 "iceberg_catalog_hms":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"struct\" href=\"iceberg_catalog_hms/struct.HmsCatalog.html\" title=\"struct iceberg_catalog_hms::HmsCatalog\">HmsCatalog</a>",1,["iceberg_catalog_hms::catalog::HmsCatalog"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.U [...]
 "iceberg_catalog_memory":[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"struct\" href=\"iceberg_catalog_memory/struct.MemoryCatalog.html\" title=\"struct iceberg_catalog_memory::MemoryCatalog\">MemoryCatalog</a>",1,["iceberg_catalog_memory::catalog::MemoryCatalog"]]],