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 c6458813 deploy: e967deb333a2c666218c48cd6f4870fbe7e535bd
c6458813 is described below

commit c6458813aa4f5be90b2d07b15d672d18b0bcc99a
Author: Xuanwo <[email protected]>
AuthorDate: Mon Sep 23 10:37:15 2024 +0000

    deploy: e967deb333a2c666218c48cd6f4870fbe7e535bd
---
 api/help.html                                    |  2 +-
 api/iceberg/enum.ErrorKind.html                  |  2 +-
 api/iceberg/expr/enum.Predicate.html             |  4 +-
 api/iceberg/expr/enum.PredicateOperator.html     |  4 +-
 api/iceberg/expr/struct.BinaryExpression.html    |  4 +-
 api/iceberg/expr/struct.Reference.html           |  4 +-
 api/iceberg/expr/struct.UnaryExpression.html     |  4 +-
 api/iceberg/io/struct.FileIO.html                | 33 +++++++--
 api/iceberg/io/struct.FileIOBuilder.html         | 14 ++--
 api/iceberg/io/struct.FileMetadata.html          |  2 +-
 api/iceberg/io/struct.InputFile.html             | 14 ++--
 api/iceberg/io/struct.OutputFile.html            | 14 ++--
 api/iceberg/io/trait.FileRead.html               |  6 +-
 api/iceberg/io/trait.FileWrite.html              | 10 +--
 api/iceberg/spec/enum.DataFileBuilderError.html  |  2 +-
 api/iceberg/spec/enum.FormatVersion.html         |  4 +-
 api/iceberg/spec/enum.PrimitiveType.html         |  4 +-
 api/iceberg/spec/enum.SortDirection.html         |  4 +-
 api/iceberg/spec/enum.SortOrderBuilderError.html |  2 +-
 api/iceberg/spec/enum.Type.html                  |  2 +-
 api/iceberg/spec/struct.Datum.html               |  2 +-
 api/iceberg/spec/struct.NestedField.html         |  4 +-
 api/iceberg/spec/struct.SortField.html           |  4 +-
 api/iceberg/spec/struct.StructType.html          |  4 +-
 api/iceberg/struct.Error.html                    |  2 +-
 api/search-index.js                              |  2 +-
 api/search.desc/iceberg/iceberg-desc-0-.js       |  2 +-
 api/settings.html                                |  2 +-
 api/src/iceberg/io/file_io.rs.html               | 90 +++++++++++++++++++++---
 29 files changed, 170 insertions(+), 77 deletions(-)

diff --git a/api/help.html b/api/help.html
index 886bccc7..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/enum.ErrorKind.html b/api/iceberg/enum.ErrorKind.html
index 2e8a6b0c..7ffee91a 100644
--- a/api/iceberg/enum.ErrorKind.html
+++ b/api/iceberg/enum.ErrorKind.html
@@ -13,7 +13,7 @@ failed to parse it’s metadata or data file correctly.</p>
 </div><section id="variant.FeatureUnsupported" class="variant"><a 
href="#variant.FeatureUnsupported" class="anchor">§</a><h3 
class="code-header">FeatureUnsupported</h3></section><div 
class="docblock"><p>Iceberg feature is not supported.</p>
 <p>This error is returned when given iceberg feature is not supported.</p>
 </div></div><h2 id="implementations" class="section-header">Implementations<a 
href="#implementations" class="anchor">§</a></h2><div 
id="implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-ErrorKind" class="impl"><a class="src 
rightside" href="../src/iceberg/error.rs.html#49-54">source</a><a 
href="#impl-ErrorKind" class="anchor">§</a><h3 class="code-header">impl <a 
class="enum" href="enum.ErrorKind.html" title="enum iceberg::ErrorKind">ErrorKi 
[...]
-</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-ErrorKind" class="impl"><a class="src rightside" 
href="../src/iceberg/error.rs.html#28">source</a><a 
href="#impl-Clone-for-ErrorKind" class="anchor">§</a><h3 
class="code-header">impl <a class="trait [...]
+</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-ErrorKind" class="impl"><a class="src rightside" 
href="../src/iceberg/error.rs.html#28">source</a><a 
href="#impl-Clone-for-ErrorKind" class="anchor">§</a><h3 
class="code-header">impl <a class="trait [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" 
open><summary><section id="method.ne" class="method trait-impl"><span 
class="rightside"><span class="since" title="Stable since Rust version 
1.0.0">1.0.0</span> · <a class="src" 
href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263";>source</a></span><a
 href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a 
href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne";
 class= [...]
 sufficient, and should not be overridden without very good 
reason.</div></details></div></details><section id="impl-Copy-for-ErrorKind" 
class="impl"><a class="src rightside" 
href="../src/iceberg/error.rs.html#28">source</a><a 
href="#impl-Copy-for-ErrorKind" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html"; 
title="trait core::marker::Copy">Copy</a> for <a class="enum" 
href="enum.ErrorKind.html" title="enu [...]
     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 
[...]
diff --git a/api/iceberg/expr/enum.Predicate.html 
b/api/iceberg/expr/enum.Predicate.html
index 95ba266c..7d69fd80 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.210/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.210/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.210/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.210/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/enum.PredicateOperator.html 
b/api/iceberg/expr/enum.PredicateOperator.html
index 43ae7cdf..4c31fae0 100644
--- a/api/iceberg/expr/enum.PredicateOperator.html
+++ b/api/iceberg/expr/enum.PredicateOperator.html
@@ -38,8 +38,8 @@
 <span class="macro">assert!</span>(PredicateOperator::Eq.negate() == 
PredicateOperator::NotEq);
 <span class="macro">assert!</span>(PredicateOperator::In.negate() == 
PredicateOperator::NotIn);
 <span class="macro">assert!</span>(PredicateOperator::StartsWith.negate() == 
PredicateOperator::NotStartsWith);</code></pre></div>
-</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-PredicateOperator" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/mod.rs.html#37">source</a><a 
href="#impl-Clone-for-PredicateOperator" class="anchor">§</a><h3 
class="code-header [...]
-    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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-PredicateOperator" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/mod.rs.html#37">source</a><a 
href="#impl-Clone-for-PredicateOperator" class="anchor">§</a><h3 
class="code-header [...]
+    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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-PredicateOperator" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/mod.rs.html#37">source</a><a 
href="#impl-Serialize-for-PredicateOperator" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://docs.rs/serde/1.0.210/serde/ser/trait.Serialize.html"; title="tra 
[...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/serde/ser/trait.Serialize.html#tymethod.serialize";>Read
 more</a></div></details></div></details><section 
id="impl-Copy-for-PredicateOperator" class="impl"><a class="src rightside" 
href="../../src/ice [...]
diff --git a/api/iceberg/expr/struct.BinaryExpression.html 
b/api/iceberg/expr/struct.BinaryExpression.html
index b19c116a..790051b4 100644
--- a/api/iceberg/expr/struct.BinaryExpression.html
+++ b/api/iceberg/expr/struct.BinaryExpression.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Binary 
predicate, for example, `a &gt; 10`."><title>BinaryExpression in iceberg::expr 
- 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans
 [...]
-</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-Bind-for-BinaryExpression%3CT%3E" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#200-211">source</a><a 
href="#impl-Bind-for-BinaryExpression%3CT%3E" class="anchor">§</a><h3 
class="code-header" [...]
+</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-Bind-for-BinaryExpression%3CT%3E" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/predicate.rs.html#200-211">source</a><a 
href="#impl-Bind-for-BinaryExpression%3CT%3E" class="anchor">§</a><h3 
class="code-header" [...]
     T: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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#152">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.210/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.210/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.210/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.210/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-BinaryExpression%3CT%3E" class="impl"><a class="src 
rightside" href="../../src/iceberg/expr/predicate.rs.html#152">source</a><a 
href="#impl-Serialize-for-BinaryExpression%3CT%3E" class="anchor">§</a><h3 
class="code-header">impl&lt;T&gt; <a class="trait" 
href="https://docs.rs/serde/1.0.210/serde/ser/trai [...]
     T: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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#152">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.Reference.html 
b/api/iceberg/expr/struct.Reference.html
index d8ece61e..70a77fe6 100644
--- a/api/iceberg/expr/struct.Reference.html
+++ b/api/iceberg/expr/struct.Reference.html
@@ -105,8 +105,8 @@ For example, <code>a</code> in <code>a &gt; 10</code>.</p>
 
 <span class="kw">let </span>as_string = <span 
class="macro">format!</span>(<span class="string">"{expr}"</span>);
 <span class="macro">assert!</span>(<span class="kw-2">&amp;</span>as_string == 
<span class="string">"a NOT IN (5, 6)" </span>|| <span 
class="kw-2">&amp;</span>as_string == <span class="string">"a NOT IN (6, 
5)"</span>);</code></pre></div>
-</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-Reference" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/term.rs.html#309-339">source</a><a 
href="#impl-Bind-for-Reference" class="anchor">§</a><h3 
class="code-header">impl <a cl [...]
-    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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-Bind-for-Reference" class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/term.rs.html#309-339">source</a><a 
href="#impl-Bind-for-Reference" class="anchor">§</a><h3 
class="code-header">impl <a cl [...]
+    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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-Reference" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/expr/term.rs.html#37">source</a><a 
href="#impl-Serialize-for-Reference" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://docs.rs/serde/1.0.210/serde/ser/trait.Serialize.html"; 
title="trait serde::ser:: [...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/serde/ser/trait.Serialize.html#tymethod.serialize";>Read
 more</a></div></details></div></details><section 
id="impl-StructuralPartialEq-for-Reference" class="impl"><a class="src 
rightside" href="../../ [...]
diff --git a/api/iceberg/expr/struct.UnaryExpression.html 
b/api/iceberg/expr/struct.UnaryExpression.html
index e9faf0f7..fb84b98a 100644
--- a/api/iceberg/expr/struct.UnaryExpression.html
+++ b/api/iceberg/expr/struct.UnaryExpression.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Unary 
predicate, for example, `a IS NULL`."><title>UnaryExpression in iceberg::expr - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-M
 [...]
-</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-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 
class="code-header">i [...]
+</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-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 
class="code-header">i [...]
     T: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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.210/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.210/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.210/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.210/serde/ser/trait. [...]
     T: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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/io/struct.FileIO.html 
b/api/iceberg/io/struct.FileIO.html
index 591c1bda..419b381f 100644
--- a/api/iceberg/io/struct.FileIO.html
+++ b/api/iceberg/io/struct.FileIO.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="FileIO 
implementation, used to manipulate files in underlying storage."><title>FileIO 
in iceberg::io - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd
 [...]
+<!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="FileIO 
implementation, used to manipulate files in underlying storage."><title>FileIO 
in iceberg::io - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd
 [...]
 <h2 id="note"><a class="doc-anchor" href="#note">§</a>Note</h2>
 <p>All path passed to <code>FileIO</code> must be absolute path starting with 
scheme string used to construct <code>FileIO</code>.
 For example, if you construct <code>FileIO</code> with <code>s3a</code> 
scheme, then all path passed to <code>FileIO</code> must start with 
<code>s3a://</code>.</p>
@@ -9,16 +9,37 @@ For example, if you construct <code>FileIO</code> with 
<code>s3a</code> scheme,
 <tr><td>S3</td><td><code>storage-s3</code></td><td><code>s3</code>, 
<code>s3a</code></td></tr>
 <tr><td>GCS</td><td><code>storage-gcs</code></td><td><code>gs</code></td></tr>
 </tbody></table>
-</div></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-FileIO" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#49-108">source</a><a 
href="#impl-FileIO" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.FileIO.html" title="struct iceberg::io [...]
+</div></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-FileIO" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#49-134">source</a><a 
href="#impl-FileIO" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.FileIO.html" title="struct iceberg::io [...]
 <ul>
 <li>If it’s a valid url, for example <code>s3://bucket/a</code>, url scheme 
will be used, and the rest of the url will be ignored.</li>
 <li>If it’s not a valid url, will try to detect if it’s a file path.</li>
 </ul>
 <p>Otherwise will return parsing error.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.delete" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#74-77">source</a><h4 
class="code-header">pub async fn <a href="#method.delete" 
class="fn">delete</a>(&amp;self, path: impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html"; 
title="trait core::convert::AsRef">AsRef</a>&lt;<a class="primitive" 
href="https://doc.rust-lang.org/n [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.is_exist" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#80-83">source</a><h4 
class="code-header">pub async fn <a href="#method.is_exist" 
class="fn">is_exist</a>(&amp;self, path: impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html"; 
title="trait core::convert::AsRef">AsRef</a>&lt;<a class="primitive" 
href="https://doc.rust-lang [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.new_input" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#86-95">source</a><h4 
class="code-header">pub fn <a href="#method.new_input" 
class="fn">new_input</a>(&amp;self, path: impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html"; 
title="trait core::convert::AsRef">AsRef</a>&lt;<a class="primitive" 
href="https://doc.rust-lang.or [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.new_output" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#98-107">source</a><h4 
class="code-header">pub fn <a href="#method.new_output" 
class="fn">new_output</a>(&amp;self, path: impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html"; 
title="trait core::convert::AsRef">AsRef</a>&lt;<a class="primitive" 
href="https://doc.rust-lan [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.delete" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#78-81">source</a><h4 
class="code-header">pub async fn <a href="#method.delete" 
class="fn">delete</a>(&amp;self, path: impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html"; 
title="trait core::convert::AsRef">AsRef</a>&lt;<a class="primitive" 
href="https://doc.rust-lang.org/n [...]
+<h5 id="arguments"><a class="doc-anchor" href="#arguments">§</a>Arguments</h5>
+<ul>
+<li>path: It should be <em>absolute</em> path starting with scheme string used 
to construct <a href="struct.FileIO.html" title="struct 
iceberg::io::FileIO"><code>FileIO</code></a>.</li>
+</ul>
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.remove_all" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#88-91">source</a><h4 
class="code-header">pub async fn <a href="#method.remove_all" 
class="fn">remove_all</a>(&amp;self, path: impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html"; 
title="trait core::convert::AsRef">AsRef</a>&lt;<a class="primitive" 
href="https://doc.rus [...]
+<h5 id="arguments-1"><a class="doc-anchor" 
href="#arguments-1">§</a>Arguments</h5>
+<ul>
+<li>path: It should be <em>absolute</em> path starting with scheme string used 
to construct <a href="struct.FileIO.html" title="struct 
iceberg::io::FileIO"><code>FileIO</code></a>.</li>
+</ul>
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.is_exist" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#98-101">source</a><h4 
class="code-header">pub async fn <a href="#method.is_exist" 
class="fn">is_exist</a>(&amp;self, path: impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html"; 
title="trait core::convert::AsRef">AsRef</a>&lt;<a class="primitive" 
href="https://doc.rust-lan [...]
+<h5 id="arguments-2"><a class="doc-anchor" 
href="#arguments-2">§</a>Arguments</h5>
+<ul>
+<li>path: It should be <em>absolute</em> path starting with scheme string used 
to construct <a href="struct.FileIO.html" title="struct 
iceberg::io::FileIO"><code>FileIO</code></a>.</li>
+</ul>
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.new_input" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#108-117">source</a><h4 
class="code-header">pub fn <a href="#method.new_input" 
class="fn">new_input</a>(&amp;self, path: impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html"; 
title="trait core::convert::AsRef">AsRef</a>&lt;<a class="primitive" 
href="https://doc.rust-lang. [...]
+<h5 id="arguments-3"><a class="doc-anchor" 
href="#arguments-3">§</a>Arguments</h5>
+<ul>
+<li>path: It should be <em>absolute</em> path starting with scheme string used 
to construct <a href="struct.FileIO.html" title="struct 
iceberg::io::FileIO"><code>FileIO</code></a>.</li>
+</ul>
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.new_output" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#124-133">source</a><h4 
class="code-header">pub fn <a href="#method.new_output" 
class="fn">new_output</a>(&amp;self, path: impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html"; 
title="trait core::convert::AsRef">AsRef</a>&lt;<a class="primitive" 
href="https://doc.rust-la [...]
+<h5 id="arguments-4"><a class="doc-anchor" 
href="#arguments-4">§</a>Arguments</h5>
+<ul>
+<li>path: It should be <em>absolute</em> path starting with scheme string used 
to construct <a href="struct.FileIO.html" title="struct 
iceberg::io::FileIO"><code>FileIO</code></a>.</li>
+</ul>
 </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-FileIO" class="impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#44">source</a><a 
href="#impl-Clone-for-FileIO" class="anchor">§</a><h3 class="code-header">impl 
<a class="tra [...]
     T: 'static + ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.type_id" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141";>source</a><a 
href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href 
[...]
     T: ?<a class="trait" 
href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"; 
title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div 
class="impl-items"><details class="toggle method-toggle" open><summary><section 
id="method.borrow" class="method trait-impl"><a class="src rightside" 
href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210";>source</a><a
 href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a 
href="https:/ [...]
diff --git a/api/iceberg/io/struct.FileIOBuilder.html 
b/api/iceberg/io/struct.FileIOBuilder.html
index 599ab640..ac0cbc8e 100644
--- a/api/iceberg/io/struct.FileIOBuilder.html
+++ b/api/iceberg/io/struct.FileIOBuilder.html
@@ -1,14 +1,14 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Builder 
for `FileIO`."><title>FileIOBuilder in iceberg::io - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.wo
 [...]
-</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-FileIOBuilder" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#121-169">source</a><a 
href="#impl-FileIOBuilder" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.FileIOBuilder.html" title="st [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Builder 
for `FileIO`."><title>FileIOBuilder in iceberg::io - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.wo
 [...]
+</div></details><h2 id="implementations" 
class="section-header">Implementations<a href="#implementations" 
class="anchor">§</a></h2><div id="implementations-list"><details class="toggle 
implementors-toggle" open><summary><section id="impl-FileIOBuilder" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#147-195">source</a><a 
href="#impl-FileIOBuilder" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.FileIOBuilder.html" title="st [...]
 See <a href="struct.FileIO.html" title="struct 
iceberg::io::FileIO"><code>FileIO</code></a> for supported schemes.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.new_fs_io" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#132-137">source</a><h4 
class="code-header">pub fn <a href="#method.new_fs_io" 
class="fn">new_fs_io</a>() -&gt; Self</h4></section></summary><div 
class="docblock"><p>Creates a new builder for local file io.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_prop" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#147-150">source</a><h4 
class="code-header">pub fn <a href="#method.with_prop" 
class="fn">with_prop</a>(self, key: impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html"; 
title="trait alloc::string::ToString">ToString</a>, value: impl <a 
class="trait" href="https://doc.r [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_props" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#153-160">source</a><h4 
class="code-header">pub fn <a href="#method.with_props" 
class="fn">with_props</a>(
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.new_fs_io" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#158-163">source</a><h4 
class="code-header">pub fn <a href="#method.new_fs_io" 
class="fn">new_fs_io</a>() -&gt; Self</h4></section></summary><div 
class="docblock"><p>Creates a new builder for local file io.</p>
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_prop" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#173-176">source</a><h4 
class="code-header">pub fn <a href="#method.with_prop" 
class="fn">with_prop</a>(self, key: impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html"; 
title="trait alloc::string::ToString">ToString</a>, value: impl <a 
class="trait" href="https://doc.r [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_props" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#179-186">source</a><h4 
class="code-header">pub fn <a href="#method.with_props" 
class="fn">with_props</a>(
     self,
     args: 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 
class="trait" 
href="https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html"; 
title="trait alloc::string::ToString">ToString</a>, impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html"; 
title="trait alloc::string::ToString">ToSt [...]
 ) -&gt; Self</h4></section></summary><div class="docblock"><p>Add argument for 
operator.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.build" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#163-168">source</a><h4 
class="code-header">pub fn <a href="#method.build" class="fn">build</a>(self) 
-&gt; <a class="type" href="../type.Result.html" title="type 
iceberg::Result">Result</a>&lt;<a class="struct" href="struct.FileIO.html" 
title="struct iceberg::io::FileIO">FileIO</a>&gt;</h4></section></summary><di 
[...]
-</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-FileIOBuilder" class="impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#111">source</a><a 
href="#impl-Debug-for-FileIOBuilder" class="anchor">§</a><h3 
class="code-header">imp [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.build" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#189-194">source</a><h4 
class="code-header">pub fn <a href="#method.build" class="fn">build</a>(self) 
-&gt; <a class="type" href="../type.Result.html" title="type 
iceberg::Result">Result</a>&lt;<a class="struct" href="struct.FileIO.html" 
title="struct iceberg::io::FileIO">FileIO</a>&gt;</h4></section></summary><di 
[...]
+</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-FileIOBuilder" class="impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#137">source</a><a 
href="#impl-Debug-for-FileIOBuilder" class="anchor">§</a><h3 
class="code-header">imp [...]
     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/io/struct.FileMetadata.html 
b/api/iceberg/io/struct.FileMetadata.html
index 0d594b4c..c7bf4847 100644
--- a/api/iceberg/io/struct.FileMetadata.html
+++ b/api/iceberg/io/struct.FileMetadata.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="The struct 
the represents the metadata of a file."><title>FileMetadata in iceberg::io - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans
 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="The struct 
the represents the metadata of a file."><title>FileMetadata in iceberg::io - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans
 [...]
     pub size: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.u64.html";>u64</a>,
 }</code></pre><details class="toggle top-doc" open><summary 
class="hideme"><span>Expand description</span></summary><div 
class="docblock"><p>The struct the represents the metadata of a file.</p>
 <p>TODO: we can add last modified time, content type, etc. in the future.</p>
diff --git a/api/iceberg/io/struct.InputFile.html 
b/api/iceberg/io/struct.InputFile.html
index 759c611a..24706be7 100644
--- a/api/iceberg/io/struct.InputFile.html
+++ b/api/iceberg/io/struct.InputFile.html
@@ -1,12 +1,12 @@
-<!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="Input file 
is used for reading from files."><title>InputFile in iceberg::io - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f
 [...]
-</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-InputFile" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#210-250">source</a><a 
href="#impl-InputFile" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.InputFile.html" title="struct iceberg [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.exists" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#217-222">source</a><h4 
class="code-header">pub async fn <a href="#method.exists" 
class="fn">exists</a>(&amp;self) -&gt; <a class="type" 
href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a 
class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.bool.html";>bool</a>&gt;</h4></se
 [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.metadata" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#225-231">source</a><h4 
class="code-header">pub async fn <a href="#method.metadata" 
class="fn">metadata</a>(&amp;self) -&gt; <a class="type" 
href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a 
class="struct" href="struct.FileMetadata.html" title="struct 
iceberg::io::FileMetadata">FileMetada [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.read" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#236-242">source</a><h4 
class="code-header">pub async fn <a href="#method.read" 
class="fn">read</a>(&amp;self) -&gt; <a class="type" href="../type.Result.html" 
title="type 
iceberg::Result">Result</a>&lt;Bytes&gt;</h4></section></summary><div 
class="docblock"><p>Read and returns whole content of file.</p>
+<!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="Input file 
is used for reading from files."><title>InputFile in iceberg::io - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f
 [...]
+</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-InputFile" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#236-276">source</a><a 
href="#impl-InputFile" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.InputFile.html" title="struct iceberg [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.exists" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#243-248">source</a><h4 
class="code-header">pub async fn <a href="#method.exists" 
class="fn">exists</a>(&amp;self) -&gt; <a class="type" 
href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a 
class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.bool.html";>bool</a>&gt;</h4></se
 [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.metadata" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#251-257">source</a><h4 
class="code-header">pub async fn <a href="#method.metadata" 
class="fn">metadata</a>(&amp;self) -&gt; <a class="type" 
href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a 
class="struct" href="struct.FileMetadata.html" title="struct 
iceberg::io::FileMetadata">FileMetada [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.read" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#262-268">source</a><h4 
class="code-header">pub async fn <a href="#method.read" 
class="fn">read</a>(&amp;self) -&gt; <a class="type" href="../type.Result.html" 
title="type 
iceberg::Result">Result</a>&lt;Bytes&gt;</h4></section></summary><div 
class="docblock"><p>Read and returns whole content of file.</p>
 <p>For continues reading, use <a href="struct.InputFile.html#method.reader" 
title="method iceberg::io::InputFile::reader"><code>Self::reader</code></a> 
instead.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.reader" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#247-249">source</a><h4 
class="code-header">pub async fn <a href="#method.reader" 
class="fn">reader</a>(&amp;self) -&gt; <a class="type" 
href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;impl <a 
class="trait" href="trait.FileRead.html" title="trait 
iceberg::io::FileRead">FileRead</a>&gt;</h4>< [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.reader" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#273-275">source</a><h4 
class="code-header">pub async fn <a href="#method.reader" 
class="fn">reader</a>(&amp;self) -&gt; <a class="type" 
href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;impl <a 
class="trait" href="trait.FileRead.html" title="trait 
iceberg::io::FileRead">FileRead</a>&gt;</h4>< [...]
 <p>For one-time reading, use <a href="struct.InputFile.html#method.read" 
title="method iceberg::io::InputFile::read"><code>Self::read</code></a> 
instead.</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-InputFile" class="impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#201">source</a><a 
href="#impl-Debug-for-InputFile" class="anchor">§</a><h3 
class="code-header">impl <a 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-Debug-for-InputFile" class="impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#227">source</a><a 
href="#impl-Debug-for-InputFile" 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/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/io/struct.OutputFile.html 
b/api/iceberg/io/struct.OutputFile.html
index b5444562..df5814bd 100644
--- a/api/iceberg/io/struct.OutputFile.html
+++ b/api/iceberg/io/struct.OutputFile.html
@@ -1,15 +1,15 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Output 
file is used for writing to files.."><title>OutputFile in iceberg::io - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8
 [...]
-</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-OutputFile" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#292-337">source</a><a 
href="#impl-OutputFile" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.OutputFile.html" title="struct iceb [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.exists" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#299-304">source</a><h4 
class="code-header">pub async fn <a href="#method.exists" 
class="fn">exists</a>(&amp;self) -&gt; <a class="type" 
href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a 
class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.bool.html";>bool</a>&gt;</h4></se
 [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.to_input_file" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#307-313">source</a><h4 
class="code-header">pub fn <a href="#method.to_input_file" 
class="fn">to_input_file</a>(self) -&gt; <a class="struct" 
href="struct.InputFile.html" title="struct 
iceberg::io::InputFile">InputFile</a></h4></section></summary><div 
class="docblock"><p>Converts into <a href="struct.Input [...]
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.write" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#321-325">source</a><h4 
class="code-header">pub async fn <a href="#method.write" 
class="fn">write</a>(&amp;self, bs: Bytes) -&gt; <a class="type" 
href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a 
class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.unit.html";>()</a>&gt;</h 
[...]
+<!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="Output 
file is used for writing to files.."><title>OutputFile in iceberg::io - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8
 [...]
+</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-OutputFile" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#318-363">source</a><a 
href="#impl-OutputFile" class="anchor">§</a><h3 class="code-header">impl <a 
class="struct" href="struct.OutputFile.html" title="struct iceb [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.exists" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#325-330">source</a><h4 
class="code-header">pub async fn <a href="#method.exists" 
class="fn">exists</a>(&amp;self) -&gt; <a class="type" 
href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a 
class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.bool.html";>bool</a>&gt;</h4></se
 [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.to_input_file" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#333-339">source</a><h4 
class="code-header">pub fn <a href="#method.to_input_file" 
class="fn">to_input_file</a>(self) -&gt; <a class="struct" 
href="struct.InputFile.html" title="struct 
iceberg::io::InputFile">InputFile</a></h4></section></summary><div 
class="docblock"><p>Converts into <a href="struct.Input [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.write" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#347-351">source</a><h4 
class="code-header">pub async fn <a href="#method.write" 
class="fn">write</a>(&amp;self, bs: Bytes) -&gt; <a class="type" 
href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a 
class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.unit.html";>()</a>&gt;</h 
[...]
 <h5 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h5>
 <p>Calling <code>write</code> will overwrite the file if it exists.
 For continues writing, use <a href="struct.OutputFile.html#method.writer" 
title="method 
iceberg::io::OutputFile::writer"><code>Self::writer</code></a>.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="method.writer" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#332-336">source</a><h4 
class="code-header">pub async fn <a href="#method.writer" 
class="fn">writer</a>(&amp;self) -&gt; <a class="type" 
href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a 
class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc: [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="method.writer" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#358-362">source</a><h4 
class="code-header">pub async fn <a href="#method.writer" 
class="fn">writer</a>(&amp;self) -&gt; <a class="type" 
href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a 
class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc: [...]
 <h5 id="notes-1"><a class="doc-anchor" href="#notes-1">§</a>Notes</h5>
 <p>For one-time writing, use <a href="struct.OutputFile.html#method.write" 
title="method iceberg::io::OutputFile::write"><code>Self::write</code></a> 
instead.</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-OutputFile" class="impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#283">source</a><a 
href="#impl-Debug-for-OutputFile" class="anchor">§</a><h3 
class="code-header">impl <a c [...]
+</div></details></div></details></div><h2 id="trait-implementations" 
class="section-header">Trait Implementations<a href="#trait-implementations" 
class="anchor">§</a></h2><div id="trait-implementations-list"><details 
class="toggle implementors-toggle" open><summary><section 
id="impl-Debug-for-OutputFile" class="impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#309">source</a><a 
href="#impl-Debug-for-OutputFile" class="anchor">§</a><h3 
class="code-header">impl <a c [...]
     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/io/trait.FileRead.html 
b/api/iceberg/io/trait.FileRead.html
index 960a3c8a..0e3e1017 100644
--- a/api/iceberg/io/trait.FileRead.html
+++ b/api/iceberg/io/trait.FileRead.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Trait for 
reading file."><title>FileRead in iceberg::io - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2
 [...]
+<!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="Trait for 
reading file."><title>FileRead in iceberg::io - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2
 [...]
     // Required method
     fn <a href="#tymethod.read" class="fn">read</a>&lt;'life0, 
'async_trait&gt;(
         &amp;'life0 self,
@@ -10,14 +10,14 @@
 <h2 id="todo"><a class="doc-anchor" href="#todo">§</a>TODO</h2>
 <p>It’s possible for us to remove the async_trait, but we need to figure
 out how to handle the object safety.</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.read" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#190">source</a><h4 
class="code-header">fn <a href="#tymethod.read" class="fn">read</a>&lt;'life0, 
'async_trait&gt;(
+</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.read" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#216">source</a><h4 
class="code-header">fn <a href="#tymethod.read" class="fn">read</a>&lt;'life0, 
'async_trait&gt;(
     &amp;'life0 self,
     range: <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/ops/range/struct.Range.html"; 
title="struct core::ops::range::Range">Range</a>&lt;<a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.u64.html";>u64</a>&gt;,
 ) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html"; title="struct 
core::pin::Pin">Pin</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <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: [...]
     Self: 'async_trait,
     'life0: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>Read file content with given range.</p>
 <p>TODO: we can support reading non-contiguous bytes in the future.</p>
-</div></details></div><h2 id="foreign-impls" 
class="section-header">Implementations on Foreign Types<a href="#foreign-impls" 
class="anchor">§</a></h2><details class="toggle 
implementors-toggle"><summary><section id="impl-FileRead-for-Reader" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#194-198">source</a><a 
href="#impl-FileRead-for-Reader" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" href="trait.FileRead.html" 
title="trait iceberg: [...]
+</div></details></div><h2 id="foreign-impls" 
class="section-header">Implementations on Foreign Types<a href="#foreign-impls" 
class="anchor">§</a></h2><details class="toggle 
implementors-toggle"><summary><section id="impl-FileRead-for-Reader" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#220-224">source</a><a 
href="#impl-FileRead-for-Reader" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" href="trait.FileRead.html" 
title="trait iceberg: [...]
     &amp;'life0 self,
     range: <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/ops/range/struct.Range.html"; 
title="struct core::ops::range::Range">Range</a>&lt;<a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.u64.html";>u64</a>&gt;,
 ) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html"; title="struct 
core::pin::Pin">Pin</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <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: [...]
diff --git a/api/iceberg/io/trait.FileWrite.html 
b/api/iceberg/io/trait.FileWrite.html
index 55bc8afe..e4616767 100644
--- a/api/iceberg/io/trait.FileWrite.html
+++ b/api/iceberg/io/trait.FileWrite.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Trait for 
writing file."><title>FileWrite in iceberg::io - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff
 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Trait for 
writing file."><title>FileWrite in iceberg::io - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff
 [...]
     // Required methods
     fn <a href="#tymethod.write" class="fn">write</a>&lt;'life0, 
'async_trait&gt;(
         &amp;'life0 mut self,
@@ -15,25 +15,25 @@
 <h2 id="todo"><a class="doc-anchor" href="#todo">§</a>TODO</h2>
 <p>It’s possible for us to remove the async_trait, but we need to figure
 out how to handle the object safety.</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.write" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#263">source</a><h4 
class="code-header">fn <a href="#tymethod.write" 
class="fn">write</a>&lt;'life0, 'async_trait&gt;(
+</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.write" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#289">source</a><h4 
class="code-header">fn <a href="#tymethod.write" 
class="fn">write</a>&lt;'life0, 'async_trait&gt;(
     &amp;'life0 mut self,
     bs: Bytes,
 ) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html"; title="struct 
core::pin::Pin">Pin</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <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: [...]
     Self: 'async_trait,
     'life0: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>Write bytes to file.</p>
 <p>TODO: we can support writing non-contiguous bytes in the future.</p>
-</div></details><details class="toggle method-toggle" open><summary><section 
id="tymethod.close" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#268">source</a><h4 
class="code-header">fn <a href="#tymethod.close" 
class="fn">close</a>&lt;'life0, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section 
id="tymethod.close" class="method"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#294">source</a><h4 
class="code-header">fn <a href="#tymethod.close" 
class="fn">close</a>&lt;'life0, 'async_trait&gt;(
     &amp;'life0 mut self,
 ) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html"; title="struct 
core::pin::Pin">Pin</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <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: [...]
     Self: 'async_trait,
     'life0: 'async_trait,</div></h4></section></summary><div 
class="docblock"><p>Close file.</p>
 <p>Calling close on closed file will generate an error.</p>
-</div></details></div><h2 id="foreign-impls" 
class="section-header">Implementations on Foreign Types<a href="#foreign-impls" 
class="anchor">§</a></h2><details class="toggle 
implementors-toggle"><summary><section id="impl-FileWrite-for-Writer" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#272-280">source</a><a 
href="#impl-FileWrite-for-Writer" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" href="trait.FileWrite.html" 
title="trait icebe [...]
+</div></details></div><h2 id="foreign-impls" 
class="section-header">Implementations on Foreign Types<a href="#foreign-impls" 
class="anchor">§</a></h2><details class="toggle 
implementors-toggle"><summary><section id="impl-FileWrite-for-Writer" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#298-306">source</a><a 
href="#impl-FileWrite-for-Writer" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" href="trait.FileWrite.html" 
title="trait icebe [...]
     &amp;'life0 mut self,
     bs: Bytes,
 ) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html"; title="struct 
core::pin::Pin">Pin</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <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: [...]
     Self: 'async_trait,
-    'life0: 'async_trait,</div></h4></section><section id="method.close" 
class="method trait-impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#277-279">source</a><a 
href="#method.close" class="anchor">§</a><h4 class="code-header">fn <a 
href="#tymethod.close" class="fn">close</a>&lt;'life0, 'async_trait&gt;(
+    'life0: 'async_trait,</div></h4></section><section id="method.close" 
class="method trait-impl"><a class="src rightside" 
href="../../src/iceberg/io/file_io.rs.html#303-305">source</a><a 
href="#method.close" class="anchor">§</a><h4 class="code-header">fn <a 
href="#tymethod.close" class="fn">close</a>&lt;'life0, 'async_trait&gt;(
     &amp;'life0 mut self,
 ) -&gt; <a class="struct" 
href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html"; title="struct 
core::pin::Pin">Pin</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html"; 
title="struct alloc::boxed::Box">Box</a>&lt;dyn <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: [...]
     Self: 'async_trait,
diff --git a/api/iceberg/spec/enum.DataFileBuilderError.html 
b/api/iceberg/spec/enum.DataFileBuilderError.html
index 7eeb8349..bcdc868e 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#947">source</a><a 
href="#impl-Debug-for-DataFileBuilderError" class="anchor">§</a><h3 
class="code-header">impl <a clas [...]
+</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#947">source</a><a 
href="#impl-Debug-for-DataFileBuilderError" class="anchor">§</a><h3 
class="code-header">impl <a clas [...]
     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.FormatVersion.html 
b/api/iceberg/spec/enum.FormatVersion.html
index d2fc7ae3..dd923e71 100644
--- a/api/iceberg/spec/enum.FormatVersion.html
+++ b/api/iceberg/spec/enum.FormatVersion.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>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 spec 
version 1</p>
 </div><section id="variant.V2" class="variant"><a href="#variant.V2" 
class="anchor">§</a><h3 class="code-header">V2 = 2</h3></section><div 
class="docblock"><p>Iceberg spec version 2</p>
-</div></div><h2 id="trait-implementations" class="section-header">Trait 
Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div 
id="trait-implementations-list"><details class="toggle implementors-toggle" 
open><summary><section id="impl-Clone-for-FormatVersion" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/table_metadata.rs.html#1121">source</a><a 
href="#impl-Clone-for-FormatVersion" class="anchor">§</a><h3 
class="code-header">impl <a class="trai [...]
-    D: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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-FormatVersion" class="impl"><a 
class="src rightside" 
href="../../src/iceberg/spec/table_metadata.rs.html#1121">source</a><a 
href="#impl-Clone-for-FormatVersion" class="anchor">§</a><h3 
class="code-header">impl <a class="trai [...]
+    D: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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 [...]
     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/spec/enum.PrimitiveType.html 
b/api/iceberg/spec/enum.PrimitiveType.html
index bb03ba07..10e1d525 100644
--- a/api/iceberg/spec/enum.PrimitiveType.html
+++ b/api/iceberg/spec/enum.PrimitiveType.html
@@ -45,8 +45,8 @@
     __deserializer: __D,
 ) -&gt; <a class="enum" 
href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html"; 
title="enum core::result::Result">Result</a>&lt;<a class="enum" 
href="enum.PrimitiveType.html" title="enum 
iceberg::spec::PrimitiveType">PrimitiveType</a>, __D::<a class="associatedtype" 
href="https://docs.rs/serde/1.0.210/serde/de/trait.Deserializer.html#associatedtype.Error";
 title="type serde::de::Deserializer::Error">Error</a>&gt;<div 
class="where">where
     __D: <a class="trait" 
href="https://docs.rs/serde/1.0.210/serde/de/trait.Deserializer.html"; 
title="trait 
serde::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></div></details><details
 class="toggle implementors-toggle" open><summary><section 
id="impl-PrimitiveType-2" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#242-265">source</a><a 
href="#impl-PrimitiveType-2" class="anchor">§</a><h3 class="code-header">impl 
<a class="enum" [...]
-</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-PrimitiveType" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#200">source</a><a 
href="#impl-Clone-for-PrimitiveType" class="anchor">§</a><h3 
class="code-header" [...]
-    D: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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-PrimitiveType" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#200">source</a><a 
href="#impl-Clone-for-PrimitiveType" class="anchor">§</a><h3 
class="code-header" [...]
+    D: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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 [...]
     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/enum.SortDirection.html 
b/api/iceberg/spec/enum.SortDirection.html
index 424e379c..c4963f97 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.210/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.210/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.210/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.210/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.210/serde/ser/trait.Serialize.html"; 
title="trait serd [...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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 65d194bb..ce602a30 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.Type.html b/api/iceberg/spec/enum.Type.html
index 574e2795..00949f0d 100644
--- a/api/iceberg/spec/enum.Type.html
+++ b/api/iceberg/spec/enum.Type.html
@@ -18,7 +18,7 @@
 </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#160-163">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#167-172">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#80">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.210/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.210/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 [...]
+    D: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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#267-273">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.210/serde/ser/trait.Serialize.html"; 
title="trait serde::ser:: [...]
     S: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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/struct.Datum.html 
b/api/iceberg/spec/struct.Datum.html
index bf7c0fea..dc4d8f39 100644
--- a/api/iceberg/spec/struct.Datum.html
+++ b/api/iceberg/spec/struct.Datum.html
@@ -265,7 +265,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#1049-1051">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#1055-1061">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#96">source</a><a 
href="#impl-Clone-for-Datum" class="anchor">§</a><h3 class="code-header">impl 
<a class="trai [...]
+</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#96">source</a><a 
href="#impl-Clone-for-Datum" class="anchor">§</a><h3 class="code-header">impl 
<a class="trai [...]
     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.NestedField.html 
b/api/iceberg/spec/struct.NestedField.html
index f91ae52a..adf19fb1 100644
--- a/api/iceberg/spec/struct.NestedField.html
+++ b/api/iceberg/spec/struct.NestedField.html
@@ -30,8 +30,8 @@ Fields may have an optional comment or doc string. Fields can 
have default value
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_doc" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#655-658">source</a><h4 
class="code-header">pub fn <a href="#method.with_doc" 
class="fn">with_doc</a>(self, doc: impl <a class="trait" 
href="https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html"; 
title="trait alloc::string::ToString">ToString</a>) -&gt; 
Self</h4></section></summary><div class=" [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_initial_default" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#661-664">source</a><h4 
class="code-header">pub fn <a href="#method.with_initial_default" 
class="fn">with_initial_default</a>(self, value: <a class="enum" 
href="enum.Literal.html" title="enum iceberg::spec::Literal">Literal</a>) -&gt; 
Self</h4></section></summary><div class="docblock"><p>Set the [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.with_write_default" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#667-670">source</a><h4 
class="code-header">pub fn <a href="#method.with_write_default" 
class="fn">with_write_default</a>(self, value: <a class="enum" 
href="enum.Literal.html" title="enum iceberg::spec::Literal">Literal</a>) -&gt; 
Self</h4></section></summary><div class="docblock"><p>Set the field [...]
-</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-NestedField" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#512">source</a><a 
href="#impl-Clone-for-NestedField" class="anchor">§</a><h3 
class="code-header">imp [...]
-    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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-NestedField" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#512">source</a><a 
href="#impl-Clone-for-NestedField" class="anchor">§</a><h3 
class="code-header">imp [...]
+    __D: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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-NestedField" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#512">source</a><a 
href="#impl-Serialize-for-NestedField" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://docs.rs/serde/1.0.210/serde/ser/trait.Serialize.html"; 
title="trait se [...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/serde/ser/trait.Serialize.html#tymethod.serialize";>Read
 more</a></div></details></div></details><section id="impl-Eq-for-NestedField" 
class="impl"><a class="src rightside" href="../../src/iceberg/spe [...]
diff --git a/api/iceberg/spec/struct.SortField.html 
b/api/iceberg/spec/struct.SortField.html
index fd9083a3..47da34c4 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.210/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.210/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.210/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.210/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.210/serde/ser/trait.Serialize.html"; 
title="trait serde::ser:: [...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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/spec/struct.StructType.html 
b/api/iceberg/spec/struct.StructType.html
index 0a8830f8..2103ad1a 100644
--- a/api/iceberg/spec/struct.StructType.html
+++ b/api/iceberg/spec/struct.StructType.html
@@ -3,8 +3,8 @@
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.field_by_id" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#448-450">source</a><h4 
class="code-header">pub fn <a href="#method.field_by_id" 
class="fn">field_by_id</a>(&amp;self, id: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.i32.html";>i32</a>) -&gt; 
<a class="enum" 
href="https://doc.rust-lang.org/nightly/core/option/enum.Option.ht [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.field_by_name" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#462-464">source</a><h4 
class="code-header">pub fn <a href="#method.field_by_name" 
class="fn">field_by_name</a>(&amp;self, name: &amp;<a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.str.html";>str</a>) -&gt; 
<a class="enum" href="https://doc.rust-lang.org/nightly/core/option/e [...]
 </div></details><details class="toggle method-toggle" open><summary><section 
id="method.fields" class="method"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#481-483">source</a><h4 
class="code-header">pub fn <a href="#method.fields" 
class="fn">fields</a>(&amp;self) -&gt; &amp;[<a class="type" 
href="type.NestedFieldRef.html" title="type 
iceberg::spec::NestedFieldRef">NestedFieldRef</a>]</h4></section></summary><div 
class="docblock"><p>Get fields.</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-StructType" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#380">source</a><a 
href="#impl-Clone-for-StructType" class="anchor">§</a><h3 
class="code-header">impl  [...]
-    D: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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-StructType" class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#380">source</a><a 
href="#impl-Clone-for-StructType" class="anchor">§</a><h3 
class="code-header">impl  [...]
+    D: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/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-StructType" 
class="impl"><a class="src rightside" 
href="../../src/iceberg/spec/datatypes.rs.html#380">source</a><a 
href="#impl-Serialize-for-StructType" class="anchor">§</a><h3 
class="code-header">impl <a class="trait" 
href="https://docs.rs/serde/1.0.210/serde/ser/trait.Serialize.html"; 
title="trait serd [...]
     __S: <a class="trait" 
href="https://docs.rs/serde/1.0.210/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.210/serde/ser/trait.Serialize.html#tymethod.serialize";>Read
 more</a></div></details></div></details><section id="impl-Eq-for-StructType" 
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 21164920..240cf4cc 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/search-index.js b/api/search-index.js
index 32cdd7b8..87a49abb 100644
--- a/api/search-index.js
+++ b/api/search-index.js
@@ -1,5 +1,5 @@
 var searchIndex = new Map(JSON.parse('[\
-["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPIPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOFFKRRNNNNNNNNHHNNNNNNNNNNNNNNNNNNNNNNNNNNNMMMNMHMNNNNNNNHNNNNNPPPPPPPPFKRGFIPPPPPPPPFPPPPPPPPPGGFPPFPIPPFNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
 [...]
+["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPIPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOFFKRRNNNNNNNNHHNNNNNNNNNNNNNNNNNNNNNNNNNNNMMMNMHMNNNNNNNHNNNNNPPPPPPPPFKRGFIPPPPPPPPFPPPPPPPPPGGFPPFPIPPFNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
 [...]
 
["iceberg_catalog_glue",{"t":"SSSSSFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNQ","n":["AWS_ACCESS_KEY_ID","AWS_PROFILE_NAME","AWS_REGION_NAME","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN","GlueCatalog","GlueCatalogConfig","borrow","borrow","borrow_mut","borrow_mut","builder","create_namespace","create_table","deref","deref","deref_mut","deref_mut","drop","drop","drop_namespace","drop_table","file_io","fmt","fmt","from","from","get_namespace","init","init","into","into","into_shared","i
 [...]
 
["iceberg_catalog_hms",{"t":"PPFFGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Buffered","Framed","HmsCatalog","HmsCatalogConfig","HmsThriftTransport","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","builder","create_namespace","create_table","default","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop_namespace","drop_table","file_io","fmt","fmt","fmt","from","from","from","get_namespace","init","init","init","into
 [...]
 
["iceberg_catalog_memory",{"t":"FNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["MemoryCatalog","borrow","borrow_mut","create_namespace","create_table","deref","deref_mut","drop","drop_namespace","drop_table","fmt","from","get_namespace","init","into","list_namespaces","list_tables","load_table","namespace_exists","new","rename_table","table_exists","try_from","try_into","type_id","update_namespace","update_table","vzip"],"q":[[0,"iceberg_catalog_memory"],[28,"iceberg_catalog_memory::catalog"],[29,"i
 [...]
diff --git a/api/search.desc/iceberg/iceberg-desc-0-.js 
b/api/search.desc/iceberg/iceberg-desc-0-.js
index 4bf358fa..7057f68b 100644
--- a/api/search.desc/iceberg/iceberg-desc-0-.js
+++ b/api/search.desc/iceberg/iceberg-desc-0-.js
@@ -1 +1 @@
-searchState.loadedDescShard("iceberg", 0, "Apache Iceberg Official Native Rust 
Implementation\nAdd a new schema to the table\nAdd snapshot to table.\nAdd sort 
order to table.\nAdd a new partition spec to the table\nAssign a new UUID to 
the table\nThe catalog API for Iceberg Rust.\nThe table’s current schema id 
must match the requirement.\nIceberg data is invalid.\nThe table’s default sort 
order id must match the …\nThe table’s default spec id must match the 
requirement.\nContains the err [...]
\ No newline at end of file
+searchState.loadedDescShard("iceberg", 0, "Apache Iceberg Official Native Rust 
Implementation\nAdd a new schema to the table\nAdd snapshot to table.\nAdd sort 
order to table.\nAdd a new partition spec to the table\nAssign a new UUID to 
the table\nThe catalog API for Iceberg Rust.\nThe table’s current schema id 
must match the requirement.\nIceberg data is invalid.\nThe table’s default sort 
order id must match the …\nThe table’s default spec id must match the 
requirement.\nContains the err [...]
\ No newline at end of file
diff --git a/api/settings.html b/api/settings.html
index 430a9162..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/io/file_io.rs.html 
b/api/src/iceberg/io/file_io.rs.html
index 6c2bdca1..d7f39d4a 100644
--- a/api/src/iceberg/io/file_io.rs.html
+++ b/api/src/iceberg/io/file_io.rs.html
@@ -455,6 +455,42 @@
 <a href="#455" id="455">455</a>
 <a href="#456" id="456">456</a>
 <a href="#457" id="457">457</a>
+<a href="#458" id="458">458</a>
+<a href="#459" id="459">459</a>
+<a href="#460" id="460">460</a>
+<a href="#461" id="461">461</a>
+<a href="#462" id="462">462</a>
+<a href="#463" id="463">463</a>
+<a href="#464" id="464">464</a>
+<a href="#465" id="465">465</a>
+<a href="#466" id="466">466</a>
+<a href="#467" id="467">467</a>
+<a href="#468" id="468">468</a>
+<a href="#469" id="469">469</a>
+<a href="#470" id="470">470</a>
+<a href="#471" id="471">471</a>
+<a href="#472" id="472">472</a>
+<a href="#473" id="473">473</a>
+<a href="#474" id="474">474</a>
+<a href="#475" id="475">475</a>
+<a href="#476" id="476">476</a>
+<a href="#477" id="477">477</a>
+<a href="#478" id="478">478</a>
+<a href="#479" id="479">479</a>
+<a href="#480" id="480">480</a>
+<a href="#481" id="481">481</a>
+<a href="#482" id="482">482</a>
+<a href="#483" id="483">483</a>
+<a href="#484" id="484">484</a>
+<a href="#485" id="485">485</a>
+<a href="#486" id="486">486</a>
+<a href="#487" id="487">487</a>
+<a href="#488" id="488">488</a>
+<a href="#489" id="489">489</a>
+<a href="#490" id="490">490</a>
+<a href="#491" id="491">491</a>
+<a href="#492" id="492">492</a>
+<a href="#493" id="493">493</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
@@ -528,18 +564,40 @@
     }
 
     <span class="doccomment">/// Deletes file.
+    ///
+    /// # Arguments
+    ///
+    /// * path: It should be *absolute* path starting with scheme string used 
to construct [`FileIO`].
     </span><span class="kw">pub async fn </span>delete(<span 
class="kw-2">&amp;</span><span class="self">self</span>, path: <span 
class="kw">impl </span>AsRef&lt;str&gt;) -&gt; <span 
class="prelude-ty">Result</span>&lt;()&gt; {
         <span class="kw">let </span>(op, relative_path) = <span 
class="self">self</span>.inner.create_operator(<span 
class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
         <span class="prelude-val">Ok</span>(op.delete(relative_path).<span 
class="kw">await</span><span class="question-mark">?</span>)
     }
 
+    <span class="doccomment">/// Remove the path and all nested dirs and files 
recursively.
+    ///
+    /// # Arguments
+    ///
+    /// * path: It should be *absolute* path starting with scheme string used 
to construct [`FileIO`].
+    </span><span class="kw">pub async fn </span>remove_all(<span 
class="kw-2">&amp;</span><span class="self">self</span>, path: <span 
class="kw">impl </span>AsRef&lt;str&gt;) -&gt; <span 
class="prelude-ty">Result</span>&lt;()&gt; {
+        <span class="kw">let </span>(op, relative_path) = <span 
class="self">self</span>.inner.create_operator(<span 
class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
+        <span class="prelude-val">Ok</span>(op.remove_all(relative_path).<span 
class="kw">await</span><span class="question-mark">?</span>)
+    }
+
     <span class="doccomment">/// Check file exists.
+    ///
+    /// # Arguments
+    ///
+    /// * path: It should be *absolute* path starting with scheme string used 
to construct [`FileIO`].
     </span><span class="kw">pub async fn </span>is_exist(<span 
class="kw-2">&amp;</span><span class="self">self</span>, path: <span 
class="kw">impl </span>AsRef&lt;str&gt;) -&gt; <span 
class="prelude-ty">Result</span>&lt;bool&gt; {
         <span class="kw">let </span>(op, relative_path) = <span 
class="self">self</span>.inner.create_operator(<span 
class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
         <span class="prelude-val">Ok</span>(op.is_exist(relative_path).<span 
class="kw">await</span><span class="question-mark">?</span>)
     }
 
     <span class="doccomment">/// Creates input file.
+    ///
+    /// # Arguments
+    ///
+    /// * path: It should be *absolute* path starting with scheme string used 
to construct [`FileIO`].
     </span><span class="kw">pub fn </span>new_input(<span 
class="kw-2">&amp;</span><span class="self">self</span>, path: <span 
class="kw">impl </span>AsRef&lt;str&gt;) -&gt; <span 
class="prelude-ty">Result</span>&lt;InputFile&gt; {
         <span class="kw">let </span>(op, relative_path) = <span 
class="self">self</span>.inner.create_operator(<span 
class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
         <span class="kw">let </span>path = path.as_ref().to_string();
@@ -552,6 +610,10 @@
     }
 
     <span class="doccomment">/// Creates output file.
+    ///
+    /// # Arguments
+    ///
+    /// * path: It should be *absolute* path starting with scheme string used 
to construct [`FileIO`].
     </span><span class="kw">pub fn </span>new_output(<span 
class="kw-2">&amp;</span><span class="self">self</span>, path: <span 
class="kw">impl </span>AsRef&lt;str&gt;) -&gt; <span 
class="prelude-ty">Result</span>&lt;OutputFile&gt; {
         <span class="kw">let </span>(op, relative_path) = <span 
class="self">self</span>.inner.create_operator(<span 
class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
         <span class="kw">let </span>path = path.as_ref().to_string();
@@ -795,7 +857,7 @@
 
 <span class="attr">#[cfg(test)]
 </span><span class="kw">mod </span>tests {
-    <span class="kw">use </span>std::fs::File;
+    <span class="kw">use </span>std::fs::{create_dir_all, File};
     <span class="kw">use </span>std::io::Write;
     <span class="kw">use </span>std::path::Path;
 
@@ -810,6 +872,7 @@
     }
 
     <span class="kw">fn </span>write_to_file&lt;P: AsRef&lt;Path&gt;&gt;(s: 
<span class="kw-2">&amp;</span>str, path: P) {
+        create_dir_all(path.as_ref().parent().unwrap()).unwrap();
         <span class="kw">let </span><span class="kw-2">mut </span>f = 
File::create(path).unwrap();
         <span class="macro">write!</span>(f, <span 
class="string">"{s}"</span>).unwrap();
     }
@@ -846,16 +909,24 @@
     </span><span class="kw">async fn </span>test_delete_local_file() {
         <span class="kw">let </span>tmp_dir = TempDir::new().unwrap();
 
-        <span class="kw">let </span>file_name = <span 
class="string">"a.txt"</span>;
-        <span class="kw">let </span>content = <span class="string">"Iceberg 
loves rust."</span>;
-
-        <span class="kw">let </span>full_path = <span 
class="macro">format!</span>(<span class="string">"{}/{}"</span>, 
tmp_dir.path().to_str().unwrap(), file_name);
-        write_to_file(content, <span class="kw-2">&amp;</span>full_path);
+        <span class="kw">let </span>a_path = <span 
class="macro">format!</span>(<span class="string">"{}/{}"</span>, 
tmp_dir.path().to_str().unwrap(), <span class="string">"a.txt"</span>);
+        <span class="kw">let </span>sub_dir_path = <span 
class="macro">format!</span>(<span class="string">"{}/sub"</span>, 
tmp_dir.path().to_str().unwrap());
+        <span class="kw">let </span>b_path = <span 
class="macro">format!</span>(<span class="string">"{}/{}"</span>, sub_dir_path, 
<span class="string">"b.txt"</span>);
+        <span class="kw">let </span>c_path = <span 
class="macro">format!</span>(<span class="string">"{}/{}"</span>, sub_dir_path, 
<span class="string">"c.txt"</span>);
+        write_to_file(<span class="string">"Iceberg loves rust."</span>, <span 
class="kw-2">&amp;</span>a_path);
+        write_to_file(<span class="string">"Iceberg loves rust."</span>, <span 
class="kw-2">&amp;</span>b_path);
+        write_to_file(<span class="string">"Iceberg loves rust."</span>, <span 
class="kw-2">&amp;</span>c_path);
 
         <span class="kw">let </span>file_io = create_local_file_io();
-        <span class="macro">assert!</span>(file_io.is_exist(<span 
class="kw-2">&amp;</span>full_path).<span class="kw">await</span>.unwrap());
-        file_io.delete(<span class="kw-2">&amp;</span>full_path).<span 
class="kw">await</span>.unwrap();
-        <span class="macro">assert!</span>(!file_io.is_exist(<span 
class="kw-2">&amp;</span>full_path).<span class="kw">await</span>.unwrap());
+        <span class="macro">assert!</span>(file_io.is_exist(<span 
class="kw-2">&amp;</span>a_path).<span class="kw">await</span>.unwrap());
+
+        file_io.remove_all(<span class="kw-2">&amp;</span>sub_dir_path).<span 
class="kw">await</span>.unwrap();
+        <span class="macro">assert!</span>(!file_io.is_exist(<span 
class="kw-2">&amp;</span>b_path).<span class="kw">await</span>.unwrap());
+        <span class="macro">assert!</span>(!file_io.is_exist(<span 
class="kw-2">&amp;</span>c_path).<span class="kw">await</span>.unwrap());
+        <span class="macro">assert!</span>(file_io.is_exist(<span 
class="kw-2">&amp;</span>a_path).<span class="kw">await</span>.unwrap());
+
+        file_io.delete(<span class="kw-2">&amp;</span>a_path).<span 
class="kw">await</span>.unwrap();
+        <span class="macro">assert!</span>(!file_io.is_exist(<span 
class="kw-2">&amp;</span>a_path).<span class="kw">await</span>.unwrap());
     }
 
     <span class="attr">#[tokio::test]
@@ -868,6 +939,7 @@
         <span class="kw">let </span>file_io = create_local_file_io();
         <span class="macro">assert!</span>(!file_io.is_exist(<span 
class="kw-2">&amp;</span>full_path).<span class="kw">await</span>.unwrap());
         <span class="macro">assert!</span>(file_io.delete(<span 
class="kw-2">&amp;</span>full_path).<span class="kw">await</span>.is_ok());
+        <span class="macro">assert!</span>(file_io.remove_all(<span 
class="kw-2">&amp;</span>full_path).<span class="kw">await</span>.is_ok());
     }
 
     <span class="attr">#[tokio::test]


Reply via email to