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 141ab77d deploy: 3cc1a685743142ddea04c81ebc4be0ec6a34168a
141ab77d is described below

commit 141ab77da424f9b5fc0c9e7deaa9ec4122d1099c
Author: liurenjie1024 <[email protected]>
AuthorDate: Fri Mar 14 02:41:45 2025 +0000

    deploy: 3cc1a685743142ddea04c81ebc4be0ec6a34168a
---
 api/help.html                                      |   2 +-
 api/iceberg/expr/enum.BoundPredicate.html          |   4 +-
 api/iceberg/expr/enum.Predicate.html               |   4 +-
 api/iceberg/expr/struct.SetExpression.html         |   4 +-
 api/iceberg/expr/struct.UnaryExpression.html       |   4 +-
 api/iceberg/spec/enum.DataFileBuilderError.html    |   2 +-
 api/iceberg/spec/enum.DataFileFormat.html          |   4 +-
 api/iceberg/spec/enum.NullOrder.html               |   4 +-
 api/iceberg/spec/enum.SortDirection.html           |   4 +-
 api/iceberg/spec/enum.SortOrderBuilderError.html   |   2 +-
 api/iceberg/spec/enum.Transform.html               |   4 +-
 api/iceberg/spec/enum.Type.html                    |   4 +-
 api/iceberg/spec/enum.ViewFormatVersion.html       |   4 +-
 api/iceberg/spec/struct.Datum.html                 |   2 +-
 api/iceberg/spec/struct.SortField.html             |   4 +-
 api/iceberg/struct.Error.html                      |   2 +-
 api/iceberg/struct.NamespaceIdent.html             |   4 +-
 api/iceberg/struct.TableIdent.html                 |   4 +-
 .../writer/file_writer/struct.ParquetWriter.html   |   4 +-
 .../file_writer/struct.ParquetWriterBuilder.html   |   6 +-
 .../writer/file_writer/trait.FileWriter.html       |   2 +-
 .../file_writer/trait.FileWriterBuilder.html       |   2 +-
 api/iceberg/writer/trait.CurrentFileStatus.html    |   2 +-
 api/search-index.js                                |   2 +-
 api/settings.html                                  |   2 +-
 .../writer/file_writer/parquet_writer.rs.html      | 176 +++++----------------
 26 files changed, 80 insertions(+), 178 deletions(-)

diff --git a/api/help.html b/api/help.html
index 21943ce1..b3855f23 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/expr/enum.BoundPredicate.html 
b/api/iceberg/expr/enum.BoundPredicate.html
index d47dfd40..44829eb9 100644
--- a/api/iceberg/expr/enum.BoundPredicate.html
+++ b/api/iceberg/expr/enum.BoundPredicate.html
@@ -16,8 +16,8 @@
 </div><section id="variant.Unary" class="variant"><a href="#variant.Unary" 
class="anchor">§</a><h3 class="code-header">Unary(<a class="struct" 
href="struct.UnaryExpression.html" title="struct 
iceberg::expr::UnaryExpression">UnaryExpression</a>&lt;<a class="struct" 
href="struct.BoundReference.html" title="struct 
iceberg::expr::BoundReference">BoundReference</a>&gt;)</h3></section><div 
class="docblock"><p>Unary expression, for example, <code>a IS NULL</code>.</p>
 </div><section id="variant.Binary" class="variant"><a href="#variant.Binary" 
class="anchor">§</a><h3 class="code-header">Binary(<a class="struct" 
href="struct.BinaryExpression.html" title="struct 
iceberg::expr::BinaryExpression">BinaryExpression</a>&lt;<a class="struct" 
href="struct.BoundReference.html" title="struct 
iceberg::expr::BoundReference">BoundReference</a>&gt;)</h3></section><div 
class="docblock"><p>Binary expression, for example, <code>a &gt; 10</code>.</p>
 </div><section id="variant.Set" class="variant"><a href="#variant.Set" 
class="anchor">§</a><h3 class="code-header">Set(<a class="struct" 
href="struct.SetExpression.html" title="struct 
iceberg::expr::SetExpression">SetExpression</a>&lt;<a class="struct" 
href="struct.BoundReference.html" title="struct 
iceberg::expr::BoundReference">BoundReference</a>&gt;)</h3></section><div 
class="docblock"><p>Set predicates, for example, <code>a IN (1, 2, 
3)</code>.</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-BoundPredicate" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#709">source</a><a 
href="#impl-Clone-for-BoundPredicate" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" h [...]
-    __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 [...]
+</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-BoundPredicate" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#709">source</a><a 
href="#impl-Clone-for-BoundPredicate" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" h [...]
+    __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-BoundPredicate" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#709">source</a><a 
href="#impl-Serialize-for-BoundPredicate" 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 
[...]
     __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-StructuralPartialEq-for-BoundPredicate" class="impl"><a class="src 
rightside" href=". [...]
diff --git a/api/iceberg/expr/enum.Predicate.html 
b/api/iceberg/expr/enum.Predicate.html
index 6cd0d93b..901da7a8 100644
--- a/api/iceberg/expr/enum.Predicate.html
+++ b/api/iceberg/expr/enum.Predicate.html
@@ -82,8 +82,8 @@ predicates.</p>
     &amp;self,
     schema: <a class="type" href="../spec/type.SchemaRef.html" title="type 
iceberg::spec::SchemaRef">SchemaRef</a>,
     case_sensitive: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.bool.html";>bool</a>,
-) -&gt; <a class="type" href="../type.Result.html" title="type 
iceberg::Result">Result</a>&lt;<a class="enum" href="enum.BoundPredicate.html" 
title="enum 
iceberg::expr::BoundPredicate">BoundPredicate</a>&gt;</h4></section></summary><div
 class='docblock'>Bind an expression to a 
schema.</div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Clone-for-Predicate" 
class="impl"><a class="src rightside" href="../../src/iceberg/expr/predicate.r 
[...]
-    __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 [...]
+) -&gt; <a class="type" href="../type.Result.html" title="type 
iceberg::Result">Result</a>&lt;<a class="enum" href="enum.BoundPredicate.html" 
title="enum 
iceberg::expr::BoundPredicate">BoundPredicate</a>&gt;</h4></section></summary><div
 class='docblock'>Bind an expression to a 
schema.</div></details></div></details><details class="toggle 
implementors-toggle" open><summary><section id="impl-Clone-for-Predicate" 
class="impl"><a class="src rightside" href="../../src/iceberg/expr/predicate.r 
[...]
+    __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 [...]
 <p>This is different from <a href="enum.Predicate.html#method.negate" 
title="method 
iceberg::expr::Predicate::negate"><code>Predicate::negate()</code></a> since it 
doesn’t rewrite expression, but
 just adds a <code>NOT</code> operator.</p>
 <h5 id="example-4"><a class="doc-anchor" href="#example-4">§</a>Example</h5>
diff --git a/api/iceberg/expr/struct.SetExpression.html 
b/api/iceberg/expr/struct.SetExpression.html
index 314084e2..62e82842 100644
--- a/api/iceberg/expr/struct.SetExpression.html
+++ b/api/iceberg/expr/struct.SetExpression.html
@@ -2,9 +2,9 @@
 </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-SetExpression%3CT%3E" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#258-278">source</a><a 
href="#impl-SetExpression%3CT%3E" class="anchor">§</a><h3 
class="code-header">impl&lt;T&gt; <a class="struct" href="struct.Se [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.literals" class="method"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#270-272">source</a><h4 
class="code-header">pub fn <a href="#method.literals" 
class="fn">literals</a>(&amp;self) -&gt; &amp;FnvHashSet&lt;<a class="struct" 
href="../spec/struct.Datum.html" title="struct 
iceberg::spec::Datum">Datum</a>&gt;</h4></section></summary><div 
class="docblock"><p>Return the hash set  [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.term" class="method"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#275-277">source</a><h4 
class="code-header">pub fn <a href="#method.term" 
class="fn">term</a>(&amp;self) -&gt; <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.reference.html";>&amp;T</a></h4></section></summary><div
 class="docblock"><p>Return the term of this predicate.</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-Bind-for-SetExpression%3CT%3E" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#280-291">source</a><a 
href="#impl-Bind-for-SetExpression%3CT%3E" class="anchor">§</a><h3 cla [...]
+</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-Bind-for-SetExpression%3CT%3E" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#280-291">source</a><a 
href="#impl-Bind-for-SetExpression%3CT%3E" class="anchor">§</a><h3 cla [...]
     T: <a class="trait" 
href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html"; 
title="trait 
serde::de::Deserialize">Deserialize</a>&lt;'de&gt;,</div></h3></section></summary><div
 class="impl-items"><details class="toggle method-toggle" 
open><summary><section id="method.deserialize" class="method trait-impl"><a 
class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#238">source</a><a 
href="#method.deserialize" class="anchor">§</a><h4 class="code-header">fn <a hr 
[...]
-    __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 [...]
+    __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-SetExpression%3CT%3E" class="impl"><a class="src 
rightside" href="../../src/iceberg/expr/predicate.rs.html#238">source</a><a 
href="#impl-Serialize-for-SetExpression%3CT%3E" class="anchor">§</a><h3 
class="code-header">impl&lt;T&gt; <a class="trait" 
href="https://docs.rs/serde/1.0.217/serde/ser/trait.Seri [...]
     T: <a class="trait" 
href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html"; 
title="trait 
serde::ser::Serialize">Serialize</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/expr/predicate.rs.html#238">source</a><a 
href="#method.serialize" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://docs.rs [...]
diff --git a/api/iceberg/expr/struct.UnaryExpression.html 
b/api/iceberg/expr/struct.UnaryExpression.html
index f99b364e..55c8c836 100644
--- a/api/iceberg/expr/struct.UnaryExpression.html
+++ b/api/iceberg/expr/struct.UnaryExpression.html
@@ -6,9 +6,9 @@
 UnaryExpression::new(PredicateOperator::IsNull, Reference::new(<span 
class="string">"c"</span>));</code></pre></div>
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.op" class="method"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#150-152">source</a><h4 
class="code-header">pub fn <a href="#method.op" class="fn">op</a>(&amp;self) 
-&gt; <a class="enum" href="enum.PredicateOperator.html" title="enum 
iceberg::expr::PredicateOperator">PredicateOperator</a></h4></section></summary><div
 class="docblock"><p>Return the operator of this predicate.</p>
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.term" class="method"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#155-157">source</a><h4 
class="code-header">pub fn <a href="#method.term" 
class="fn">term</a>(&amp;self) -&gt; <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.reference.html";>&amp;T</a></h4></section></summary><div
 class="docblock"><p>Return the term of this predicate.</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-Bind-for-UnaryExpression%3CT%3E" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#125-132">source</a><a 
href="#impl-Bind-for-UnaryExpression%3CT%3E" class="anchor">§</a><h3 [...]
+</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-Bind-for-UnaryExpression%3CT%3E" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#125-132">source</a><a 
href="#impl-Bind-for-UnaryExpression%3CT%3E" class="anchor">§</a><h3 [...]
     T: <a class="trait" 
href="https://docs.rs/serde/1.0.217/serde/de/trait.Deserialize.html"; 
title="trait 
serde::de::Deserialize">Deserialize</a>&lt;'de&gt;,</div></h3></section></summary><div
 class="impl-items"><details class="toggle method-toggle" 
open><summary><section id="method.deserialize" class="method trait-impl"><a 
class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#101">source</a><a 
href="#method.deserialize" class="anchor">§</a><h4 class="code-header">fn <a hr 
[...]
-    __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 [...]
+    __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-UnaryExpression%3CT%3E" class="impl"><a class="src 
rightside" href="../../src/iceberg/expr/predicate.rs.html#101">source</a><a 
href="#impl-Serialize-for-UnaryExpression%3CT%3E" class="anchor">§</a><h3 
class="code-header">impl&lt;T&gt; <a class="trait" 
href="https://docs.rs/serde/1.0.217/serde/ser/trait. [...]
     T: <a class="trait" 
href="https://docs.rs/serde/1.0.217/serde/ser/trait.Serialize.html"; 
title="trait 
serde::ser::Serialize">Serialize</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/expr/predicate.rs.html#101">source</a><a 
href="#method.serialize" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://docs.rs [...]
diff --git a/api/iceberg/spec/enum.DataFileBuilderError.html 
b/api/iceberg/spec/enum.DataFileBuilderError.html
index ecc45576..45778e2b 100644
--- a/api/iceberg/spec/enum.DataFileBuilderError.html
+++ b/api/iceberg/spec/enum.DataFileBuilderError.html
@@ -4,7 +4,7 @@
 }</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#1242">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#1242">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 d3c00f8f..315eaf2b 100644
--- a/api/iceberg/spec/enum.DataFileFormat.html
+++ b/api/iceberg/spec/enum.DataFileFormat.html
@@ -6,10 +6,10 @@
 </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#1517">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#1517">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 [...]
+    __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#1517">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#1517">source</a><a 
href="#method.serialize" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://docs.rs/ [...]
diff --git a/api/iceberg/spec/enum.NullOrder.html 
b/api/iceberg/spec/enum.NullOrder.html
index 2e23f18b..bf640012 100644
--- a/api/iceberg/spec/enum.NullOrder.html
+++ b/api/iceberg/spec/enum.NullOrder.html
@@ -4,8 +4,8 @@
 }</code></pre><details class="toggle top-doc" open><summary 
class="hideme"><span>Expand description</span></summary><div 
class="docblock"><p>Describes the order of null values when sorted.</p>
 </div></details><h2 id="variants" class="variants section-header">Variants<a 
href="#variants" class="anchor">§</a></h2><div class="variants"><section 
id="variant.First" class="variant"><a href="#variant.First" 
class="anchor">§</a><h3 class="code-header">First</h3></section><div 
class="docblock"><p>Nulls are stored first</p>
 </div><section id="variant.Last" class="variant"><a href="#variant.Last" 
class="anchor">§</a><h3 class="code-header">Last</h3></section><div 
class="docblock"><p>Nulls are stored last</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-NullOrder" class="impl"><a class="src 
rightside" href="../../src/iceberg/spec/sort.rs.html#55">source</a><a 
href="#impl-Clone-for-NullOrder" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" href="https://doc [...]
-    __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 [...]
+</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-NullOrder" class="impl"><a class="src 
rightside" href="../../src/iceberg/spec/sort.rs.html#55">source</a><a 
href="#impl-Clone-for-NullOrder" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" href="https://doc [...]
+    __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-NullOrder" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/sort.rs.html#55">source</a><a 
href="#impl-Serialize-for-NullOrder" 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-Copy-for-NullOrder" 
class="impl"><a class="src rightside" href="../../src/iceberg/spe [...]
diff --git a/api/iceberg/spec/enum.SortDirection.html 
b/api/iceberg/spec/enum.SortDirection.html
index e76a7d0d..decfdbac 100644
--- a/api/iceberg/spec/enum.SortDirection.html
+++ b/api/iceberg/spec/enum.SortDirection.html
@@ -4,8 +4,8 @@
 }</code></pre><details class="toggle top-doc" open><summary 
class="hideme"><span>Expand description</span></summary><div 
class="docblock"><p>Sort direction in a partition, either ascending or 
descending</p>
 </div></details><h2 id="variants" class="variants section-header">Variants<a 
href="#variants" class="anchor">§</a></h2><div class="variants"><section 
id="variant.Ascending" class="variant"><a href="#variant.Ascending" 
class="anchor">§</a><h3 class="code-header">Ascending</h3></section><div 
class="docblock"><p>Ascending</p>
 </div><section id="variant.Descending" class="variant"><a 
href="#variant.Descending" class="anchor">§</a><h3 
class="code-header">Descending</h3></section><div 
class="docblock"><p>Descending</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-SortDirection" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/sort.rs.html#35">source</a><a 
href="#impl-Clone-for-SortDirection" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" href="htt [...]
-    __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 [...]
+</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-SortDirection" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/sort.rs.html#35">source</a><a 
href="#impl-Clone-for-SortDirection" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" href="htt [...]
+    __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-SortDirection" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/sort.rs.html#35">source</a><a 
href="#impl-Serialize-for-SortDirection" 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 serd [...]
     __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-SortDirection" class="impl"><a class="src rightside" 
href="../../src/iceberg [...]
diff --git a/api/iceberg/spec/enum.SortOrderBuilderError.html 
b/api/iceberg/spec/enum.SortOrderBuilderError.html
index 9c493ae9..fd0d6c18 100644
--- a/api/iceberg/spec/enum.SortOrderBuilderError.html
+++ b/api/iceberg/spec/enum.SortOrderBuilderError.html
@@ -4,7 +4,7 @@
 }</code></pre><details class="toggle top-doc" open><summary 
class="hideme"><span>Expand description</span></summary><div 
class="docblock"><p>Error type for SortOrderBuilder</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-SortOrderBuilderError" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/sort.rs.html#99">source</a><a 
href="#impl-Debug-for-SortOrderBuilderError" class="anchor">§</a><h3 
class="code-header">impl <a class=" [...]
+</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-SortOrderBuilderError" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/sort.rs.html#99">source</a><a 
href="#impl-Debug-for-SortOrderBuilderError" class="anchor">§</a><h3 
class="code-header">impl <a class=" [...]
     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.Transform.html 
b/api/iceberg/spec/enum.Transform.html
index f419c064..76dc9460 100644
--- a/api/iceberg/spec/enum.Transform.html
+++ b/api/iceberg/spec/enum.Transform.html
@@ -125,8 +125,8 @@ and filtering based on the original, untransformed data.</p>
 <code>bucket(a, 37) as bs</code>, if one row matches <code>a = 10</code>, then 
its partition
 value should match <code>bucket(10, 37) as bs</code>, and we project <code>a = 
10</code> to
 <code>bs = bucket(10, 37)</code></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-Transform" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/transform.rs.html#48">source</a><a 
href="#impl-Clone-for-Transform" class="anchor">§</a><h3 
class="code-header">impl <a  [...]
-    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-Display [...]
+</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-Transform" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/transform.rs.html#48">source</a><a 
href="#impl-Clone-for-Transform" class="anchor">§</a><h3 
class="code-header">impl <a  [...]
+    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-Display [...]
 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-Transform" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/transform.rs.html#713-718">source</a><a 
href="#impl-Serialize-for-Transform" 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 se [...]
     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-Transform" 
class="impl"><a class="src rightside" href="../../src/iceberg/spec/ [...]
diff --git a/api/iceberg/spec/enum.Type.html b/api/iceberg/spec/enum.Type.html
index 76a94f19..f168ff2b 100644
--- a/api/iceberg/spec/enum.Type.html
+++ b/api/iceberg/spec/enum.Type.html
@@ -17,8 +17,8 @@
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.decimal_required_bytes" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#155-158">source</a><h4 
class="code-header">pub fn <a href="#method.decimal_required_bytes" 
class="fn">decimal_required_bytes</a>(precision: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.u32.html";>u32</a>) -&gt; 
<a class="type" href="../type.Result.html" title="typ [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.decimal" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#162-165">source</a><h4 
class="code-header">pub fn <a href="#method.decimal" 
class="fn">decimal</a>(precision: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.u32.html";>u32</a>, scale: 
<a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.u32.html";>u32</a>) -&g 
[...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.is_floating_type" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#169-174">source</a><h4 
class="code-header">pub fn <a href="#method.is_floating_type" 
class="fn">is_floating_type</a>(&amp;self) -&gt; <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.bool.html";>bool</a></h4></section></summary><div
 class="docblock"><p>Check if it’s float 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-Type" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#82">source</a><a 
href="#impl-Clone-for-Type" class="anchor">§</a><h3 class="code-header">impl <a 
class="tra [...]
-    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-Display [...]
+</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-Type" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#82">source</a><a 
href="#impl-Clone-for-Type" class="anchor">§</a><h3 class="code-header">impl <a 
class="tra [...]
+    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-Display [...]
 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-Type" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#271-277">source</a><a 
href="#impl-Serialize-for-Type" 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-Type" 
class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatyp [...]
diff --git a/api/iceberg/spec/enum.ViewFormatVersion.html 
b/api/iceberg/spec/enum.ViewFormatVersion.html
index e499cef8..691f2167 100644
--- a/api/iceberg/spec/enum.ViewFormatVersion.html
+++ b/api/iceberg/spec/enum.ViewFormatVersion.html
@@ -2,8 +2,8 @@
     V1 = 1,
 }</code></pre><details class="toggle top-doc" open><summary 
class="hideme"><span>Expand description</span></summary><div 
class="docblock"><p>Iceberg format version</p>
 </div></details><h2 id="variants" class="variants section-header">Variants<a 
href="#variants" class="anchor">§</a></h2><div class="variants"><section 
id="variant.V1" class="variant"><a href="#variant.V1" class="anchor">§</a><h3 
class="code-header">V1 = 1</h3></section><div class="docblock"><p>Iceberg view 
spec version 1</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-ViewFormatVersion" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/view_metadata.rs.html#367">source</a><a 
href="#impl-Clone-for-ViewFormatVersion" class="anchor">§</a><h3 
class="code-header">impl <a class [...]
-    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-Display [...]
+</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-ViewFormatVersion" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/view_metadata.rs.html#367">source</a><a 
href="#impl-Clone-for-ViewFormatVersion" class="anchor">§</a><h3 
class="code-header">impl <a class [...]
+    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-Display [...]
     Self: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div 
class='docblock'>Compares and returns the maximum of two values. <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html#method.max";>Read
 more</a></div></details><details class="toggle method-toggle" 
open><summary><section id="method.min" class="method trait-impl"><span 
class="rightside"><span class="si [...]
     Self: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div 
class='docblock'>Compares and returns the minimum of two values. <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html#method.min";>Read
 more</a></div></details><details class="toggle method-toggle" 
open><summary><section id="method.clamp" class="method trait-impl"><span 
class="rightside"><span class=" [...]
     Self: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a> + <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html"; 
title="trait 
core::cmp::PartialOrd">PartialOrd</a>,</div></h4></section></summary><div 
class='docblock'>Restrict a value to a certain interval. <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html#method.clamp";>Read
 more</a></div></details></div> [...]
diff --git a/api/iceberg/spec/struct.Datum.html 
b/api/iceberg/spec/struct.Datum.html
index d04a60d2..95ddec4b 100644
--- a/api/iceberg/spec/struct.Datum.html
+++ b/api/iceberg/spec/struct.Datum.html
@@ -277,7 +277,7 @@ Example:</p>
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.data_type" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/values.rs.html#1212-1214">source</a><h4 
class="code-header">pub fn <a href="#method.data_type" 
class="fn">data_type</a>(&amp;self) -&gt; &amp;<a class="enum" 
href="enum.PrimitiveType.html" title="enum 
iceberg::spec::PrimitiveType">PrimitiveType</a></h4></section></summary><div 
class="docblock"><p>Get the primitive type fro [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.is_nan" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/values.rs.html#1218-1224">source</a><h4 
class="code-header">pub fn <a href="#method.is_nan" 
class="fn">is_nan</a>(&amp;self) -&gt; <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.bool.html";>bool</a></h4></section></summary><div
 class="docblock"><p>Returns true if the Literal represents a primitive type
 that can be a NaN, and that it’s value is NaN</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-Datum" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/values.rs.html#107">source</a><a 
href="#impl-Clone-for-Datum" class="anchor">§</a><h3 class="code-header">impl 
<a class="tra [...]
+</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-Datum" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/values.rs.html#107">source</a><a 
href="#impl-Clone-for-Datum" class="anchor">§</a><h3 class="code-header">impl 
<a class="tra [...]
     H: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html"; 
title="trait core::hash::Hasher">Hasher</a>,
     Self: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div 
class='docblock'>Feeds a slice of this type into the given <a 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html"; 
title="trait core::hash::Hasher"><code>Hasher</code></a>. <a 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#method.hash_slice";>Read
 more</a></div></details></div></d [...]
 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= [...]
diff --git a/api/iceberg/spec/struct.SortField.html 
b/api/iceberg/spec/struct.SortField.html
index 3822b3d6..04c66d8a 100644
--- a/api/iceberg/spec/struct.SortField.html
+++ b/api/iceberg/spec/struct.SortField.html
@@ -11,8 +11,8 @@
 </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-SortField" class="impl"><a class="src 
rightside" href="../../src/iceberg/spec/sort.rs.html#75">source</a><a 
href="#impl-SortField" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.SortField.html" title="struct 
iceberg::spec::SortFiel [...]
 On the builder, call <code>.source_id(...)</code>, 
<code>.transform(...)</code>, <code>.direction(...)</code>, 
<code>.null_order(...)</code> to set the values of the fields.
 Finally, call <code>.build()</code> to create the instance of 
<code>SortField</code>.</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-SortField" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/sort.rs.html#75">source</a><a 
href="#impl-Clone-for-SortField" class="anchor">§</a><h3 
class="code-header">impl <a class [...]
-    __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 [...]
+</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-SortField" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/sort.rs.html#75">source</a><a 
href="#impl-Clone-for-SortField" class="anchor">§</a><h3 
class="code-header">impl <a class [...]
+    __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-SortField" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/sort.rs.html#75">source</a><a 
href="#impl-Serialize-for-SortField" 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-SortField" 
class="impl"><a class="src rightside" href="../../src/iceberg/spec/ [...]
diff --git a/api/iceberg/struct.Error.html b/api/iceberg/struct.Error.html
index e33d5867..ef46e84f 100644
--- a/api/iceberg/struct.Error.html
+++ b/api/iceberg/struct.Error.html
@@ -35,7 +35,7 @@ Backtrace:
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.kind" class="method"><a class="src rightside" 
href="../src/iceberg/error.rs.html#241-243">source</a><h4 
class="code-header">pub fn <a href="#method.kind" 
class="fn">kind</a>(&amp;self) -&gt; <a class="enum" href="enum.ErrorKind.html" 
title="enum iceberg::ErrorKind">ErrorKind</a></h4></section></summary><div 
class="docblock"><p>Return error’s kind.</p>
 <p>Users can use this method to check error’s kind and take actions.</p>
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.message" class="method"><a class="src rightside" 
href="../src/iceberg/error.rs.html#247-249">source</a><h4 
class="code-header">pub fn <a href="#method.message" 
class="fn">message</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>Return error’s message.</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-Debug-for-Error" class="impl"><a class="src rightside" 
href="../src/iceberg/error.rs.html#148-187">source</a><a 
href="#impl-Debug-for-Error" class="anchor">§</a><h3 class="code-header">impl 
<a class="trait" h [...]
+</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-Debug-for-Error" class="impl"><a class="src rightside" 
href="../src/iceberg/error.rs.html#148-187">source</a><a 
href="#impl-Debug-for-Error" class="anchor">§</a><h3 class="code-header">impl 
<a class="trait" h [...]
     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/struct.NamespaceIdent.html 
b/api/iceberg/struct.NamespaceIdent.html
index 67f24604..6756a718 100644
--- a/api/iceberg/struct.NamespaceIdent.html
+++ b/api/iceberg/struct.NamespaceIdent.html
@@ -1103,8 +1103,8 @@ given separator between each.</p>
 <h5 id="examples-60"><a class="doc-anchor" 
href="#examples-60">§</a>Examples</h5>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span 
class="macro">assert_eq!</span>([<span class="string">"hello"</span>, <span 
class="string">"world"</span>].connect(<span class="string">" "</span>), <span 
class="string">"hello world"</span>);
 <span class="macro">assert_eq!</span>([[<span class="number">1</span>, <span 
class="number">2</span>], [<span class="number">3</span>, <span 
class="number">4</span>]].connect(<span class="kw-2">&amp;</span><span 
class="number">0</span>), [<span class="number">1</span>, <span 
class="number">2</span>, <span class="number">0</span>, <span 
class="number">3</span>, <span class="number">4</span>]);</code></pre></div>
-</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-AsRef%3CVec%3CString%3E%3E-for-NamespaceIdent" class="impl"><a 
class="src rightside" 
href="../src/iceberg/catalog/mod.rs.html#152-156">source</a><a 
href="#impl-AsRef%3CVec%3CString%3E%3E-for-NamespaceIdent" class="anchor">§< 
[...]
-    __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 [...]
+</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-AsRef%3CVec%3CString%3E%3E-for-NamespaceIdent" class="impl"><a 
class="src rightside" 
href="../src/iceberg/catalog/mod.rs.html#152-156">source</a><a 
href="#impl-AsRef%3CVec%3CString%3E%3E-for-NamespaceIdent" class="anchor">§< 
[...]
+    __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 [...]
     H: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html"; 
title="trait core::hash::Hasher">Hasher</a>,
     Self: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div 
class='docblock'>Feeds a slice of this type into the given <a 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html"; 
title="trait core::hash::Hasher"><code>Hasher</code></a>. <a 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#method.hash_slice";>Read
 more</a></div></details></div></d [...]
     Self: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div 
class='docblock'>Compares and returns the maximum of two values. <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html#method.max";>Read
 more</a></div></details><details class="toggle method-toggle" 
open><summary><section id="method.min" class="method trait-impl"><span 
class="rightside"><span class="si [...]
diff --git a/api/iceberg/struct.TableIdent.html 
b/api/iceberg/struct.TableIdent.html
index b1dc2e5c..bcb14533 100644
--- a/api/iceberg/struct.TableIdent.html
+++ b/api/iceberg/struct.TableIdent.html
@@ -8,8 +8,8 @@
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.namespace" class="method"><a class="src rightside" 
href="../src/iceberg/catalog/mod.rs.html#217-219">source</a><h4 
class="code-header">pub fn <a href="#method.namespace" 
class="fn">namespace</a>(&amp;self) -&gt; &amp;<a class="struct" 
href="struct.NamespaceIdent.html" title="struct 
iceberg::NamespaceIdent">NamespaceIdent</a></h4></section></summary><div 
class="docblock"><p>Get the namespace of the table.</p>
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.name" class="method"><a class="src rightside" 
href="../src/iceberg/catalog/mod.rs.html#222-224">source</a><h4 
class="code-header">pub fn <a href="#method.name" 
class="fn">name</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 name of the table.</p>
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.from_strs" class="method"><a class="src rightside" 
href="../src/iceberg/catalog/mod.rs.html#227-238">source</a><h4 
class="code-header">pub fn <a href="#method.from_strs" 
class="fn">from_strs</a>(iter: 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 = impl <a  
[...]
-</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-TableIdent" class="impl"><a class="src rightside" 
href="../src/iceberg/catalog/mod.rs.html#202">source</a><a 
href="#impl-Clone-for-TableIdent" 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-Displ [...]
+</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-TableIdent" class="impl"><a class="src rightside" 
href="../src/iceberg/catalog/mod.rs.html#202">source</a><a 
href="#impl-Clone-for-TableIdent" 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-Displ [...]
     H: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html"; 
title="trait core::hash::Hasher">Hasher</a>,
     Self: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div 
class='docblock'>Feeds a slice of this type into the given <a 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html"; 
title="trait core::hash::Hasher"><code>Hasher</code></a>. <a 
href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#method.hash_slice";>Read
 more</a></div></details></div></d [...]
 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= [...]
diff --git a/api/iceberg/writer/file_writer/struct.ParquetWriter.html 
b/api/iceberg/writer/file_writer/struct.ParquetWriter.html
index f14ee431..77269936 100644
--- a/api/iceberg/writer/file_writer/struct.ParquetWriter.html
+++ b/api/iceberg/writer/file_writer/struct.ParquetWriter.html
@@ -1,5 +1,5 @@
-<!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="`ParquetWriter`` is used to write arrow data into parquet file on 
storage."><title>ParquetWriter in iceberg::writer::file_writer - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraS
 [...]
-</div></details><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-CurrentFileStatus-for-ParquetWriter" 
class="impl"><a class="src rightside" 
href="../../../src/iceberg/writer/file_writer/parquet_writer.rs.html#573-585">source</a><a
 href="#impl-CurrentFileStatus-for-ParquetWriter" class="anchor"> [...]
+<!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="`ParquetWriter`` is used to write arrow data into parquet file on 
storage."><title>ParquetWriter in iceberg::writer::file_writer - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraS
 [...]
+</div></details><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-CurrentFileStatus-for-ParquetWriter" 
class="impl"><a class="src rightside" 
href="../../../src/iceberg/writer/file_writer/parquet_writer.rs.html#524-536">source</a><a
 href="#impl-CurrentFileStatus-for-ParquetWriter" class="anchor"> [...]
     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/writer/file_writer/struct.ParquetWriterBuilder.html 
b/api/iceberg/writer/file_writer/struct.ParquetWriterBuilder.html
index da3ca0b1..df0d4bcb 100644
--- a/api/iceberg/writer/file_writer/struct.ParquetWriterBuilder.html
+++ b/api/iceberg/writer/file_writer/struct.ParquetWriterBuilder.html
@@ -1,5 +1,5 @@
-<!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="ParquetWriterBuilder is used to builder a 
`ParquetWriter`"><title>ParquetWriterBuilder in iceberg::writer::file_writer - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regula
 [...]
-</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-ParquetWriterBuilder%3CT,+F%3E" class="impl"><a class="src rightside" 
href="../../../src/iceberg/writer/file_writer/parquet_writer.rs.html#63-81">source</a><a
 href="#impl-ParquetWriterBuilder%3CT,+F%3E" class="anchor">§</a><h3 
class="code-header">impl&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="ParquetWriterBuilder is used to builder a 
`ParquetWriter`"><title>ParquetWriterBuilder in iceberg::writer::file_writer - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regula
 [...]
+</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-ParquetWriterBuilder%3CT,+F%3E" class="impl"><a class="src rightside" 
href="../../../src/iceberg/writer/file_writer/parquet_writer.rs.html#65-83">source</a><a
 href="#impl-ParquetWriterBuilder%3CT,+F%3E" class="anchor">§</a><h3 
class="code-header">impl&lt [...]
     props: WriterProperties,
     schema: <a class="type" href="../../spec/type.SchemaRef.html" title="type 
iceberg::spec::SchemaRef">SchemaRef</a>,
     file_io: <a class="struct" href="../../io/struct.FileIO.html" 
title="struct iceberg::io::FileIO">FileIO</a>,
@@ -7,7 +7,7 @@
     file_name_generator: F,
 ) -&gt; Self</h4></section></summary><div class="docblock"><p>Create a new 
<code>ParquetWriterBuilder</code>
 To construct the write result, the schema should contain the 
<code>PARQUET_FIELD_ID_META_KEY</code> metadata for each field.</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-ParquetWriterBuilder%3CT,+F%3E" class="impl"><a class="src 
rightside" 
href="../../../src/iceberg/writer/file_writer/parquet_writer.rs.html#53">source</a><a
 href="#impl-Clone-for-ParquetWriterBuilder [...]
+</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-ParquetWriterBuilder%3CT,+F%3E" class="impl"><a class="src 
rightside" 
href="../../../src/iceberg/writer/file_writer/parquet_writer.rs.html#55">source</a><a
 href="#impl-Clone-for-ParquetWriterBuilder [...]
     T: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html"; 
title="trait core::marker::Freeze">Freeze</a>,
     F: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html"; 
title="trait core::marker::Freeze">Freeze</a>,</div></h3></section><section 
id="impl-RefUnwindSafe-for-ParquetWriterBuilder%3CT,+F%3E" class="impl"><a 
href="#impl-RefUnwindSafe-for-ParquetWriterBuilder%3CT,+F%3E" 
class="anchor">§</a><h3 class="code-header">impl&lt;T, F&gt; !<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html";
 title="trait cor [...]
     T: <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html"; 
title="trait core::marker::Sync">Sync</a>,
diff --git a/api/iceberg/writer/file_writer/trait.FileWriter.html 
b/api/iceberg/writer/file_writer/trait.FileWriter.html
index bcfd6b41..2de78d85 100644
--- a/api/iceberg/writer/file_writer/trait.FileWriter.html
+++ b/api/iceberg/writer/file_writer/trait.FileWriter.html
@@ -11,4 +11,4 @@
     batch: &amp;RecordBatch,
 ) -&gt; impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html"; 
title="trait core::future::future::Future">Future</a>&lt;Output = <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;&gt; 
+ <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html"; 
title="trait core::marker::Send">Send</a [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="tymethod.close" class="method"><a class="src rightside" 
href="../../../src/iceberg/writer/file_writer/mod.rs.html#48">source</a><h4 
class="code-header">fn <a href="#tymethod.close" class="fn">close</a>(self) 
-&gt; impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html"; 
title="trait core::future::future::Future">Future</a>&lt;Output = <a 
class="type" href="../../typ [...]
-</div></details></div><h2 id="object-safety" class="section-header">Object 
Safety<a href="#object-safety" class="anchor">§</a></h2><div 
class="object-safety-info">This trait is <b>not</b> <a 
href="https://doc.rust-lang.org/nightly/reference/items/traits.html#object-safety";>object
 safe</a>.</div><h2 id="implementors" class="section-header">Implementors<a 
href="#implementors" class="anchor">§</a></h2><div 
id="implementors-list"><section id="impl-FileWriter-for-ParquetWriter" 
class="impl">< [...]
\ No newline at end of file
+</div></details></div><h2 id="object-safety" class="section-header">Object 
Safety<a href="#object-safety" class="anchor">§</a></h2><div 
class="object-safety-info">This trait is <b>not</b> <a 
href="https://doc.rust-lang.org/nightly/reference/items/traits.html#object-safety";>object
 safe</a>.</div><h2 id="implementors" class="section-header">Implementors<a 
href="#implementors" class="anchor">§</a></h2><div 
id="implementors-list"><section id="impl-FileWriter-for-ParquetWriter" 
class="impl">< [...]
\ No newline at end of file
diff --git a/api/iceberg/writer/file_writer/trait.FileWriterBuilder.html 
b/api/iceberg/writer/file_writer/trait.FileWriterBuilder.html
index 9639ad2f..d7b5f8cc 100644
--- a/api/iceberg/writer/file_writer/trait.FileWriterBuilder.html
+++ b/api/iceberg/writer/file_writer/trait.FileWriterBuilder.html
@@ -6,4 +6,4 @@
 }</code></pre><details class="toggle top-doc" open><summary 
class="hideme"><span>Expand description</span></summary><div 
class="docblock"><p>File writer builder trait.</p>
 </div></details><h2 id="required-associated-types" 
class="section-header">Required Associated Types<a 
href="#required-associated-types" class="anchor">§</a></h2><div 
class="methods"><details class="toggle" open><summary><section 
id="associatedtype.R" class="method"><a class="src rightside" 
href="../../../src/iceberg/writer/file_writer/mod.rs.html#38">source</a><h4 
class="code-header">type <a href="#associatedtype.R" 
class="associatedtype">R</a>: <a class="trait" href="trait.FileWriter.ht [...]
 </div></details></div><h2 id="required-methods" 
class="section-header">Required Methods<a href="#required-methods" 
class="anchor">§</a></h2><div class="methods"><details class="toggle 
method-toggle" open><summary><section id="tymethod.build" class="method"><a 
class="src rightside" 
href="../../../src/iceberg/writer/file_writer/mod.rs.html#40">source</a><h4 
class="code-header">fn <a href="#tymethod.build" class="fn">build</a>(self) 
-&gt; impl <a class="trait" href="https://doc.rust-lang.or [...]
-</div></details></div><h2 id="object-safety" class="section-header">Object 
Safety<a href="#object-safety" class="anchor">§</a></h2><div 
class="object-safety-info">This trait is <b>not</b> <a 
href="https://doc.rust-lang.org/nightly/reference/items/traits.html#object-safety";>object
 safe</a>.</div><h2 id="implementors" class="section-header">Implementors<a 
href="#implementors" class="anchor">§</a></h2><div 
id="implementors-list"><details class="toggle 
implementors-toggle"><summary><section  [...]
\ No newline at end of file
+</div></details></div><h2 id="object-safety" class="section-header">Object 
Safety<a href="#object-safety" class="anchor">§</a></h2><div 
class="object-safety-info">This trait is <b>not</b> <a 
href="https://doc.rust-lang.org/nightly/reference/items/traits.html#object-safety";>object
 safe</a>.</div><h2 id="implementors" class="section-header">Implementors<a 
href="#implementors" class="anchor">§</a></h2><div 
id="implementors-list"><details class="toggle 
implementors-toggle"><summary><section  [...]
\ No newline at end of file
diff --git a/api/iceberg/writer/trait.CurrentFileStatus.html 
b/api/iceberg/writer/trait.CurrentFileStatus.html
index a6b5facf..7e818214 100644
--- a/api/iceberg/writer/trait.CurrentFileStatus.html
+++ b/api/iceberg/writer/trait.CurrentFileStatus.html
@@ -8,4 +8,4 @@ file.</p>
 </div></details><h2 id="required-methods" class="section-header">Required 
Methods<a href="#required-methods" class="anchor">§</a></h2><div 
class="methods"><details class="toggle method-toggle" open><summary><section 
id="tymethod.current_file_path" class="method"><a class="src rightside" 
href="../../src/iceberg/writer/mod.rs.html#234">source</a><h4 
class="code-header">fn <a href="#tymethod.current_file_path" 
class="fn">current_file_path</a>(&amp;self) -&gt; <a class="struct" 
href="https:/ [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="tymethod.current_row_num" class="method"><a class="src rightside" 
href="../../src/iceberg/writer/mod.rs.html#236">source</a><h4 
class="code-header">fn <a href="#tymethod.current_row_num" 
class="fn">current_row_num</a>(&amp;self) -&gt; <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.usize.html";>usize</a></h4></section></summary><div
 class="docblock"><p>Get the current file row number.</p>
 </div></details><details class="toggle method-toggle" open><summary><section 
id="tymethod.current_written_size" class="method"><a class="src rightside" 
href="../../src/iceberg/writer/mod.rs.html#238">source</a><h4 
class="code-header">fn <a href="#tymethod.current_written_size" 
class="fn">current_written_size</a>(&amp;self) -&gt; <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.usize.html";>usize</a></h4></section></summary><div
 class="docblock"><p>Get the current [...]
-</div></details></div><h2 id="implementors" 
class="section-header">Implementors<a href="#implementors" 
class="anchor">§</a></h2><div id="implementors-list"><section 
id="impl-CurrentFileStatus-for-ParquetWriter" class="impl"><a class="src 
rightside" 
href="../../src/iceberg/writer/file_writer/parquet_writer.rs.html#573-585">source</a><a
 href="#impl-CurrentFileStatus-for-ParquetWriter" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" href="trait.CurrentFileStatus.html" 
titl [...]
\ No newline at end of file
+</div></details></div><h2 id="implementors" 
class="section-header">Implementors<a href="#implementors" 
class="anchor">§</a></h2><div id="implementors-list"><section 
id="impl-CurrentFileStatus-for-ParquetWriter" class="impl"><a class="src 
rightside" 
href="../../src/iceberg/writer/file_writer/parquet_writer.rs.html#524-536">source</a><a
 href="#impl-CurrentFileStatus-for-ParquetWriter" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" href="trait.CurrentFileStatus.html" 
titl [...]
\ No newline at end of file
diff --git a/api/search-index.js b/api/search-index.js
index 3675eff9..5895ea49 100644
--- a/api/search-index.js
+++ b/api/search-index.js
@@ -1,5 +1,5 @@
 var searchIndex = new Map(JSON.parse('[\
-["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPPPPIPPPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNCNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFFFKSRRSNNNNNNNNHHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNMNMHMNNNNNNNNNNHNNNNNNNPPPPPPPPFKRGFIPPPPPPPPFPPPPPPPPPGGFPPFPIPPFNN
 [...]
+["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPPPPIPPPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNCNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFFFKSRRSNNNNNNNNHHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNMNMHMNNNNNNNNNNHNNNNNNNPPPPPPPPFKRGFIPPPPPPPPFPPPPPPPPPGGFPPFPIPPFNN
 [...]
 
["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/settings.html b/api/settings.html
index 8bb04340..0b4d7eab 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/writer/file_writer/parquet_writer.rs.html 
b/api/src/iceberg/writer/file_writer/parquet_writer.rs.html
index 243a678f..61f4e74c 100644
--- a/api/src/iceberg/writer/file_writer/parquet_writer.rs.html
+++ b/api/src/iceberg/writer/file_writer/parquet_writer.rs.html
@@ -1566,55 +1566,6 @@
 <a href="#1566" id="1566">1566</a>
 <a href="#1567" id="1567">1567</a>
 <a href="#1568" id="1568">1568</a>
-<a href="#1569" id="1569">1569</a>
-<a href="#1570" id="1570">1570</a>
-<a href="#1571" id="1571">1571</a>
-<a href="#1572" id="1572">1572</a>
-<a href="#1573" id="1573">1573</a>
-<a href="#1574" id="1574">1574</a>
-<a href="#1575" id="1575">1575</a>
-<a href="#1576" id="1576">1576</a>
-<a href="#1577" id="1577">1577</a>
-<a href="#1578" id="1578">1578</a>
-<a href="#1579" id="1579">1579</a>
-<a href="#1580" id="1580">1580</a>
-<a href="#1581" id="1581">1581</a>
-<a href="#1582" id="1582">1582</a>
-<a href="#1583" id="1583">1583</a>
-<a href="#1584" id="1584">1584</a>
-<a href="#1585" id="1585">1585</a>
-<a href="#1586" id="1586">1586</a>
-<a href="#1587" id="1587">1587</a>
-<a href="#1588" id="1588">1588</a>
-<a href="#1589" id="1589">1589</a>
-<a href="#1590" id="1590">1590</a>
-<a href="#1591" id="1591">1591</a>
-<a href="#1592" id="1592">1592</a>
-<a href="#1593" id="1593">1593</a>
-<a href="#1594" id="1594">1594</a>
-<a href="#1595" id="1595">1595</a>
-<a href="#1596" id="1596">1596</a>
-<a href="#1597" id="1597">1597</a>
-<a href="#1598" id="1598">1598</a>
-<a href="#1599" id="1599">1599</a>
-<a href="#1600" id="1600">1600</a>
-<a href="#1601" id="1601">1601</a>
-<a href="#1602" id="1602">1602</a>
-<a href="#1603" id="1603">1603</a>
-<a href="#1604" id="1604">1604</a>
-<a href="#1605" id="1605">1605</a>
-<a href="#1606" id="1606">1606</a>
-<a href="#1607" id="1607">1607</a>
-<a href="#1608" id="1608">1608</a>
-<a href="#1609" id="1609">1609</a>
-<a href="#1610" id="1610">1610</a>
-<a href="#1611" id="1611">1611</a>
-<a href="#1612" id="1612">1612</a>
-<a href="#1613" id="1613">1613</a>
-<a href="#1614" id="1614">1614</a>
-<a href="#1615" id="1615">1615</a>
-<a href="#1616" id="1616">1616</a>
-<a href="#1617" id="1617">1617</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
@@ -1645,10 +1596,12 @@
 <span class="kw">use </span>parquet::arrow::async_reader::AsyncFileReader;
 <span class="kw">use </span>parquet::arrow::async_writer::AsyncFileWriter 
<span class="kw">as </span>ArrowAsyncFileWriter;
 <span class="kw">use </span>parquet::arrow::AsyncArrowWriter;
-<span class="kw">use </span>parquet::file::metadata::ParquetMetaData;
+<span class="kw">use </span>parquet::file::metadata::{ParquetMetaData, 
ParquetMetaDataReader};
 <span class="kw">use </span>parquet::file::properties::WriterProperties;
-<span class="kw">use </span>parquet::file::statistics::{from_thrift, 
Statistics};
+<span class="kw">use </span>parquet::file::statistics::Statistics;
 <span class="kw">use </span>parquet::format::FileMetaData;
+<span class="kw">use </span>parquet::thrift::{TCompactOutputProtocol, 
TSerializable};
+<span class="kw">use </span>thrift::protocol::TOutputProtocol;
 
 <span class="kw">use </span><span 
class="kw">super</span>::location_generator::{FileNameGenerator, 
LocationGenerator};
 <span class="kw">use </span><span 
class="kw">super</span>::track_writer::TrackWriter;
@@ -1969,89 +1922,27 @@
         <span class="prelude-val">Ok</span>(data_files)
     }
 
-    <span class="kw">fn </span>to_data_file_builder(
-        schema: SchemaRef,
-        metadata: FileMetaData,
-        written_size: usize,
-        file_path: String,
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;DataFileBuilder&gt; {
-        <span class="kw">let </span>index_by_parquet_path = {
-            <span class="kw">let </span><span class="kw-2">mut </span>visitor 
= IndexByParquetPathName::new();
-            visit_schema(<span class="kw-2">&amp;</span>schema, <span 
class="kw-2">&amp;mut </span>visitor)<span class="question-mark">?</span>;
-            visitor
-        };
-
-        <span class="kw">let </span>(column_sizes, value_counts, 
null_value_counts, (lower_bounds, upper_bounds)) = {
-            <span class="kw">let </span><span class="kw-2">mut 
</span>per_col_size: HashMap&lt;i32, u64&gt; = HashMap::new();
-            <span class="kw">let </span><span class="kw-2">mut 
</span>per_col_val_num: HashMap&lt;i32, u64&gt; = HashMap::new();
-            <span class="kw">let </span><span class="kw-2">mut 
</span>per_col_null_val_num: HashMap&lt;i32, u64&gt; = HashMap::new();
-            <span class="kw">let </span><span class="kw-2">mut 
</span>min_max_agg = MinMaxColAggregator::new(schema);
-
-            <span class="kw">for </span>row_group <span class="kw">in 
</span><span class="kw-2">&amp;</span>metadata.row_groups {
-                <span class="kw">for </span>column_chunk <span class="kw">in 
</span>row_group.columns.iter() {
-                    <span class="kw">let </span><span 
class="prelude-val">Some</span>(column_chunk_metadata) = <span 
class="kw-2">&amp;</span>column_chunk.meta_data <span class="kw">else </span>{
-                        <span class="kw">continue</span>;
-                    };
-                    <span class="kw">let </span>physical_type = 
column_chunk_metadata.type_;
-                    <span class="kw">let </span><span 
class="prelude-val">Some</span>(<span class="kw-2">&amp;</span>field_id) =
-                        index_by_parquet_path.get(<span 
class="kw-2">&amp;</span>column_chunk_metadata.path_in_schema.join(<span 
class="string">"."</span>))
-                    <span class="kw">else </span>{
-                        <span class="comment">// Following java 
implementation: 
https://github.com/apache/iceberg/blob/29a2c456353a6120b8c882ed2ab544975b168d7b/parquet/src/main/java/org/apache/iceberg/parquet/ParquetUtil.java#L163
-                        // Ignore the field if it is not in schema.
-                        </span><span class="kw">continue</span>;
-                    };
-                    <span 
class="kw-2">*</span>per_col_size.entry(field_id).or_insert(<span 
class="number">0</span>) +=
-                        column_chunk_metadata.total_compressed_size <span 
class="kw">as </span>u64;
-                    <span 
class="kw-2">*</span>per_col_val_num.entry(field_id).or_insert(<span 
class="number">0</span>) +=
-                        column_chunk_metadata.num_values <span class="kw">as 
</span>u64;
-                    <span class="kw">if let </span><span 
class="prelude-val">Some</span>(null_count) = column_chunk_metadata
-                        .statistics
-                        .as_ref()
-                        .and_then(|s| s.null_count)
-                    {
-                        <span 
class="kw-2">*</span>per_col_null_val_num.entry(field_id).or_insert(<span 
class="number">0_u64</span>) += null_count <span class="kw">as </span>u64;
-                    }
-                    <span class="kw">if let </span><span 
class="prelude-val">Some</span>(statistics) = <span 
class="kw-2">&amp;</span>column_chunk_metadata.statistics {
-                        min_max_agg.update(
-                            field_id,
-                            from_thrift(physical_type.try_into()<span 
class="question-mark">?</span>, <span 
class="prelude-val">Some</span>(statistics.clone()))<span 
class="question-mark">?
-                                </span>.unwrap(),
-                        )<span class="question-mark">?</span>;
-                    }
-                }
-            }
+    <span class="kw">fn </span>thrift_to_parquet_metadata(<span 
class="kw-2">&amp;</span><span class="self">self</span>, file_metadata: 
FileMetaData) -&gt; <span 
class="prelude-ty">Result</span>&lt;ParquetMetaData&gt; {
+        <span class="kw">let </span><span class="kw-2">mut </span>buffer = 
Vec::new();
+        {
+            <span class="kw">let </span><span class="kw-2">mut </span>protocol 
= TCompactOutputProtocol::new(<span class="kw-2">&amp;mut </span>buffer);
+            file_metadata
+                .write_to_out_protocol(<span class="kw-2">&amp;mut 
</span>protocol)
+                .map_err(|err| {
+                    Error::new(ErrorKind::Unexpected, <span 
class="string">"Failed to write parquet metadata"</span>)
+                        .with_source(err)
+                })<span class="question-mark">?</span>;
+
+            protocol.flush().map_err(|err| {
+                Error::new(ErrorKind::Unexpected, <span class="string">"Failed 
to flush protocol"</span>).with_source(err)
+            })<span class="question-mark">?</span>;
+        }
 
-            (
-                per_col_size,
-                per_col_val_num,
-                per_col_null_val_num,
-                min_max_agg.produce(),
-            )
-        };
+        <span class="kw">let </span>parquet_metadata = 
ParquetMetaDataReader::decode_metadata(<span 
class="kw-2">&amp;</span>buffer).map_err(|err| {
+            Error::new(ErrorKind::Unexpected, <span class="string">"Failed to 
decode parquet metadata"</span>).with_source(err)
+        })<span class="question-mark">?</span>;
 
-        <span class="kw">let </span><span class="kw-2">mut </span>builder = 
DataFileBuilder::default();
-        builder
-            .file_path(file_path)
-            .file_format(DataFileFormat::Parquet)
-            .record_count(metadata.num_rows <span class="kw">as </span>u64)
-            .file_size_in_bytes(written_size <span class="kw">as </span>u64)
-            .column_sizes(column_sizes)
-            .value_counts(value_counts)
-            .null_value_counts(null_value_counts)
-            .lower_bounds(lower_bounds)
-            .upper_bounds(upper_bounds)
-            <span class="comment">// # TODO(#417)
-            // - nan_value_counts
-            // - distinct_counts
-            </span>.key_metadata(metadata.footer_signing_key_metadata)
-            .split_offsets(
-                metadata
-                    .row_groups
-                    .iter()
-                    .filter_map(|group| group.file_offset)
-                    .collect(),
-            );
-        <span class="prelude-val">Ok</span>(builder)
+        <span class="prelude-val">Ok</span>(parquet_metadata)
     }
 
     <span class="doccomment">/// `ParquetMetadata` to data file builder
@@ -2168,19 +2059,30 @@
         <span class="prelude-val">Ok</span>(())
     }
 
-    <span class="kw">async fn </span>close(<span class="self">self</span>) 
-&gt; <span class="kw">crate</span>::Result&lt;Vec&lt;<span 
class="kw">crate</span>::spec::DataFileBuilder&gt;&gt; {
-        <span class="kw">let </span><span 
class="prelude-val">Some</span>(writer) = <span 
class="self">self</span>.inner_writer <span class="kw">else </span>{
-            <span class="kw">return </span><span 
class="prelude-val">Ok</span>(<span class="macro">vec!</span>[]);
+    <span class="kw">async fn </span>close(<span class="kw-2">mut </span><span 
class="self">self</span>) -&gt; <span 
class="kw">crate</span>::Result&lt;Vec&lt;<span 
class="kw">crate</span>::spec::DataFileBuilder&gt;&gt; {
+        <span class="kw">let </span>writer = <span class="kw">match 
</span><span class="self">self</span>.inner_writer.take() {
+            <span class="prelude-val">Some</span>(writer) =&gt; writer,
+            <span class="prelude-val">None </span>=&gt; <span 
class="kw">return </span><span class="prelude-val">Ok</span>(<span 
class="macro">vec!</span>[]),
         };
+
         <span class="kw">let </span>metadata = writer.close().<span 
class="kw">await</span>.map_err(|err| {
             Error::new(ErrorKind::Unexpected, <span class="string">"Failed to 
close parquet writer."</span>).with_source(err)
         })<span class="question-mark">?</span>;
 
         <span class="kw">let </span>written_size = <span 
class="self">self</span>.written_size.load(std::sync::atomic::Ordering::Relaxed);
 
-        <span class="prelude-val">Ok</span>(<span 
class="macro">vec!</span>[<span class="self">Self</span>::to_data_file_builder(
+        <span class="kw">let </span>parquet_metadata =
+            Arc::new(<span 
class="self">self</span>.thrift_to_parquet_metadata(metadata).map_err(|err| {
+                Error::new(
+                    ErrorKind::Unexpected,
+                    <span class="string">"Failed to convert metadata from 
thrift to parquet."</span>,
+                )
+                .with_source(err)
+            })<span class="question-mark">?</span>);
+
+        <span class="prelude-val">Ok</span>(<span 
class="macro">vec!</span>[<span 
class="self">Self</span>::parquet_to_data_file_builder(
             <span class="self">self</span>.schema,
-            metadata,
+            parquet_metadata,
             written_size <span class="kw">as </span>usize,
             <span class="self">self</span>.out_file.location().to_string(),
         )<span class="question-mark">?</span>])

Reply via email to