You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by gi...@apache.org on 2024/08/21 13:13:38 UTC

(iceberg-rust) branch gh-pages updated: deploy: b36d1c606695aa06e0d359582eeb1a0080d90bf0

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 7875825  deploy: b36d1c606695aa06e0d359582eeb1a0080d90bf0
7875825 is described below

commit 787582540e760f96405537bc9fd5f16beacaddee
Author: liurenjie1024 <li...@users.noreply.github.com>
AuthorDate: Wed Aug 21 13:13:33 2024 +0000

    deploy: b36d1c606695aa06e0d359582eeb1a0080d90bf0
---
 api/iceberg/arrow/fn.schema_to_arrow_schema.html   |   2 +-
 api/iceberg/spec/enum.Literal.html                 |  64 ++--
 api/iceberg/spec/enum.PrimitiveLiteral.html        |  10 +-
 api/iceberg/spec/enum.PrimitiveType.html           |  16 +-
 api/iceberg/spec/enum.Transform.html               |  16 +-
 api/iceberg/spec/enum.Type.html                    |   4 +-
 api/iceberg/spec/struct.Datum.html                 |  86 +++--
 api/iceberg/spec/struct.ListType.html              |   8 +-
 api/iceberg/spec/struct.Map.html                   |  22 +-
 api/iceberg/spec/struct.MapType.html               |   8 +-
 api/iceberg/spec/struct.NestedField.html           |  28 +-
 api/iceberg/spec/struct.RawLiteral.html            |  10 +-
 api/iceberg/spec/struct.Schema.html                |   2 +-
 api/iceberg/spec/struct.Struct.html                |  14 +-
 api/iceberg/spec/struct.StructType.html            |  18 +-
 api/iceberg/spec/struct.StructValueIntoIter.html   |   4 +-
 api/iceberg/spec/type.NestedFieldRef.html          |   2 +-
 .../writer/file_writer/struct.ParquetWriter.html   |   2 +-
 .../writer/file_writer/trait.FileWriter.html       |   2 +-
 api/iceberg/writer/trait.CurrentFileStatus.html    |   2 +-
 api/search-index.js                                |   2 +-
 api/search.desc/iceberg/iceberg-desc-0-.js         |   2 +-
 api/src/iceberg/arrow/schema.rs.html               |  14 +
 api/src/iceberg/avro/schema.rs.html                |   6 +
 api/src/iceberg/spec/datatypes.rs.html             |  20 ++
 api/src/iceberg/spec/manifest.rs.html              |  20 ++
 api/src/iceberg/spec/transform.rs.html             |  16 +-
 api/src/iceberg/spec/values.rs.html                | 140 +++++++-
 api/src/iceberg/transform/bucket.rs.html           |   6 +-
 api/src/iceberg/transform/identity.rs.html         |   6 +-
 api/src/iceberg/transform/temporal.rs.html         | 364 ++++++++++++++++++++-
 api/src/iceberg/transform/truncate.rs.html         |   6 +-
 api/src/iceberg/transform/void.rs.html             |   6 +-
 .../writer/file_writer/parquet_writer.rs.html      |  94 +++++-
 api/src/iceberg_catalog_glue/schema.rs.html        |   4 +
 api/src/iceberg_catalog_hms/schema.rs.html         |   4 +
 36 files changed, 847 insertions(+), 183 deletions(-)

diff --git a/api/iceberg/arrow/fn.schema_to_arrow_schema.html b/api/iceberg/arrow/fn.schema_to_arrow_schema.html
index 1e5f3f7..40df70e 100644
--- a/api/iceberg/arrow/fn.schema_to_arrow_schema.html
+++ b/api/iceberg/arrow/fn.schema_to_arrow_schema.html
@@ -1,2 +1,2 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Convert iceberg schema to an arrow schema."><title>schema_to_arrow_schema in iceberg::arrow - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,Fi [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Convert iceberg schema to an arrow schema."><title>schema_to_arrow_schema in iceberg::arrow - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,Fi [...]
 </div></details></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg/spec/enum.Literal.html b/api/iceberg/spec/enum.Literal.html
index 583a458..b84bf57 100644
--- a/api/iceberg/spec/enum.Literal.html
+++ b/api/iceberg/spec/enum.Literal.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="Values present in iceberg type"><title>Literal in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d3 [...]
+<!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="Values present in iceberg type"><title>Literal in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d3 [...]
     Primitive(<a class="enum" href="enum.PrimitiveLiteral.html" title="enum iceberg::spec::PrimitiveLiteral">PrimitiveLiteral</a>),
     Struct(<a class="struct" href="struct.Struct.html" title="struct iceberg::spec::Struct">Struct</a>),
     List(<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="enum.Literal.html" title="enum iceberg::spec::Literal">Literal</a>&gt;&gt;),
@@ -14,14 +14,14 @@ Elements can be either optional or required. Element types may be any type.</p>
 </div><section id="variant.Map" class="variant"><a href="#variant.Map" class="anchor">§</a><h3 class="code-header">Map(<a class="struct" href="struct.Map.html" title="struct iceberg::spec::Map">Map</a>)</h3></section><div class="docblock"><p>A map is a collection of key-value pairs with a key type and a value type.
 Both the key field and value field each have an integer id that is unique in the table schema.
 Map keys are required and map values can be either optional or required. Both map keys and map values may be any type, including nested types.</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-Literal" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1142-1493">source</a><a href="#impl-Literal" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Literal.html" title="enum iceberg::spec::Liter [...]
+</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-Literal" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1189-1540">source</a><a href="#impl-Literal" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Literal.html" title="enum iceberg::spec::Liter [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::{Literal, PrimitiveLiteral};
 <span class="kw">let </span>t = Literal::bool(<span class="bool-val">true</span>);
 
 <span class="macro">assert_eq!</span>(Literal::Primitive(PrimitiveLiteral::Boolean(<span class="bool-val">true</span>)), t);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.bool_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1166-1171">source</a><h4 class="code-header">pub fn <a href="#method.bool_from_str" class="fn">bool_from_str</a>&lt;S: <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.o [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.bool_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1213-1218">source</a><h4 class="code-header">pub fn <a href="#method.bool_from_str" class="fn">bool_from_str</a>&lt;S: <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.o [...]
 See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromStr-for-bool">Parse bool from str</a> for reference.</p>
 <p>Example:</p>
 
@@ -29,21 +29,21 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 <span class="kw">let </span>t = Literal::bool_from_str(<span class="string">"false"</span>).unwrap();
 
 <span class="macro">assert_eq!</span>(Literal::Primitive(PrimitiveLiteral::Boolean(<span class="bool-val">false</span>)), t);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.int" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1182-1184">source</a><h4 class="code-header">pub fn <a href="#method.int" class="fn">int</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.int" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1229-1231">source</a><h4 class="code-header">pub fn <a href="#method.int" class="fn">int</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::{Literal, PrimitiveLiteral};
 <span class="kw">let </span>t = Literal::int(<span class="number">23i8</span>);
 
 <span class="macro">assert_eq!</span>(Literal::Primitive(PrimitiveLiteral::Int(<span class="number">23</span>)), t);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.long" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1195-1197">source</a><h4 class="code-header">pub fn <a href="#method.long" class="fn">long</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.h [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.long" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1242-1244">source</a><h4 class="code-header">pub fn <a href="#method.long" class="fn">long</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.h [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::{Literal, PrimitiveLiteral};
 <span class="kw">let </span>t = Literal::long(<span class="number">24i8</span>);
 
 <span class="macro">assert_eq!</span>(Literal::Primitive(PrimitiveLiteral::Long(<span class="number">24</span>)), t);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.float" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1212-1214">source</a><h4 class="code-header">pub fn <a href="#method.float" class="fn">float</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.f3 [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.float" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1259-1261">source</a><h4 class="code-header">pub fn <a href="#method.float" class="fn">float</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.f3 [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::{Literal, PrimitiveLiteral};
@@ -54,7 +54,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
     Literal::Primitive(PrimitiveLiteral::Float(OrderedFloat(<span class="number">32.1</span>))),
     t
 );</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.double" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1229-1231">source</a><h4 class="code-header">pub fn <a href="#method.double" class="fn">double</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.double" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1276-1278">source</a><h4 class="code-header">pub fn <a href="#method.double" class="fn">double</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::{Literal, PrimitiveLiteral};
@@ -65,8 +65,8 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
     Literal::Primitive(PrimitiveLiteral::Double(OrderedFloat(<span class="number">32.1</span>))),
     t
 );</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.date" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1234-1236">source</a><h4 class="code-header">pub fn <a href="#method.date" class="fn">date</a>(days: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates date literal from number of days from unix epoch di [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.date_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1249-1259">source</a><h4 class="code-header">pub fn <a href="#method.date_from_str" class="fn">date_from_str</a>&lt;S: <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.o [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.date" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1281-1283">source</a><h4 class="code-header">pub fn <a href="#method.date" class="fn">date</a>(days: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates date literal from number of days from unix epoch di [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.date_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1296-1306">source</a><h4 class="code-header">pub fn <a href="#method.date_from_str" class="fn">date_from_str</a>&lt;S: <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.o [...]
 <p>See <a href="https://docs.rs/chrono/latest/chrono/naive/date/struct.NaiveDate.html#method.from_str" title="associated function chrono::naive::date::NaiveDate::from_str"><code>NaiveDate::from_str</code></a>.</p>
 <p>Example</p>
 
@@ -74,7 +74,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 <span class="kw">let </span>t = Literal::date_from_str(<span class="string">"1970-01-03"</span>).unwrap();
 
 <span class="macro">assert_eq!</span>(Literal::date(<span class="number">2</span>), t);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.date_from_ymd" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1273-1282">source</a><h4 class="code-header">pub fn <a href="#method.date_from_ymd" class="fn">date_from_ymd</a>(year: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>, month: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html"> [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.date_from_ymd" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1320-1329">source</a><h4 class="code-header">pub fn <a href="#method.date_from_ymd" class="fn">date_from_ymd</a>(year: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>, month: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html"> [...]
 <p>See <a href="https://docs.rs/chrono/latest/chrono/naive/date/struct.NaiveDate.html#method.from_ymd_opt" title="associated function chrono::naive::date::NaiveDate::from_ymd_opt"><code>NaiveDate::from_ymd_opt</code></a>.</p>
 <p>Example:</p>
 
@@ -82,8 +82,8 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
  <span class="kw">let </span>t = Literal::date_from_ymd(<span class="number">1970</span>, <span class="number">1</span>, <span class="number">5</span>).unwrap();
 
  <span class="macro">assert_eq!</span>(Literal::date(<span class="number">4</span>), t);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.time" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1285-1287">source</a><h4 class="code-header">pub fn <a href="#method.time" class="fn">time</a>(value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates time in microseconds directly</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.time_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1315-1325">source</a><h4 class="code-header">pub fn <a href="#method.time_from_str" class="fn">time_from_str</a>&lt;S: <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.o [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.time" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1332-1334">source</a><h4 class="code-header">pub fn <a href="#method.time" class="fn">time</a>(value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates time in microseconds directly</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.time_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1362-1372">source</a><h4 class="code-header">pub fn <a href="#method.time_from_str" class="fn">time_from_str</a>&lt;S: <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.o [...]
 <p>See <a href="https://docs.rs/chrono/latest/chrono/naive/time/struct.NaiveTime.html#method.from_str" title="associated function chrono::naive::time::NaiveTime::from_str"><code>NaiveTime::from_str</code></a> for details.</p>
 <p>Example:</p>
 
@@ -97,7 +97,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
     </span><span class="number">888999 </span><span class="comment">// microseconds
 </span>};
 <span class="macro">assert_eq!</span>(Literal::time(micro_secs), t);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.time_from_hms_micro" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1338-1345">source</a><h4 class="code-header">pub fn <a href="#method.time_from_hms_micro" class="fn">time_from_hms_micro</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.time_from_hms_micro" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1385-1392">source</a><h4 class="code-header">pub fn <a href="#method.time_from_hms_micro" class="fn">time_from_hms_micro</a>(
     hour: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,
     min: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,
     sec: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,
@@ -110,11 +110,11 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 <span class="kw">let </span>t = Literal::time_from_hms_micro(<span class="number">22</span>, <span class="number">15</span>, <span class="number">33</span>, <span class="number">111</span>).unwrap();
 
 <span class="macro">assert_eq!</span>(Literal::time_from_str(<span class="string">"22:15:33.000111"</span>).unwrap(), t);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1348-1350">source</a><h4 class="code-header">pub fn <a href="#method.timestamp" class="fn">timestamp</a>(value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates a timestamp from unix epoch in micr [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamptz" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1353-1355">source</a><h4 class="code-header">pub fn <a href="#method.timestamptz" class="fn">timestamptz</a>(value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates a timestamp with timezone fro [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp_from_datetime" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1358-1360">source</a><h4 class="code-header">pub fn <a href="#method.timestamp_from_datetime" class="fn">timestamp_from_datetime</a>&lt;T: <a class="trait" href="https://docs.rs/chrono/latest/chrono/offset/trait.TimeZone.html" title="trait chrono::offset::TimeZone">TimeZone</a>&gt;(dt: <a class [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamptz_from_datetime" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1363-1365">source</a><h4 class="code-header">pub fn <a href="#method.timestamptz_from_datetime" class="fn">timestamptz_from_datetime</a>&lt;T: <a class="trait" href="https://docs.rs/chrono/latest/chrono/offset/trait.TimeZone.html" title="trait chrono::offset::TimeZone">TimeZone</a>&gt;(dt: <a [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1390-1396">source</a><h4 class="code-header">pub fn <a href="#method.timestamp_from_str" class="fn">timestamp_from_str</a>&lt;S: <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:// [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1395-1397">source</a><h4 class="code-header">pub fn <a href="#method.timestamp" class="fn">timestamp</a>(value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates a timestamp from unix epoch in micr [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamptz" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1400-1402">source</a><h4 class="code-header">pub fn <a href="#method.timestamptz" class="fn">timestamptz</a>(value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates a timestamp with timezone fro [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp_from_datetime" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1405-1407">source</a><h4 class="code-header">pub fn <a href="#method.timestamp_from_datetime" class="fn">timestamp_from_datetime</a>&lt;T: <a class="trait" href="https://docs.rs/chrono/latest/chrono/offset/trait.TimeZone.html" title="trait chrono::offset::TimeZone">TimeZone</a>&gt;(dt: <a class [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamptz_from_datetime" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1410-1412">source</a><h4 class="code-header">pub fn <a href="#method.timestamptz_from_datetime" class="fn">timestamptz_from_datetime</a>&lt;T: <a class="trait" href="https://docs.rs/chrono/latest/chrono/offset/trait.TimeZone.html" title="trait chrono::offset::TimeZone">TimeZone</a>&gt;(dt: <a [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1437-1443">source</a><h4 class="code-header">pub fn <a href="#method.timestamp_from_str" class="fn">timestamp_from_str</a>&lt;S: <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:// [...]
 <p>See <a href="https://docs.rs/chrono/latest/chrono/datetime/struct.DateTime.html#method.from_str" title="associated function chrono::datetime::DateTime::from_str"><code>DateTime&lt;Utc&gt;::from_str</code></a>.</p>
 <p>Example:</p>
 
@@ -133,10 +133,10 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 };
 
 <span class="macro">assert_eq!</span>(t, t2);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamptz_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1399-1405">source</a><h4 class="code-header">pub fn <a href="#method.timestamptz_from_str" class="fn">timestamptz_from_str</a>&lt;S: <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="ht [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.string" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1408-1410">source</a><h4 class="code-header">pub fn <a href="#method.string" class="fn">string</a>&lt;S: <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html" title="trait alloc::string::ToString">ToString</a>&gt;(s: S) -&gt; Self</h4></section></summary><div class="docblock [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.uuid" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1413-1415">source</a><h4 class="code-header">pub fn <a href="#method.uuid" class="fn">uuid</a>(uuid: <a class="struct" href="https://docs.rs/uuid/1.10.0/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates uuid literal.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.uuid_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1429-1438">source</a><h4 class="code-header">pub fn <a href="#method.uuid_from_str" class="fn">uuid_from_str</a>&lt;S: <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.o [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamptz_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1446-1452">source</a><h4 class="code-header">pub fn <a href="#method.timestamptz_from_str" class="fn">timestamptz_from_str</a>&lt;S: <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="ht [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.string" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1455-1457">source</a><h4 class="code-header">pub fn <a href="#method.string" class="fn">string</a>&lt;S: <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html" title="trait alloc::string::ToString">ToString</a>&gt;(s: S) -&gt; Self</h4></section></summary><div class="docblock [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.uuid" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1460-1462">source</a><h4 class="code-header">pub fn <a href="#method.uuid" class="fn">uuid</a>(uuid: <a class="struct" href="https://docs.rs/uuid/1.10.0/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates uuid literal.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.uuid_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1476-1485">source</a><h4 class="code-header">pub fn <a href="#method.uuid_from_str" class="fn">uuid_from_str</a>&lt;S: <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.o [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::Literal;
@@ -145,7 +145,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 <span class="kw">let </span>t2 = Literal::uuid(Uuid::from_u128_le(<span class="number">0xd8d7d6d5d4d3d2d1c2c1b2b1a4a3a2a1</span>));
 
 <span class="macro">assert_eq!</span>(t1, t2);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.fixed" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1451-1453">source</a><h4 class="code-header">pub fn <a href="#method.fixed" class="fn">fixed</a>&lt;I: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a class="primitive" [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.fixed" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1498-1500">source</a><h4 class="code-header">pub fn <a href="#method.fixed" class="fn">fixed</a>&lt;I: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a class="primitive" [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::{Literal, PrimitiveLiteral};
@@ -153,7 +153,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 <span class="kw">let </span>t2 = Literal::Primitive(PrimitiveLiteral::Binary(<span class="macro">vec!</span>[<span class="number">1u8</span>, <span class="number">2u8</span>]));
 
 <span class="macro">assert_eq!</span>(t1, t2);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.binary" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1466-1468">source</a><h4 class="code-header">pub fn <a href="#method.binary" class="fn">binary</a>&lt;I: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a class="primiti [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.binary" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1513-1515">source</a><h4 class="code-header">pub fn <a href="#method.binary" class="fn">binary</a>&lt;I: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a class="primiti [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::{Literal, PrimitiveLiteral};
@@ -161,8 +161,8 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 <span class="kw">let </span>t2 = Literal::Primitive(PrimitiveLiteral::Binary(<span class="macro">vec!</span>[<span class="number">1u8</span>, <span class="number">2u8</span>]));
 
 <span class="macro">assert_eq!</span>(t1, t2);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.decimal" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1471-1473">source</a><h4 class="code-header">pub fn <a href="#method.decimal" class="fn">decimal</a>(decimal: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i128.html">i128</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates a decimal literal.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.decimal_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1487-1492">source</a><h4 class="code-header">pub fn <a href="#method.decimal_from_str" class="fn">decimal_from_str</a>&lt;S: <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.ru [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.decimal" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1518-1520">source</a><h4 class="code-header">pub fn <a href="#method.decimal" class="fn">decimal</a>(decimal: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i128.html">i128</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates a decimal literal.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.decimal_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1534-1539">source</a><h4 class="code-header">pub fn <a href="#method.decimal_from_str" class="fn">decimal_from_str</a>&lt;S: <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.ru [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::Literal;
@@ -171,16 +171,16 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 <span class="kw">let </span>t2 = Literal::decimal_from_str(<span class="string">"123.45"</span>).unwrap();
 
 <span class="macro">assert_eq!</span>(t1, t2);</code></pre></div>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Literal-1" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1596-1900">source</a><a href="#impl-Literal-1" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Literal.html" title="enum iceberg::spec::Literal">Literal</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><secti [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Literal-1" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1643-1959">source</a><a href="#impl-Literal-1" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Literal.html" title="enum iceberg::spec::Literal">Literal</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><secti [...]
 <p>See <a href="https://iceberg.apache.org/spec/#json-single-value-serialization">this spec</a> for reference.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.try_into_json" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1768-1881">source</a><h4 class="code-header">pub fn <a href="#method.try_into_json" class="fn">try_into_json</a>(self, type: &amp;<a class="enum" href="enum.Type.html" title="enum iceberg::spec::Type">Type</a>) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.try_into_json" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1815-1940">source</a><h4 class="code-header">pub fn <a href="#method.try_into_json" class="fn">try_into_json</a>(self, type: &amp;<a class="enum" href="enum.Type.html" title="enum iceberg::spec::Type">Type</a>) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a [...]
 <p>See <a href="https://iceberg.apache.org/spec/#json-single-value-serialization">this spec</a> for reference.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_any" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1884-1899">source</a><h4 class="code-header">pub fn <a href="#method.into_any" class="fn">into_any</a>(self) -&gt; <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/cor [...]
-</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-Literal" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1124">source</a><a href="#impl-Clone-for-Literal" class="anchor">§</a><h3 class="code-header">impl <a class [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_any" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1943-1958">source</a><h4 class="code-header">pub fn <a href="#method.into_any" class="fn">into_any</a>(self) -&gt; <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/cor [...]
+</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-Literal" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1171">source</a><a href="#impl-Clone-for-Literal" class="anchor">§</a><h3 class="code-header">impl <a class [...]
     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'>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= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-Literal" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1124">source</a><a href="#impl-Eq-for-Literal" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="enum" href="enum.Literal.html" title="enum iceberg:: [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-Literal" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1171">source</a><a href="#impl-Eq-for-Literal" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="enum" href="enum.Literal.html" title="enum iceberg:: [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/enum.PrimitiveLiteral.html b/api/iceberg/spec/enum.PrimitiveLiteral.html
index 31b3837..f617a50 100644
--- a/api/iceberg/spec/enum.PrimitiveLiteral.html
+++ b/api/iceberg/spec/enum.PrimitiveLiteral.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="Values present in iceberg type"><title>PrimitiveLiteral in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a7 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Values present in iceberg type"><title>PrimitiveLiteral in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a7 [...]
     Boolean(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>),
     Int(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>),
     Long(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>),
@@ -18,13 +18,13 @@
 </div><section id="variant.Binary" class="variant"><a href="#variant.Binary" class="anchor">§</a><h3 class="code-header">Binary(<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;)</h3></section><div class="docblock"><p>Binary value (without length)</p>
 </div><section id="variant.Int128" class="variant"><a href="#variant.Int128" class="anchor">§</a><h3 class="code-header">Int128(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i128.html">i128</a>)</h3></section><div class="docblock"><p>Stored as 16-byte little-endian</p>
 </div><section id="variant.UInt128" class="variant"><a href="#variant.UInt128" class="anchor">§</a><h3 class="code-header">UInt128(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u128.html">u128</a>)</h3></section><div class="docblock"><p>Stored as 16-byte little-endian</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-PrimitiveLiteral" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#78-88">source</a><a href="#impl-PrimitiveLiteral" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.PrimitiveLiteral.html" title="en [...]
+</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-PrimitiveLiteral" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#79-89">source</a><a href="#impl-PrimitiveLiteral" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.PrimitiveLiteral.html" title="en [...]
 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-PrimitiveLiteral" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#56">source</a><a href="#impl-Clone-for-PrimitiveLiteral" class="anchor">§</a><h3 class="code-heade [...]
+</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-PrimitiveLiteral" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#57">source</a><a href="#impl-Clone-for-PrimitiveLiteral" class="anchor">§</a><h3 class="code-heade [...]
     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'>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= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-PrimitiveLiteral" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#56">source</a><a href="#impl-Eq-for-PrimitiveLiteral" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="enum" href="enum.PrimitiveLiteral.ht [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-PrimitiveLiteral" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#57">source</a><a href="#impl-Eq-for-PrimitiveLiteral" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="enum" href="enum.PrimitiveLiteral.ht [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/enum.PrimitiveType.html b/api/iceberg/spec/enum.PrimitiveType.html
index 9f38a15..58f1be0 100644
--- a/api/iceberg/spec/enum.PrimitiveType.html
+++ b/api/iceberg/spec/enum.PrimitiveType.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Primitive data types"><title>PrimitiveType in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.w [...]
-<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 14 variants</span></summary>    Boolean,
+<!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="Primitive data types"><title>PrimitiveType in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.w [...]
+<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 16 variants</span></summary>    Boolean,
     Int,
     Long,
     Float,
@@ -12,6 +12,8 @@
     Time,
     Timestamp,
     Timestamptz,
+    TimestampNs,
+    TimestamptzNs,
     String,
     Uuid,
     Fixed(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>),
@@ -29,6 +31,8 @@
 </div><section id="variant.Time" class="variant"><a href="#variant.Time" class="anchor">§</a><h3 class="code-header">Time</h3></section><div class="docblock"><p>Time of day in microsecond precision, without date or timezone.</p>
 </div><section id="variant.Timestamp" class="variant"><a href="#variant.Timestamp" class="anchor">§</a><h3 class="code-header">Timestamp</h3></section><div class="docblock"><p>Timestamp in microsecond precision, without timezone</p>
 </div><section id="variant.Timestamptz" class="variant"><a href="#variant.Timestamptz" class="anchor">§</a><h3 class="code-header">Timestamptz</h3></section><div class="docblock"><p>Timestamp in microsecond precision, with timezone</p>
+</div><section id="variant.TimestampNs" class="variant"><a href="#variant.TimestampNs" class="anchor">§</a><h3 class="code-header">TimestampNs</h3></section><div class="docblock"><p>Timestamp in nanosecond precision, without timezone</p>
+</div><section id="variant.TimestamptzNs" class="variant"><a href="#variant.TimestamptzNs" class="anchor">§</a><h3 class="code-header">TimestamptzNs</h3></section><div class="docblock"><p>Timestamp in nanosecond precision with timezone</p>
 </div><section id="variant.String" class="variant"><a href="#variant.String" class="anchor">§</a><h3 class="code-header">String</h3></section><div class="docblock"><p>Arbitrary-length character sequences encoded in utf-8</p>
 </div><section id="variant.Uuid" class="variant"><a href="#variant.Uuid" class="anchor">§</a><h3 class="code-header">Uuid</h3></section><div class="docblock"><p>Universally Unique Identifiers, should use 16-byte fixed</p>
 </div><section id="variant.Fixed" class="variant"><a href="#variant.Fixed" class="anchor">§</a><h3 class="code-header">Fixed(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>)</h3></section><div class="docblock"><p>Fixed length byte array</p>
@@ -40,13 +44,13 @@
     __S: <a class="trait" href="https://docs.rs/serde/1.0.208/serde/ser/trait.Serializer.html" title="trait serde::ser::Serializer">Serializer</a>,</div></h4></section></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PrimitiveType-1" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#200">source</a><a href="#impl-PrimitiveType-1" class="anchor">§</a><h3 class="code-header">impl&lt;'de&gt; <a class="enum" href="e [...]
     __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.208/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.208/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#238-259">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.208/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.208/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.208/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.208/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.208/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= [...]
-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-PrimitiveType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#291-302">source</a><a href="#impl-Serialize-for-PrimitiveType" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.208/serde/ser/trait.Serialize.html" title=" [...]
+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-PrimitiveType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#297-308">source</a><a href="#impl-Serialize-for-PrimitiveType" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.208/serde/ser/trait.Serialize.html" title=" [...]
     S: <a class="trait" href="https://docs.rs/serde/1.0.208/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.208/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><section id="impl-Eq-for-PrimitiveType" class="impl"><a class="src rightside" href="../../src/iceberg/spe [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
diff --git a/api/iceberg/spec/enum.Transform.html b/api/iceberg/spec/enum.Transform.html
index eca2779..74a4a82 100644
--- a/api/iceberg/spec/enum.Transform.html
+++ b/api/iceberg/spec/enum.Transform.html
@@ -102,16 +102,16 @@ v1 tables.</p>
 <li>Return type is Source type.</li>
 </ul>
 </div><section id="variant.Unknown" class="variant"><a href="#variant.Unknown" class="anchor">§</a><h3 class="code-header">Unknown</h3></section><div class="docblock"><p>Used to represent some customized transform that can’t be recognized or supported now.</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-Transform" class="impl"><a class="src rightside" href="../../src/iceberg/spec/transform.rs.html#135-596">source</a><a href="#impl-Transform" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Transform.html" title="enum iceberg::spec [...]
+</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-Transform" class="impl"><a class="src rightside" href="../../src/iceberg/spec/transform.rs.html#135-601">source</a><a href="#impl-Transform" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Transform.html" title="enum iceberg::spec [...]
 Returns <code>None</code> if it can’t be transformed.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.preserves_order" class="method"><a class="src rightside" href="../../src/iceberg/spec/transform.rs.html#238-243">source</a><h4 class="code-header">pub fn <a href="#method.preserves_order" class="fn">preserves_order</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>Whether the transform pr [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.dedup_name" class="method"><a class="src rightside" href="../../src/iceberg/spec/transform.rs.html#247-254">source</a><h4 class="code-header">pub fn <a href="#method.dedup_name" class="fn">dedup_name</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a></h4></section></summary><div class="docblock [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.preserves_order" class="method"><a class="src rightside" href="../../src/iceberg/spec/transform.rs.html#243-248">source</a><h4 class="code-header">pub fn <a href="#method.preserves_order" class="fn">preserves_order</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>Whether the transform pr [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.dedup_name" class="method"><a class="src rightside" href="../../src/iceberg/spec/transform.rs.html#252-259">source</a><h4 class="code-header">pub fn <a href="#method.dedup_name" class="fn">dedup_name</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a></h4></section></summary><div class="docblock [...]
 are added multiple times in partition spec builder.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.satisfies_order_of" class="method"><a class="src rightside" href="../../src/iceberg/spec/transform.rs.html#261-272">source</a><h4 class="code-header">pub fn <a href="#method.satisfies_order_of" class="fn">satisfies_order_of</a>(&amp;self, other: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;Self</a>) -&gt; <a class="primitive" href="https://doc.rust-la [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.satisfies_order_of" class="method"><a class="src rightside" href="../../src/iceberg/spec/transform.rs.html#266-277">source</a><h4 class="code-header">pub fn <a href="#method.satisfies_order_of" class="fn">satisfies_order_of</a>(&amp;self, other: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;Self</a>) -&gt; <a class="primitive" href="https://doc.rust-la [...]
 result.</p>
 <p>For example, sorting by day(ts) will produce an ordering that is also by month(ts) or
 year(ts). However, sorting by day(ts) will not satisfy the order of hour(ts) or identity(ts).</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.project" class="method"><a class="src rightside" href="../../src/iceberg/spec/transform.rs.html#286-330">source</a><h4 class="code-header">pub fn <a href="#method.project" class="fn">project</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.project" class="method"><a class="src rightside" href="../../src/iceberg/spec/transform.rs.html#291-335">source</a><h4 class="code-header">pub fn <a href="#method.project" class="fn">project</a>(
     &amp;self,
     name: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
     predicate: &amp;<a class="enum" href="../expr/enum.BoundPredicate.html" title="enum iceberg::expr::BoundPredicate">BoundPredicate</a>,
@@ -125,10 +125,10 @@ and filtering based on the original, untransformed data.</p>
 <code>bucket(a, 37) as bs</code>, if one row matches <code>a = 10</code>, then its partition
 value should match <code>bucket(10, 37) as bs</code>, and we project <code>a = 10</code> to
 <code>bs = bucket(10, 37)</code></p>
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Transform" class="impl"><a class="src rightside" href="../../src/iceberg/spec/transform.rs.html#48">source</a><a href="#impl-Clone-for-Transform" class="anchor">§</a><h3 class="code-header">impl <a  [...]
-    D: <a class="trait" href="https://docs.rs/serde/1.0.208/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.208/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Display [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Transform" class="impl"><a class="src rightside" href="../../src/iceberg/spec/transform.rs.html#48">source</a><a href="#impl-Clone-for-Transform" class="anchor">§</a><h3 class="code-header">impl <a  [...]
+    D: <a class="trait" href="https://docs.rs/serde/1.0.208/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.208/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Display [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-Transform" class="impl"><a class="src rightside" href="../../src/iceberg/spec/transform.rs.html#672-677">source</a><a href="#impl-Serialize-for-Transform" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.208/serde/ser/trait.Serialize.html" title="trait se [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-Transform" class="impl"><a class="src rightside" href="../../src/iceberg/spec/transform.rs.html#677-682">source</a><a href="#impl-Serialize-for-Transform" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.208/serde/ser/trait.Serialize.html" title="trait se [...]
     S: <a class="trait" href="https://docs.rs/serde/1.0.208/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.208/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><section id="impl-Copy-for-Transform" class="impl"><a class="src rightside" href="../../src/iceberg/spec/ [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
diff --git a/api/iceberg/spec/enum.Type.html b/api/iceberg/spec/enum.Type.html
index 78dd54b..f3fff5d 100644
--- a/api/iceberg/spec/enum.Type.html
+++ b/api/iceberg/spec/enum.Type.html
@@ -17,10 +17,10 @@
 </div></details><details class="toggle method-toggle" open><summary><section id="method.decimal_required_bytes" class="method"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#153-156">source</a><h4 class="code-header">pub fn <a href="#method.decimal_required_bytes" class="fn">decimal_required_bytes</a>(precision: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>) -&gt; <a class="type" href="../type.Result.html" title="typ [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="method.decimal" class="method"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#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 [...]
+</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.208/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.208/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#261-267">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.208/serde/ser/trait.Serialize.html" title="trait serde::ser:: [...]
+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.208/serde/ser/trait.Serialize.html" title="trait serde::ser:: [...]
     S: <a class="trait" href="https://docs.rs/serde/1.0.208/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.208/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 [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
diff --git a/api/iceberg/spec/struct.Datum.html b/api/iceberg/spec/struct.Datum.html
index 39bdbb6..d477c70 100644
--- a/api/iceberg/spec/struct.Datum.html
+++ b/api/iceberg/spec/struct.Datum.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="Literal associated with its type. The value and type pair is checked when construction, so the type and value is guaranteed to be correct when used."><title>Datum in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","So [...]
+<!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="Literal associated with its type. The value and type pair is checked when construction, so the type and value is guaranteed to be correct when used."><title>Datum in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","So [...]
 guaranteed to be correct when used.</p>
 <p>By default, we decouple the type and value of a literal, so we can use avoid the cost of storing extra type info
 for each literal. But associate type with literal can be useful in some cases, for example, in unbound expression.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Datum" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#370-1015">source</a><a href="#impl-Datum" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Datum.html" title="struct iceberg::spec::Da [...]
+</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-Datum" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#377-1062">source</a><a href="#impl-Datum" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Datum.html" title="struct iceberg::spec::Da [...]
 <p>See <a href="https://iceberg.apache.org/spec/#binary-single-value-serialization">this spec</a> for reference.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.to_bytes" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#423-441">source</a><h4 class="code-header">pub fn <a href="#method.to_bytes" class="fn">to_bytes</a>(&amp;self) -&gt; <a class="struct" href="https://docs.rs/serde_bytes/0.11.15/serde_bytes/bytebuf/struct.ByteBuf.html" title="struct serde_bytes::bytebuf::ByteBuf">ByteBuf</a></h4></section></summary><div class [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.to_bytes" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#436-454">source</a><h4 class="code-header">pub fn <a href="#method.to_bytes" class="fn">to_bytes</a>(&amp;self) -&gt; <a class="struct" href="https://docs.rs/serde_bytes/0.11.15/serde_bytes/bytebuf/struct.ByteBuf.html" title="struct serde_bytes::bytebuf::ByteBuf">ByteBuf</a></h4></section></summary><div class [...]
 <p>See <a href="https://iceberg.apache.org/spec/#binary-single-value-serialization">this spec</a> for reference.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.bool" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#456-461">source</a><h4 class="code-header">pub fn <a href="#method.bool" class="fn">bool</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.ht [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.bool" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#469-474">source</a><h4 class="code-header">pub fn <a href="#method.bool" class="fn">bool</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.ht [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::{Datum, Literal, PrimitiveLiteral};
@@ -17,7 +17,7 @@ for each literal. But associate type with literal can be useful in some cases, f
     Literal::from(t),
     Literal::Primitive(PrimitiveLiteral::Boolean(<span class="bool-val">true</span>))
 );</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.bool_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#477-482">source</a><h4 class="code-header">pub fn <a href="#method.bool_from_str" class="fn">bool_from_str</a>&lt;S: <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 [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.bool_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#490-495">source</a><h4 class="code-header">pub fn <a href="#method.bool_from_str" class="fn">bool_from_str</a>&lt;S: <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 [...]
 See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromStr-for-bool">Parse bool from str</a> for reference.</p>
 <p>Example:</p>
 
@@ -29,7 +29,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
     Literal::Primitive(PrimitiveLiteral::Boolean(<span class="bool-val">false</span>)),
     t.into()
 );</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.int" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#494-499">source</a><h4 class="code-header">pub fn <a href="#method.int" class="fn">int</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html"> [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.int" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#507-512">source</a><h4 class="code-header">pub fn <a href="#method.int" class="fn">int</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html"> [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::{Datum, Literal, PrimitiveLiteral};
@@ -37,7 +37,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{}"</span>, t), <span class="string">"23"</span>);
 <span class="macro">assert_eq!</span>(Literal::Primitive(PrimitiveLiteral::Int(<span class="number">23</span>)), t.into());</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.long" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#511-516">source</a><h4 class="code-header">pub fn <a href="#method.long" class="fn">long</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.htm [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.long" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#524-529">source</a><h4 class="code-header">pub fn <a href="#method.long" class="fn">long</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.htm [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::{Datum, Literal, PrimitiveLiteral};
@@ -45,7 +45,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"24"</span>);
 <span class="macro">assert_eq!</span>(Literal::Primitive(PrimitiveLiteral::Long(<span class="number">24</span>)), t.into());</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.float" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#532-537">source</a><h4 class="code-header">pub fn <a href="#method.float" class="fn">float</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.f32. [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.float" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#545-550">source</a><h4 class="code-header">pub fn <a href="#method.float" class="fn">float</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.f32. [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::{Datum, Literal, PrimitiveLiteral};
@@ -57,7 +57,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
     Literal::Primitive(PrimitiveLiteral::Float(OrderedFloat(<span class="number">32.1</span>))),
     t.into()
 );</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.double" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#553-558">source</a><h4 class="code-header">pub fn <a href="#method.double" class="fn">double</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.f [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.double" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#566-571">source</a><h4 class="code-header">pub fn <a href="#method.double" class="fn">double</a>&lt;T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.f [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::{Datum, Literal, PrimitiveLiteral};
@@ -69,7 +69,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
     Literal::Primitive(PrimitiveLiteral::Double(OrderedFloat(<span class="number">32.1</span>))),
     t.into()
 );</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.date" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#571-576">source</a><h4 class="code-header">pub fn <a href="#method.date" class="fn">date</a>(days: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates date literal from number of days from unix epoch dire [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.date" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#584-589">source</a><h4 class="code-header">pub fn <a href="#method.date" class="fn">date</a>(days: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates date literal from number of days from unix epoch dire [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::{Datum, Literal, PrimitiveLiteral};
@@ -78,7 +78,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"1970-01-03"</span>);
 <span class="macro">assert_eq!</span>(Literal::Primitive(PrimitiveLiteral::Int(<span class="number">2</span>)), t.into());</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.date_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#590-600">source</a><h4 class="code-header">pub fn <a href="#method.date_from_str" class="fn">date_from_str</a>&lt;S: <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 [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.date_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#603-613">source</a><h4 class="code-header">pub fn <a href="#method.date_from_str" class="fn">date_from_str</a>&lt;S: <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 [...]
 <p>See <a href="https://docs.rs/chrono/latest/chrono/naive/date/struct.NaiveDate.html#method.from_str" title="associated function chrono::naive::date::NaiveDate::from_str"><code>NaiveDate::from_str</code></a>.</p>
 <p>Example</p>
 
@@ -87,7 +87,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"1970-01-05"</span>);
 <span class="macro">assert_eq!</span>(Literal::date(<span class="number">4</span>), t.into());</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.date_from_ymd" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#615-624">source</a><h4 class="code-header">pub fn <a href="#method.date_from_ymd" class="fn">date_from_ymd</a>(year: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>, month: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u3 [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.date_from_ymd" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#628-637">source</a><h4 class="code-header">pub fn <a href="#method.date_from_ymd" class="fn">date_from_ymd</a>(year: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>, month: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u3 [...]
 <p>See <a href="https://docs.rs/chrono/latest/chrono/naive/date/struct.NaiveDate.html#method.from_ymd_opt" title="associated function chrono::naive::date::NaiveDate::from_ymd_opt"><code>NaiveDate::from_ymd_opt</code></a>.</p>
 <p>Example:</p>
 
@@ -96,7 +96,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 
  <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"1970-01-05"</span>);
  <span class="macro">assert_eq!</span>(Literal::date(<span class="number">4</span>), t.into());</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.time_micros" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#652-663">source</a><h4 class="code-header">pub fn <a href="#method.time_micros" class="fn">time_micros</a>(value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;Self&gt [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.time_micros" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#665-676">source</a><h4 class="code-header">pub fn <a href="#method.time_micros" class="fn">time_micros</a>(value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;Self&gt [...]
 <p>It will return error when it’s negative or too large to fit in 24 hours.</p>
 <p>Example:</p>
 
@@ -118,7 +118,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 
 <span class="kw">let </span>too_large_value = <span class="number">36 </span>* <span class="number">60 </span>* <span class="number">60 </span>* <span class="number">1_000_000</span>; <span class="comment">// Too large to fit in 24 hours.
 </span><span class="macro">assert!</span>(Datum::time_micros(too_large_value).is_err());</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.time_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#688-698">source</a><h4 class="code-header">pub fn <a href="#method.time_from_str" class="fn">time_from_str</a>&lt;S: <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 [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.time_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#701-711">source</a><h4 class="code-header">pub fn <a href="#method.time_from_str" class="fn">time_from_str</a>&lt;S: <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 [...]
 <p>See <a href="https://docs.rs/chrono/latest/chrono/naive/time/struct.NaiveTime.html#method.from_str" title="associated function chrono::naive::time::NaiveTime::from_str"><code>NaiveTime::from_str</code></a> for details.</p>
 <p>Example:</p>
 
@@ -126,7 +126,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 <span class="kw">let </span>t = Datum::time_from_str(<span class="string">"01:02:01.888999777"</span>).unwrap();
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"01:02:01.888999"</span>);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.time_from_hms_micro" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#711-718">source</a><h4 class="code-header">pub fn <a href="#method.time_from_hms_micro" class="fn">time_from_hms_micro</a>(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.time_from_hms_micro" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#724-731">source</a><h4 class="code-header">pub fn <a href="#method.time_from_hms_micro" class="fn">time_from_hms_micro</a>(
     hour: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,
     min: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,
     sec: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,
@@ -139,14 +139,21 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 <span class="kw">let </span>t = Datum::time_from_hms_micro(<span class="number">22</span>, <span class="number">15</span>, <span class="number">33</span>, <span class="number">111</span>).unwrap();
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"22:15:33.000111"</span>);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp_micros" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#730-735">source</a><h4 class="code-header">pub fn <a href="#method.timestamp_micros" class="fn">timestamp_micros</a>(value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates a timestamp from [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp_micros" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#743-748">source</a><h4 class="code-header">pub fn <a href="#method.timestamp_micros" class="fn">timestamp_micros</a>(value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates a timestamp from [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::Datum;
 <span class="kw">let </span>t = Datum::timestamp_micros(<span class="number">1000</span>);
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"1970-01-01 00:00:00.001"</span>);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp_from_datetime" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#753-755">source</a><h4 class="code-header">pub fn <a href="#method.timestamp_from_datetime" class="fn">timestamp_from_datetime</a>(dt: <a class="struct" href="https://docs.rs/chrono/latest/chrono/naive/datetime/struct.NaiveDateTime.html" title="struct chrono::naive::datetime::NaiveDateTime">Nai [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp_nanos" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#760-765">source</a><h4 class="code-header">pub fn <a href="#method.timestamp_nanos" class="fn">timestamp_nanos</a>(value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates a timestamp from un [...]
+<p>Example:</p>
+
+<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::Datum;
+<span class="kw">let </span>t = Datum::timestamp_nanos(<span class="number">1000</span>);
+
+<span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"1970-01-01 00:00:00.000001"</span>);</code></pre></div>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp_from_datetime" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#783-785">source</a><h4 class="code-header">pub fn <a href="#method.timestamp_from_datetime" class="fn">timestamp_from_datetime</a>(dt: <a class="struct" href="https://docs.rs/chrono/latest/chrono/naive/datetime/struct.NaiveDateTime.html" title="struct chrono::naive::datetime::NaiveDateTime">Nai [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>chrono::{NaiveDate, NaiveDateTime, TimeZone, Utc};
@@ -159,7 +166,7 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 );
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"1992-03-01 01:02:03.000088"</span>);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#770-776">source</a><h4 class="code-header">pub fn <a href="#method.timestamp_from_str" class="fn">timestamp_from_str</a>&lt;S: <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://do [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamp_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#800-806">source</a><h4 class="code-header">pub fn <a href="#method.timestamp_from_str" class="fn">timestamp_from_str</a>&lt;S: <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://do [...]
 <p>See <a href="https://docs.rs/chrono/latest/chrono/naive/datetime/struct.NaiveDateTime.html#method.from_str" title="associated function chrono::naive::datetime::NaiveDateTime::from_str"><code>NaiveDateTime::from_str</code></a>.</p>
 <p>Example:</p>
 
@@ -168,14 +175,21 @@ See <a href="https://doc.rust-lang.org/stable/std/primitive.bool.html#impl-FromS
 <span class="kw">let </span>t = Datum::timestamp_from_str(<span class="string">"1992-03-01T01:02:03.000088"</span>).unwrap();
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"1992-03-01 01:02:03.000088"</span>);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamptz_micros" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#788-793">source</a><h4 class="code-header">pub fn <a href="#method.timestamptz_micros" class="fn">timestamptz_micros</a>(value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates a timestam [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamptz_micros" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#818-823">source</a><h4 class="code-header">pub fn <a href="#method.timestamptz_micros" class="fn">timestamptz_micros</a>(value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates a timestam [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::Datum;
 <span class="kw">let </span>t = Datum::timestamptz_micros(<span class="number">1000</span>);
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"1970-01-01 00:00:00.001 UTC"</span>);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamptz_from_datetime" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#805-807">source</a><h4 class="code-header">pub fn <a href="#method.timestamptz_from_datetime" class="fn">timestamptz_from_datetime</a>&lt;T: <a class="trait" href="https://docs.rs/chrono/latest/chrono/offset/trait.TimeZone.html" title="trait chrono::offset::TimeZone">TimeZone</a>&gt;(dt: <a c [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamptz_nanos" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#835-840">source</a><h4 class="code-header">pub fn <a href="#method.timestamptz_nanos" class="fn">timestamptz_nanos</a>(value: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i64.html">i64</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates a timestamp w [...]
+<p>Example:</p>
+
+<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::Datum;
+<span class="kw">let </span>t = Datum::timestamptz_nanos(<span class="number">1000</span>);
+
+<span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"1970-01-01 00:00:00.000001 UTC"</span>);</code></pre></div>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamptz_from_datetime" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#852-854">source</a><h4 class="code-header">pub fn <a href="#method.timestamptz_from_datetime" class="fn">timestamptz_from_datetime</a>&lt;T: <a class="trait" href="https://docs.rs/chrono/latest/chrono/offset/trait.TimeZone.html" title="trait chrono::offset::TimeZone">TimeZone</a>&gt;(dt: <a c [...]
 Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>chrono::{TimeZone, Utc};
@@ -183,7 +197,7 @@ Example:</p>
 <span class="kw">let </span>t = Datum::timestamptz_from_datetime(Utc.timestamp_opt(<span class="number">1000</span>, <span class="number">0</span>).unwrap());
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"1970-01-01 00:16:40 UTC"</span>);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamptz_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#822-828">source</a><h4 class="code-header">pub fn <a href="#method.timestamptz_from_str" class="fn">timestamptz_from_str</a>&lt;S: <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="http [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.timestamptz_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#869-875">source</a><h4 class="code-header">pub fn <a href="#method.timestamptz_from_str" class="fn">timestamptz_from_str</a>&lt;S: <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="http [...]
 <p>See <a href="https://docs.rs/chrono/latest/chrono/datetime/struct.DateTime.html#method.from_str" title="associated function chrono::datetime::DateTime::from_str"><code>DateTime::from_str</code></a>.</p>
 <p>Example:</p>
 
@@ -192,14 +206,14 @@ Example:</p>
 <span class="kw">let </span>t = Datum::timestamptz_from_str(<span class="string">"1992-03-01T01:02:03.000088+08:00"</span>).unwrap();
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"1992-02-29 17:02:03.000088 UTC"</span>);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.string" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#840-845">source</a><h4 class="code-header">pub fn <a href="#method.string" class="fn">string</a>&lt;S: <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html" title="trait alloc::string::ToString">ToString</a>&gt;(s: S) -&gt; Self</h4></section></summary><div class="docblock"> [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.string" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#887-892">source</a><h4 class="code-header">pub fn <a href="#method.string" class="fn">string</a>&lt;S: <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html" title="trait alloc::string::ToString">ToString</a>&gt;(s: S) -&gt; Self</h4></section></summary><div class="docblock"> [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::Datum;
 <span class="kw">let </span>t = Datum::string(<span class="string">"ss"</span>);
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">r#""ss""#</span>);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.uuid" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#858-863">source</a><h4 class="code-header">pub fn <a href="#method.uuid" class="fn">uuid</a>(uuid: <a class="struct" href="https://docs.rs/uuid/1.10.0/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates uuid literal.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.uuid" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#905-910">source</a><h4 class="code-header">pub fn <a href="#method.uuid" class="fn">uuid</a>(uuid: <a class="struct" href="https://docs.rs/uuid/1.10.0/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>) -&gt; Self</h4></section></summary><div class="docblock"><p>Creates uuid literal.</p>
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::Datum;
@@ -207,28 +221,28 @@ Example:</p>
 <span class="kw">let </span>t = Datum::uuid(<span class="macro">uuid!</span>(<span class="string">"a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8"</span>));
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8"</span>);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.uuid_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#875-884">source</a><h4 class="code-header">pub fn <a href="#method.uuid_from_str" class="fn">uuid_from_str</a>&lt;S: <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 [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.uuid_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#922-931">source</a><h4 class="code-header">pub fn <a href="#method.uuid_from_str" class="fn">uuid_from_str</a>&lt;S: <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 [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::Datum;
 <span class="kw">let </span>t = Datum::uuid_from_str(<span class="string">"a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8"</span>).unwrap();
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"a1a2a3a4-b1b2-c1c2-d1d2-d3d4d5d6d7d8"</span>);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.fixed" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#896-902">source</a><h4 class="code-header">pub fn <a href="#method.fixed" class="fn">fixed</a>&lt;I: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a class="primitive" h [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.fixed" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#943-949">source</a><h4 class="code-header">pub fn <a href="#method.fixed" class="fn">fixed</a>&lt;I: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a class="primitive" h [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::{Datum, Literal, PrimitiveLiteral};
 <span class="kw">let </span>t = Datum::fixed(<span class="macro">vec!</span>[<span class="number">1u8</span>, <span class="number">2u8</span>]);
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"0102"</span>);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.binary" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#914-919">source</a><h4 class="code-header">pub fn <a href="#method.binary" class="fn">binary</a>&lt;I: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a class="primitive [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.binary" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#961-966">source</a><h4 class="code-header">pub fn <a href="#method.binary" class="fn">binary</a>&lt;I: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>&lt;Item = <a class="primitive [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::Datum;
 <span class="kw">let </span>t = Datum::binary(<span class="macro">vec!</span>[<span class="number">1u8</span>, <span class="number">100u8</span>]);
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"0164"</span>);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.decimal_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#933-939">source</a><h4 class="code-header">pub fn <a href="#method.decimal_from_str" class="fn">decimal_from_str</a>&lt;S: <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 [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.decimal_from_str" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#980-986">source</a><h4 class="code-header">pub fn <a href="#method.decimal_from_str" class="fn">decimal_from_str</a>&lt;S: <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 [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::Datum;
@@ -237,7 +251,7 @@ Example:</p>
 <span class="kw">let </span>t = Datum::decimal_from_str(<span class="string">"123.45"</span>).unwrap();
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"123.45"</span>);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.decimal" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#953-966">source</a><h4 class="code-header">pub fn <a href="#method.decimal" class="fn">decimal</a>(value: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Decimal&gt;) -&gt; <a class="type" href="../type.Result.html" title [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.decimal" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1000-1013">source</a><h4 class="code-header">pub fn <a href="#method.decimal" class="fn">decimal</a>(value: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Decimal&gt;) -&gt; <a class="type" href="../type.Result.html" tit [...]
 <p>Example:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>iceberg::spec::Datum;
@@ -246,18 +260,18 @@ Example:</p>
 <span class="kw">let </span>t = Datum::decimal(Decimal::new(<span class="number">123</span>, <span class="number">2</span>)).unwrap();
 
 <span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">"{t}"</span>), <span class="string">"1.23"</span>);</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.to" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#969-994">source</a><h4 class="code-header">pub fn <a href="#method.to" class="fn">to</a>(self, target_type: &amp;<a class="enum" href="enum.Type.html" title="enum iceberg::spec::Type">Type</a>) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="struct" href="struct [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.literal" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#997-999">source</a><h4 class="code-header">pub fn <a href="#method.literal" class="fn">literal</a>(&amp;self) -&gt; &amp;<a class="enum" href="enum.PrimitiveLiteral.html" title="enum iceberg::spec::PrimitiveLiteral">PrimitiveLiteral</a></h4></section></summary><div class="docblock"><p>Get the primitive literal [...]
-</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#1002-1004">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#1008-1014">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
+</div></details><details class="toggle method-toggle" open><summary><section id="method.to" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1016-1041">source</a><h4 class="code-header">pub fn <a href="#method.to" class="fn">to</a>(self, target_type: &amp;<a class="enum" href="enum.Type.html" title="enum iceberg::spec::Type">Type</a>) -&gt; <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="struct" href="stru [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.literal" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1044-1046">source</a><h4 class="code-header">pub fn <a href="#method.literal" class="fn">literal</a>(&amp;self) -&gt; &amp;<a class="enum" href="enum.PrimitiveLiteral.html" title="enum iceberg::spec::PrimitiveLiteral">PrimitiveLiteral</a></h4></section></summary><div class="docblock"><p>Get the primitive liter [...]
+</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#95">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 [...]
+    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= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialOrd-for-Datum" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#206-307">source</a><a href="#impl-PartialOrd-for-Datum" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html" title="trait core::c [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialOrd-for-Datum" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#207-308">source</a><a href="#impl-PartialOrd-for-Datum" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html" title="trait core::c [...]
 operator. <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html#method.le">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.gt" 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#1215">source</a></span><a href="#method.gt" class="anchor">§</a><h4 class="code-header">fn  [...]
-operator. <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html#method.ge">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-Datum" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#101-124">source</a><a href="#impl-Serialize-for-Datum" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.208/serde/ser/trait. [...]
+operator. <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html#method.ge">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-Datum" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#102-125">source</a><a href="#impl-Serialize-for-Datum" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.208/serde/ser/trait. [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/struct.ListType.html b/api/iceberg/spec/struct.ListType.html
index 971d8eb..a715df8 100644
--- a/api/iceberg/spec/struct.ListType.html
+++ b/api/iceberg/spec/struct.ListType.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="A list is a collection of values with some element type. The element field has an integer id that is unique in the table schema. Elements can be either optional or required. Element types may be any type."><title>ListType in iceberg::spec - Rust</title><script>if(window.location.protocol [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A list is a collection of values with some element type. The element field has an integer id that is unique in the table schema. Elements can be either optional or required. Element types may be any type."><title>ListType in iceberg::spec - Rust</title><script>if(window.location.protocol [...]
     pub element_field: <a class="type" href="type.NestedFieldRef.html" title="type iceberg::spec::NestedFieldRef">NestedFieldRef</a>,
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>A list is a collection of values with some element type. The element field has an integer id that is unique in the table schema.
 Elements can be either optional or required. Element types may be any type.</p>
 </div></details><h2 id="fields" class="fields section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.element_field" class="structfield section-header"><a href="#structfield.element_field" class="anchor field">§</a><code>element_field: <a class="type" href="type.NestedFieldRef.html" title="type iceberg::spec::NestedFieldRef">NestedFieldRef</a></code></span><div class="docblock"><p>Element field of list type.</p>
-</div><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-ListType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#690-695">source</a><a href="#impl-ListType" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ListType.html" title="struct iceberg::spec::L [...]
-</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-ListType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#682">source</a><a href="#impl-Clone-for-ListType" class="anchor">§</a><h3 class="code-header">impl <a c [...]
+</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-ListType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#698-703">source</a><a href="#impl-ListType" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.ListType.html" title="struct iceberg::spec::L [...]
+</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-ListType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#690">source</a><a href="#impl-Clone-for-ListType" class="anchor">§</a><h3 class="code-header">impl <a c [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-ListType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#682">source</a><a href="#impl-Eq-for-ListType" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.ListType.html" title="struc [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-ListType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#690">source</a><a href="#impl-Eq-for-ListType" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.ListType.html" title="struc [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/struct.Map.html b/api/iceberg/spec/struct.Map.html
index f232252..32f1395 100644
--- a/api/iceberg/spec/struct.Map.html
+++ b/api/iceberg/spec/struct.Map.html
@@ -1,27 +1,27 @@
-<!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="Map is a collection of key-value pairs with a key type and a value type. It used in Literal::Map, to make it hashable, the order of key-value pairs is stored in a separate vector so that we can hash the map in a deterministic way. But it also means that the order of key-value pairs is ma [...]
+<!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="Map is a collection of key-value pairs with a key type and a value type. It used in Literal::Map, to make it hashable, the order of key-value pairs is stored in a separate vector so that we can hash the map in a deterministic way. But it also means that the order of key-value pairs is ma [...]
 It used in Literal::Map, to make it hashable, the order of key-value pairs is stored in a separate vector
 so that we can hash the map in a deterministic way. But it also means that the order of key-value pairs is matter
 for the hash value.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Map" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1027-1081">source</a><a href="#impl-Map" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Map.html" title="struct iceberg::spec::Map">Ma [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.len" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1037-1039">source</a><h4 class="code-header">pub fn <a href="#method.len" class="fn">len</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Return the number of key-value pairs in the map.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.is_empty" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1042-1044">source</a><h4 class="code-header">pub fn <a href="#method.is_empty" class="fn">is_empty</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 map contains no elements.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.insert" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1049-1058">source</a><h4 class="code-header">pub fn <a href="#method.insert" class="fn">insert</a>(
+</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-Map" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1074-1128">source</a><a href="#impl-Map" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Map.html" title="struct iceberg::spec::Map">Ma [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.len" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1084-1086">source</a><h4 class="code-header">pub fn <a href="#method.len" class="fn">len</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Return the number of key-value pairs in the map.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.is_empty" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1089-1091">source</a><h4 class="code-header">pub fn <a href="#method.is_empty" class="fn">is_empty</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 map contains no elements.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.insert" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1096-1105">source</a><h4 class="code-header">pub fn <a href="#method.insert" class="fn">insert</a>(
     &amp;mut self,
     key: <a class="enum" href="enum.Literal.html" title="enum iceberg::spec::Literal">Literal</a>,
     value: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="enum.Literal.html" title="enum iceberg::spec::Literal">Literal</a>&gt;,
 ) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="enum.Literal.html" title="enum iceberg::spec::Literal">Literal</a>&gt;&gt;</h4></section></summary><div class="docblock"><p>Inserts a key-value pair into the map.
 If the map did not have this key present, None is returned.
 If the map did have this key present, the value is updated, and the old value is returned.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.get" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1062-1064">source</a><h4 class="code-header">pub fn <a href="#method.get" class="fn">get</a>(&amp;self, key: &amp;<a class="enum" href="enum.Literal.html" title="enum iceberg::spec::Literal">Literal</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::o [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.get" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1109-1111">source</a><h4 class="code-header">pub fn <a href="#method.get" class="fn">get</a>(&amp;self, key: &amp;<a class="enum" href="enum.Literal.html" title="enum iceberg::spec::Literal">Literal</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::o [...]
 If the key is not present in the map, None is returned.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.has_same_content" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1067-1080">source</a><h4 class="code-header">pub fn <a href="#method.has_same_content" class="fn">has_same_content</a>(&amp;self, other: &amp;<a class="struct" href="struct.Map.html" title="struct iceberg::spec::Map">Map</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primi [...]
-</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-Map" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1021">source</a><a href="#impl-Clone-for-Map" class="anchor">§</a><h3 class="code-header">impl <a class="trait" [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.has_same_content" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1114-1127">source</a><h4 class="code-header">pub fn <a href="#method.has_same_content" class="fn">has_same_content</a>(&amp;self, other: &amp;<a class="struct" href="struct.Map.html" title="struct iceberg::spec::Map">Map</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primi [...]
+</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-Map" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1068">source</a><a href="#impl-Clone-for-Map" class="anchor">§</a><h3 class="code-header">impl <a class="trait" [...]
     iter: T,
-) -&gt; Self</h4></section></summary><div class='docblock'>Creates a value from an iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.FromIterator.html#tymethod.from_iter">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Hash-for-Map" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1089-1096">source</a><a href="#impl-Hash-for-Map" class="anchor">§</a> [...]
+) -&gt; Self</h4></section></summary><div class='docblock'>Creates a value from an iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.FromIterator.html#tymethod.from_iter">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Hash-for-Map" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1136-1143">source</a><a href="#impl-Hash-for-Map" class="anchor">§</a> [...]
     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'>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= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-Map" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1021">source</a><a href="#impl-Eq-for-Map" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.Map.html" title="struct iceberg::spec:: [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-Map" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1068">source</a><a href="#impl-Eq-for-Map" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.Map.html" title="struct iceberg::spec:: [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     I: <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;I as <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>&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/iter/traits/collect/trait.IntoIterator.html#associatedtype.IntoIter" title="type core::iter::traits::collect::IntoIterator::IntoIter">IntoIter</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/d [...]
diff --git a/api/iceberg/spec/struct.MapType.html b/api/iceberg/spec/struct.MapType.html
index bd2f84d..7a72d0a 100644
--- a/api/iceberg/spec/struct.MapType.html
+++ b/api/iceberg/spec/struct.MapType.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="A map is a collection of key-value pairs with a key type and a value type. Both the key field and value field each have an integer id that is unique in the table schema. Map keys are required and map values can be either optional or required. Both map keys and map values may be any type, [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A map is a collection of key-value pairs with a key type and a value type. Both the key field and value field each have an integer id that is unique in the table schema. Map keys are required and map values can be either optional or required. Both map keys and map values may be any type, [...]
     pub key_field: <a class="type" href="type.NestedFieldRef.html" title="type iceberg::spec::NestedFieldRef">NestedFieldRef</a>,
     pub value_field: <a class="type" href="type.NestedFieldRef.html" title="type iceberg::spec::NestedFieldRef">NestedFieldRef</a>,
 }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>A map is a collection of key-value pairs with a key type and a value type.
@@ -7,10 +7,10 @@ Map keys are required and map values can be either optional or required.
 Both map keys and map values may be any type, including nested types.</p>
 </div></details><h2 id="fields" class="fields section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.key_field" class="structfield section-header"><a href="#structfield.key_field" class="anchor field">§</a><code>key_field: <a class="type" href="type.NestedFieldRef.html" title="type iceberg::spec::NestedFieldRef">NestedFieldRef</a></code></span><div class="docblock"><p>Field for key.</p>
 </div><span id="structfield.value_field" class="structfield section-header"><a href="#structfield.value_field" class="anchor field">§</a><code>value_field: <a class="type" href="type.NestedFieldRef.html" title="type iceberg::spec::NestedFieldRef">NestedFieldRef</a></code></span><div class="docblock"><p>Field for value.</p>
-</div><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-MapType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#814-822">source</a><a href="#impl-MapType" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.MapType.html" title="struct iceberg::spec::MapT [...]
-</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-MapType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#802">source</a><a href="#impl-Clone-for-MapType" class="anchor">§</a><h3 class="code-header">impl <a cla [...]
+</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-MapType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#822-830">source</a><a href="#impl-MapType" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.MapType.html" title="struct iceberg::spec::MapT [...]
+</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-MapType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#810">source</a><a href="#impl-Clone-for-MapType" class="anchor">§</a><h3 class="code-header">impl <a cla [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#263">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-MapType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#802">source</a><a href="#impl-Eq-for-MapType" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.MapType.html" title="struct i [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-MapType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#810">source</a><a href="#impl-Eq-for-MapType" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.MapType.html" title="struct i [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/struct.NestedField.html b/api/iceberg/spec/struct.NestedField.html
index 61690ff..69723c0 100644
--- a/api/iceberg/spec/struct.NestedField.html
+++ b/api/iceberg/spec/struct.NestedField.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="A struct is a tuple of typed values. Each field in the tuple is named and has an integer id that is unique in the table schema. Each field can be either optional or required, meaning that values can (or cannot) be null. Fields may be any type. Fields may have an optional comment or doc s [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A struct is a tuple of typed values. Each field in the tuple is named and has an integer id that is unique in the table schema. Each field can be either optional or required, meaning that values can (or cannot) be null. Fields may be any type. Fields may have an optional comment or doc s [...]
     pub id: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>,
     pub name: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>,
     pub required: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
@@ -16,25 +16,25 @@ Fields may have an optional comment or doc string. Fields can have default value
 </div><span id="structfield.doc" class="structfield section-header"><a href="#structfield.doc" class="anchor field">§</a><code>doc: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>&gt;</code></span><div class="docblock"><p>Fields may have an optional comment or doc st [...]
 </div><span id="structfield.initial_default" class="structfield section-header"><a href="#structfield.initial_default" class="anchor field">§</a><code>initial_default: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="enum.Literal.html" title="enum iceberg::spec::Literal">Literal</a>&gt;</code></span><div class="docblock"><p>Used to populate the field’s value for all records that wer [...]
 </div><span id="structfield.write_default" class="structfield section-header"><a href="#structfield.write_default" class="anchor field">§</a><code>write_default: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="enum.Literal.html" title="enum iceberg::spec::Literal">Literal</a>&gt;</code></span><div class="docblock"><p>Used to populate the field’s value for any records written after  [...]
-</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-NestedField" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#583-663">source</a><a href="#impl-NestedField" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.NestedField.html" title="struct iceberg [...]
+</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-NestedField" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#591-671">source</a><a href="#impl-NestedField" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.NestedField.html" title="struct iceberg [...]
     id: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>,
     name: impl <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html" title="trait alloc::string::ToString">ToString</a>,
     field_type: <a class="enum" href="enum.Type.html" title="enum iceberg::spec::Type">Type</a>,
     required: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,
 ) -&gt; Self</h4></section></summary><div class="docblock"><p>Construct a new field.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.required" class="method"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#598-608">source</a><h4 class="code-header">pub fn <a href="#method.required" class="fn">required</a>(id: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>, name: impl <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html" title= [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.optional" class="method"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#611-621">source</a><h4 class="code-header">pub fn <a href="#method.optional" class="fn">optional</a>(id: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>, name: impl <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html" title= [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.list_element" class="method"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#624-630">source</a><h4 class="code-header">pub fn <a href="#method.list_element" class="fn">list_element</a>(id: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>, field_type: <a class="enum" href="enum.Type.html" title="enum iceberg::spec::Type">Type</a>, req [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.map_key_element" class="method"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#633-635">source</a><h4 class="code-header">pub fn <a href="#method.map_key_element" class="fn">map_key_element</a>(id: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>, field_type: <a class="enum" href="enum.Type.html" title="enum iceberg::spec::Type">Type [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.map_value_element" class="method"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#638-644">source</a><h4 class="code-header">pub fn <a href="#method.map_value_element" class="fn">map_value_element</a>(id: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>, field_type: <a class="enum" href="enum.Type.html" title="enum iceberg::spec::Type [...]
-</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#647-650">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#653-656">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#659-662">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#504">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.208/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.208/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><details class="toggle method-toggle" open><summary><section id="method.required" class="method"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#606-616">source</a><h4 class="code-header">pub fn <a href="#method.required" class="fn">required</a>(id: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>, name: impl <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html" title= [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.optional" class="method"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#619-629">source</a><h4 class="code-header">pub fn <a href="#method.optional" class="fn">optional</a>(id: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>, name: impl <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/string/trait.ToString.html" title= [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.list_element" class="method"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#632-638">source</a><h4 class="code-header">pub fn <a href="#method.list_element" class="fn">list_element</a>(id: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>, field_type: <a class="enum" href="enum.Type.html" title="enum iceberg::spec::Type">Type</a>, req [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.map_key_element" class="method"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#641-643">source</a><h4 class="code-header">pub fn <a href="#method.map_key_element" class="fn">map_key_element</a>(id: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>, field_type: <a class="enum" href="enum.Type.html" title="enum iceberg::spec::Type">Type [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.map_value_element" class="method"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#646-652">source</a><h4 class="code-header">pub fn <a href="#method.map_value_element" class="fn">map_value_element</a>(id: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.i32.html">i32</a>, field_type: <a class="enum" href="enum.Type.html" title="enum iceberg::spec::Type [...]
+</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.208/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.208/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#504">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.208/serde/ser/trait.Serialize.html" title="trait se [...]
-    __S: <a class="trait" href="https://docs.rs/serde/1.0.208/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.208/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 [...]
+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.208/serde/ser/trait.Serialize.html" title="trait se [...]
+    __S: <a class="trait" href="https://docs.rs/serde/1.0.208/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.208/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 [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/struct.RawLiteral.html b/api/iceberg/spec/struct.RawLiteral.html
index f671c52..7fff684 100644
--- a/api/iceberg/spec/struct.RawLiteral.html
+++ b/api/iceberg/spec/struct.RawLiteral.html
@@ -1,8 +1,8 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Raw literal representation used for serde. The serialize way is used for Avro serializer."><title>RawLiteral in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans [...]
-</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-RawLiteral" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1993-2003">source</a><a href="#impl-RawLiteral" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RawLiteral.html" title="struct i [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.try_into" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#2000-2002">source</a><h4 class="code-header">pub fn <a href="#method.try_into" class="fn">try_into</a>(self, ty: &amp;<a class="enum" href="enum.Type.html" title="enum iceberg::spec::Type">Type</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::r [...]
-</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-RawLiteral" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1988">source</a><a href="#impl-Debug-for-RawLiteral" class="anchor">§</a><h3 class="code-header">impl <a [...]
-    __D: <a class="trait" href="https://docs.rs/serde/1.0.208/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.208/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Seria [...]
+<!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="Raw literal representation used for serde. The serialize way is used for Avro serializer."><title>RawLiteral in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans [...]
+</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-RawLiteral" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#2062-2072">source</a><a href="#impl-RawLiteral" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.RawLiteral.html" title="struct i [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.try_into" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#2069-2071">source</a><h4 class="code-header">pub fn <a href="#method.try_into" class="fn">try_into</a>(self, ty: &amp;<a class="enum" href="enum.Type.html" title="enum iceberg::spec::Type">Type</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::r [...]
+</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-RawLiteral" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#2057">source</a><a href="#impl-Debug-for-RawLiteral" class="anchor">§</a><h3 class="code-header">impl <a [...]
+    __D: <a class="trait" href="https://docs.rs/serde/1.0.208/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.208/serde/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Seria [...]
     __S: <a class="trait" href="https://docs.rs/serde/1.0.208/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.208/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#syn [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
diff --git a/api/iceberg/spec/struct.Schema.html b/api/iceberg/spec/struct.Schema.html
index 4dac8e2..88440d7 100644
--- a/api/iceberg/spec/struct.Schema.html
+++ b/api/iceberg/spec/struct.Schema.html
@@ -21,7 +21,7 @@
     __D: <a class="trait" href="https://docs.rs/serde/1.0.208/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.208/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-Schema" class="impl"><a class="src rightside" href="../../src/iceberg/spec/schema.rs.html#45">source</a><a href="#impl-Serialize-for-Schema" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde/1.0.208/serde/ser/trait.Serialize.html" title="trait serde::ser::Seri [...]
-    __S: <a class="trait" href="https://docs.rs/serde/1.0.208/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.208/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-TryFrom%3C%26Schema%3E-for- [...]
+    __S: <a class="trait" href="https://docs.rs/serde/1.0.208/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.208/serde/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-TryFrom%3C%26Schema%3E-for- [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/struct.Struct.html b/api/iceberg/spec/struct.Struct.html
index f846298..60134a7 100644
--- a/api/iceberg/spec/struct.Struct.html
+++ b/api/iceberg/spec/struct.Struct.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="The partition struct stores the tuple of partition values for each file. Its type is derived from the partition fields of the partition spec used to write the manifest file. In v2, the partition struct’s field ids must match the ids from the partition spec."><title>Struct in iceberg::spe [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The partition struct stores the tuple of partition values for each file. Its type is derived from the partition fields of the partition spec used to write the manifest file. In v2, the partition struct’s field ids must match the ids from the partition spec."><title>Struct in iceberg::spe [...]
 Its type is derived from the partition fields of the partition spec used to write the manifest file.
 In v2, the partition struct’s field ids must match the ids from the partition spec.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Struct" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1506-1532">source</a><a href="#impl-Struct" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Struct.html" title="struct iceberg::spec [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.iter" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1516-1526">source</a><h4 class="code-header">pub fn <a href="#method.iter" class="fn">iter</a>(&amp;self) -&gt; impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Iterator</a>&lt;Item = <a class="enum" h [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.is_null_at_index" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1529-1531">source</a><h4 class="code-header">pub fn <a href="#method.is_null_at_index" class="fn">is_null_at_index</a>(&amp;self, index: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/ [...]
-</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-Struct" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1498">source</a><a href="#impl-Clone-for-Struct" class="anchor">§</a><h3 class="code-header">impl <a class=" [...]
+</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-Struct" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1553-1579">source</a><a href="#impl-Struct" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Struct.html" title="struct iceberg::spec [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.iter" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1563-1573">source</a><h4 class="code-header">pub fn <a href="#method.iter" class="fn">iter</a>(&amp;self) -&gt; impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Iterator</a>&lt;Item = <a class="enum" h [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.is_null_at_index" class="method"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1576-1578">source</a><h4 class="code-header">pub fn <a href="#method.is_null_at_index" class="fn">is_null_at_index</a>(&amp;self, index: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/ [...]
+</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-Struct" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1545">source</a><a href="#impl-Clone-for-Struct" class="anchor">§</a><h3 class="code-header">impl <a class=" [...]
     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'>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= [...]
-sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-Struct" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1498">source</a><a href="#impl-Eq-for-Struct" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.Struct.html" title="struct iceber [...]
+sufficient, and should not be overridden without very good reason.</div></details></div></details><section id="impl-Eq-for-Struct" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1545">source</a><a href="#impl-Eq-for-Struct" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.Struct.html" title="struct iceber [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/struct.StructType.html b/api/iceberg/spec/struct.StructType.html
index 2e81aed..1b450db 100644
--- a/api/iceberg/spec/struct.StructType.html
+++ b/api/iceberg/spec/struct.StructType.html
@@ -1,13 +1,13 @@
-<!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="DataType for a specific struct"><title>StructType in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e497 [...]
-</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-StructType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#429-476">source</a><a href="#impl-StructType" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.StructType.html" title="struct  [...]
-</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#440-442">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#454-456">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#473-475">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#372">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.208/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.208/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 [...]
+<!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="DataType for a specific struct"><title>StructType in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e497 [...]
+</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-StructType" class="impl"><a class="src rightside" href="../../src/iceberg/spec/datatypes.rs.html#437-484">source</a><a href="#impl-StructType" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.StructType.html" title="struct  [...]
+</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.208/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.208/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#372">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.208/serde/ser/trait.Serialize.html" title="trait serd [...]
-    __S: <a class="trait" href="https://docs.rs/serde/1.0.208/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.208/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 [...]
+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.208/serde/ser/trait.Serialize.html" title="trait serd [...]
+    __S: <a class="trait" href="https://docs.rs/serde/1.0.208/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.208/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 [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/spec/struct.StructValueIntoIter.html b/api/iceberg/spec/struct.StructValueIntoIter.html
index a0cbf54..13ba7d2 100644
--- a/api/iceberg/spec/struct.StructValueIntoIter.html
+++ b/api/iceberg/spec/struct.StructValueIntoIter.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="An iterator that moves out of a struct."><title>StructValueIntoIter in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans- [...]
-</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-Iterator-for-StructValueIntoIter" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1548-1557">source</a><a href="#impl-Iterator-for-StructValueIntoIter" class="anchor">§</a><h3 class="code-header"> [...]
+<!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="An iterator that moves out of a struct."><title>StructValueIntoIter in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans- [...]
+</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-Iterator-for-StructValueIntoIter" class="impl"><a class="src rightside" href="../../src/iceberg/spec/values.rs.html#1595-1604">source</a><a href="#impl-Iterator-for-StructValueIntoIter" class="anchor">§</a><h3 class="code-header"> [...]
     &amp;mut self,
 ) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;[Self::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.array.html">N</a>], <a class="struct" href="https://doc.rust-lang.o [...]
     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><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>iter_next_chunk</code>)</span></div></span><div class='docblock'>Advances the iterator and returns an array containing the next <code>N</code> values. <a href="https://doc.rust-lang.org/n [...]
diff --git a/api/iceberg/spec/type.NestedFieldRef.html b/api/iceberg/spec/type.NestedFieldRef.html
index 8a8f6e0..0daef12 100644
--- a/api/iceberg/spec/type.NestedFieldRef.html
+++ b/api/iceberg/spec/type.NestedFieldRef.html
@@ -1,2 +1,2 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reference to nested field."><title>NestedFieldRef in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e497 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reference to nested field."><title>NestedFieldRef in iceberg::spec - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e497 [...]
 </div></details><h2 id="aliased-type" class="section-header">Aliased Type<a href="#aliased-type" class="anchor">§</a></h2><pre class="rust item-decl"><code>struct NestedFieldRef { <span class="comment">/* private fields */</span> }</code></pre><script src="../../type.impl/alloc/sync/struct.Arc.js" data-self-path="iceberg::spec::datatypes::NestedFieldRef" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg/writer/file_writer/struct.ParquetWriter.html b/api/iceberg/writer/file_writer/struct.ParquetWriter.html
index 38e0421..804b9db 100644
--- a/api/iceberg/writer/file_writer/struct.ParquetWriter.html
+++ b/api/iceberg/writer/file_writer/struct.ParquetWriter.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="`ParquetWriter`` is used to write arrow data into parquet file on storage."><title>ParquetWriter in iceberg::writer::file_writer - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraS [...]
-</div></details><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-CurrentFileStatus-for-ParquetWriter" class="impl"><a class="src rightside" href="../../../src/iceberg/writer/file_writer/parquet_writer.rs.html#542-554">source</a><a href="#impl-CurrentFileStatus-for-ParquetWriter" class="anchor"> [...]
+</div></details><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-CurrentFileStatus-for-ParquetWriter" class="impl"><a class="src rightside" href="../../../src/iceberg/writer/file_writer/parquet_writer.rs.html#550-562">source</a><a href="#impl-CurrentFileStatus-for-ParquetWriter" class="anchor"> [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/api/iceberg/writer/file_writer/trait.FileWriter.html b/api/iceberg/writer/file_writer/trait.FileWriter.html
index fffa87d..2e3738e 100644
--- a/api/iceberg/writer/file_writer/trait.FileWriter.html
+++ b/api/iceberg/writer/file_writer/trait.FileWriter.html
@@ -11,4 +11,4 @@
     batch: &amp;RecordBatch,
 ) -&gt; impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../type.Result.html" title="type iceberg::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>&gt;&gt; + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="tymethod.close" class="method"><a class="src rightside" href="../../../src/iceberg/writer/file_writer/mod.rs.html#48">source</a><h4 class="code-header">fn <a href="#tymethod.close" class="fn">close</a>(self) -&gt; impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../../typ [...]
-</div></details></div><h2 id="object-safety" class="section-header">Object Safety<a href="#object-safety" class="anchor">§</a></h2><div class="object-safety-info">This trait is <b>not</b> <a href="https://doc.rust-lang.org/nightly/reference/items/traits.html#object-safety">object safe</a>.</div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><section id="impl-FileWriter-for-ParquetWriter" class="impl">< [...]
\ No newline at end of file
+</div></details></div><h2 id="object-safety" class="section-header">Object Safety<a href="#object-safety" class="anchor">§</a></h2><div class="object-safety-info">This trait is <b>not</b> <a href="https://doc.rust-lang.org/nightly/reference/items/traits.html#object-safety">object safe</a>.</div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><section id="impl-FileWriter-for-ParquetWriter" class="impl">< [...]
\ No newline at end of file
diff --git a/api/iceberg/writer/trait.CurrentFileStatus.html b/api/iceberg/writer/trait.CurrentFileStatus.html
index e5a7035..079e77c 100644
--- a/api/iceberg/writer/trait.CurrentFileStatus.html
+++ b/api/iceberg/writer/trait.CurrentFileStatus.html
@@ -8,4 +8,4 @@ file.</p>
 </div></details><h2 id="required-methods" class="section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.current_file_path" class="method"><a class="src rightside" href="../../src/iceberg/writer/mod.rs.html#88">source</a><h4 class="code-header">fn <a href="#tymethod.current_file_path" class="fn">current_file_path</a>(&amp;self) -&gt; <a class="struct" href="https:// [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="tymethod.current_row_num" class="method"><a class="src rightside" href="../../src/iceberg/writer/mod.rs.html#90">source</a><h4 class="code-header">fn <a href="#tymethod.current_row_num" class="fn">current_row_num</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Get the current file row number.</p>
 </div></details><details class="toggle method-toggle" open><summary><section id="tymethod.current_written_size" class="method"><a class="src rightside" href="../../src/iceberg/writer/mod.rs.html#92">source</a><h4 class="code-header">fn <a href="#tymethod.current_written_size" class="fn">current_written_size</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Get the current  [...]
-</div></details></div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><section id="impl-CurrentFileStatus-for-ParquetWriter" class="impl"><a class="src rightside" href="../../src/iceberg/writer/file_writer/parquet_writer.rs.html#542-554">source</a><a href="#impl-CurrentFileStatus-for-ParquetWriter" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.CurrentFileStatus.html" titl [...]
\ No newline at end of file
+</div></details></div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><section id="impl-CurrentFileStatus-for-ParquetWriter" class="impl"><a class="src rightside" href="../../src/iceberg/writer/file_writer/parquet_writer.rs.html#550-562">source</a><a href="#impl-CurrentFileStatus-for-ParquetWriter" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.CurrentFileStatus.html" titl [...]
\ No newline at end of file
diff --git a/api/search-index.js b/api/search-index.js
index 28604da..4e93b2c 100644
--- a/api/search-index.js
+++ b/api/search-index.js
@@ -1,5 +1,5 @@
 var searchIndex = new Map(JSON.parse('[\
-["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPIPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOFFKRRNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNNNNMMMNMHMNNNNNNNNNNNPPPPPPPPFKRGFIPPPPPPPPFPPPPPPPPPGGFPPFPIPPFNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN [...]
+["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPIPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNONOOMOCOONNNNONCOCMNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOFFKRRNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNNNNMMMNMHMNNNNNNNNNNNPPPPPPPPFKRGFIPPPPPPPPFPPPPPPPPPGGFPPFPIPPFNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN [...]
 ["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 fd4cff8..a1bc9e6 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/src/iceberg/arrow/schema.rs.html b/api/src/iceberg/arrow/schema.rs.html
index b677d6d..9fb164b 100644
--- a/api/src/iceberg/arrow/schema.rs.html
+++ b/api/src/iceberg/arrow/schema.rs.html
@@ -1256,6 +1256,13 @@
 <a href="#1256" id="1256">1256</a>
 <a href="#1257" id="1257">1257</a>
 <a href="#1258" id="1258">1258</a>
+<a href="#1259" id="1259">1259</a>
+<a href="#1260" id="1260">1260</a>
+<a href="#1261" id="1261">1261</a>
+<a href="#1262" id="1262">1262</a>
+<a href="#1263" id="1263">1263</a>
+<a href="#1264" id="1264">1264</a>
+<a href="#1265" id="1265">1265</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
@@ -1837,6 +1844,13 @@
                 <span class="comment">// Timestampz always stored as UTC
                 </span>DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">Some</span>(<span class="string">"+00:00"</span>.into())),
             )),
+            <span class="kw">crate</span>::spec::PrimitiveType::TimestampNs =&gt; <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(
+                DataType::Timestamp(TimeUnit::Nanosecond, <span class="prelude-val">None</span>),
+            )),
+            <span class="kw">crate</span>::spec::PrimitiveType::TimestamptzNs =&gt; <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(
+                <span class="comment">// Store timestamptz_ns as UTC
+                </span>DataType::Timestamp(TimeUnit::Nanosecond, <span class="prelude-val">Some</span>(<span class="string">"+00:00"</span>.into())),
+            )),
             <span class="kw">crate</span>::spec::PrimitiveType::String =&gt; {
                 <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Utf8))
             }
diff --git a/api/src/iceberg/avro/schema.rs.html b/api/src/iceberg/avro/schema.rs.html
index a69680d..8170910 100644
--- a/api/src/iceberg/avro/schema.rs.html
+++ b/api/src/iceberg/avro/schema.rs.html
@@ -1208,6 +1208,9 @@
 <a href="#1208" id="1208">1208</a>
 <a href="#1209" id="1209">1209</a>
 <a href="#1210" id="1210">1210</a>
+<a href="#1211" id="1211">1211</a>
+<a href="#1212" id="1212">1212</a>
+<a href="#1213" id="1213">1213</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
@@ -1439,6 +1442,8 @@
             PrimitiveType::Time =&gt; AvroSchema::TimeMicros,
             PrimitiveType::Timestamp =&gt; AvroSchema::TimestampMicros,
             PrimitiveType::Timestamptz =&gt; AvroSchema::TimestampMicros,
+            PrimitiveType::TimestampNs =&gt; AvroSchema::TimestampNanos,
+            PrimitiveType::TimestamptzNs =&gt; AvroSchema::TimestampNanos,
             PrimitiveType::String =&gt; AvroSchema::String,
             PrimitiveType::Uuid =&gt; avro_fixed_schema(UUID_BYTES, <span class="prelude-val">Some</span>(UUID_LOGICAL_TYPE))<span class="question-mark">?</span>,
             PrimitiveType::Fixed(len) =&gt; avro_fixed_schema((<span class="kw-2">*</span>len) <span class="kw">as </span>usize, <span class="prelude-val">None</span>)<span class="question-mark">?</span>,
@@ -1729,6 +1734,7 @@
             AvroSchema::Date =&gt; Type::Primitive(PrimitiveType::Date),
             AvroSchema::TimeMicros =&gt; Type::Primitive(PrimitiveType::Time),
             AvroSchema::TimestampMicros =&gt; Type::Primitive(PrimitiveType::Timestamp),
+            AvroSchema::TimestampNanos =&gt; Type::Primitive(PrimitiveType::TimestampNs),
             AvroSchema::Boolean =&gt; Type::Primitive(PrimitiveType::Boolean),
             AvroSchema::Int =&gt; Type::Primitive(PrimitiveType::Int),
             AvroSchema::Long =&gt; Type::Primitive(PrimitiveType::Long),
diff --git a/api/src/iceberg/spec/datatypes.rs.html b/api/src/iceberg/spec/datatypes.rs.html
index 0edda7b..49fcd52 100644
--- a/api/src/iceberg/spec/datatypes.rs.html
+++ b/api/src/iceberg/spec/datatypes.rs.html
@@ -1164,6 +1164,16 @@
 <a href="#1164" id="1164">1164</a>
 <a href="#1165" id="1165">1165</a>
 <a href="#1166" id="1166">1166</a>
+<a href="#1167" id="1167">1167</a>
+<a href="#1168" id="1168">1168</a>
+<a href="#1169" id="1169">1169</a>
+<a href="#1170" id="1170">1170</a>
+<a href="#1171" id="1171">1171</a>
+<a href="#1172" id="1172">1172</a>
+<a href="#1173" id="1173">1173</a>
+<a href="#1174" id="1174">1174</a>
+<a href="#1175" id="1175">1175</a>
+<a href="#1176" id="1176">1176</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
@@ -1391,6 +1401,10 @@
     </span>Timestamp,
     <span class="doccomment">/// Timestamp in microsecond precision, with timezone
     </span>Timestamptz,
+    <span class="doccomment">/// Timestamp in nanosecond precision, without timezone
+    </span>TimestampNs,
+    <span class="doccomment">/// Timestamp in nanosecond precision with timezone
+    </span>TimestamptzNs,
     <span class="doccomment">/// Arbitrary-length character sequences encoded in utf-8
     </span>String,
     <span class="doccomment">/// Universally Unique Identifiers, should use 16-byte fixed
@@ -1416,6 +1430,8 @@
                 | (PrimitiveType::Time, PrimitiveLiteral::Long(<span class="kw">_</span>))
                 | (PrimitiveType::Timestamp, PrimitiveLiteral::Long(<span class="kw">_</span>))
                 | (PrimitiveType::Timestamptz, PrimitiveLiteral::Long(<span class="kw">_</span>))
+                | (PrimitiveType::TimestampNs, PrimitiveLiteral::Long(<span class="kw">_</span>))
+                | (PrimitiveType::TimestamptzNs, PrimitiveLiteral::Long(<span class="kw">_</span>))
                 | (PrimitiveType::String, PrimitiveLiteral::String(<span class="kw">_</span>))
                 | (PrimitiveType::Uuid, PrimitiveLiteral::UInt128(<span class="kw">_</span>))
                 | (PrimitiveType::Fixed(<span class="kw">_</span>), PrimitiveLiteral::Binary(<span class="kw">_</span>))
@@ -1526,6 +1542,8 @@
             PrimitiveType::Time =&gt; <span class="macro">write!</span>(f, <span class="string">"time"</span>),
             PrimitiveType::Timestamp =&gt; <span class="macro">write!</span>(f, <span class="string">"timestamp"</span>),
             PrimitiveType::Timestamptz =&gt; <span class="macro">write!</span>(f, <span class="string">"timestamptz"</span>),
+            PrimitiveType::TimestampNs =&gt; <span class="macro">write!</span>(f, <span class="string">"timestamp_ns"</span>),
+            PrimitiveType::TimestamptzNs =&gt; <span class="macro">write!</span>(f, <span class="string">"timestamptz_ns"</span>),
             PrimitiveType::String =&gt; <span class="macro">write!</span>(f, <span class="string">"string"</span>),
             PrimitiveType::Uuid =&gt; <span class="macro">write!</span>(f, <span class="string">"uuid"</span>),
             PrimitiveType::Fixed(size) =&gt; <span class="macro">write!</span>(f, <span class="string">"fixed({})"</span>, size),
@@ -2318,6 +2336,8 @@
             (PrimitiveType::Time, PrimitiveLiteral::Long(<span class="number">1</span>)),
             (PrimitiveType::Timestamptz, PrimitiveLiteral::Long(<span class="number">1</span>)),
             (PrimitiveType::Timestamp, PrimitiveLiteral::Long(<span class="number">1</span>)),
+            (PrimitiveType::TimestamptzNs, PrimitiveLiteral::Long(<span class="number">1</span>)),
+            (PrimitiveType::TimestampNs, PrimitiveLiteral::Long(<span class="number">1</span>)),
             (
                 PrimitiveType::Uuid,
                 PrimitiveLiteral::UInt128(Uuid::new_v4().as_u128()),
diff --git a/api/src/iceberg/spec/manifest.rs.html b/api/src/iceberg/spec/manifest.rs.html
index 7edccc0..35a14e6 100644
--- a/api/src/iceberg/spec/manifest.rs.html
+++ b/api/src/iceberg/spec/manifest.rs.html
@@ -2096,6 +2096,16 @@
 <a href="#2096" id="2096">2096</a>
 <a href="#2097" id="2097">2097</a>
 <a href="#2098" id="2098">2098</a>
+<a href="#2099" id="2099">2099</a>
+<a href="#2100" id="2100">2100</a>
+<a href="#2101" id="2101">2101</a>
+<a href="#2102" id="2102">2102</a>
+<a href="#2103" id="2103">2103</a>
+<a href="#2104" id="2104">2104</a>
+<a href="#2105" id="2105">2105</a>
+<a href="#2106" id="2106">2106</a>
+<a href="#2107" id="2107">2107</a>
+<a href="#2108" id="2108">2108</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
@@ -3668,6 +3678,11 @@
                             <span class="string">"v_ts_ntz"</span>,
                             Type::Primitive(PrimitiveType::Timestamp),
                         )),
+                        Arc::new(NestedField::optional(
+                            <span class="number">12</span>,
+                            <span class="string">"v_ts_ns_ntz"</span>,
+                            Type::Primitive(PrimitiveType::TimestampNs
+                        ))),
                     ])
                     .build()
                     .unwrap(),
@@ -3776,6 +3791,11 @@
                             <span class="string">"v_ts_ntz"</span>,
                             Type::Primitive(PrimitiveType::Timestamp),
                         )),
+                        Arc::new(NestedField::optional(
+                            <span class="number">12</span>,
+                            <span class="string">"v_ts_ns_ntz"</span>,
+                            Type::Primitive(PrimitiveType::TimestampNs
+                        )))
                     ])
                     .build()
                     .unwrap(),
diff --git a/api/src/iceberg/spec/transform.rs.html b/api/src/iceberg/spec/transform.rs.html
index dc2423a..ce2a99b 100644
--- a/api/src/iceberg/spec/transform.rs.html
+++ b/api/src/iceberg/spec/transform.rs.html
@@ -691,6 +691,11 @@
 <a href="#691" id="691">691</a>
 <a href="#692" id="692">692</a>
 <a href="#693" id="693">693</a>
+<a href="#694" id="694">694</a>
+<a href="#695" id="695">695</a>
+<a href="#696" id="696">696</a>
+<a href="#697" id="697">697</a>
+<a href="#698" id="698">698</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
@@ -852,6 +857,8 @@
                         | PrimitiveType::Time
                         | PrimitiveType::Timestamp
                         | PrimitiveType::Timestamptz
+                        | PrimitiveType::TimestampNs
+                        | PrimitiveType::TimestamptzNs
                         | PrimitiveType::String
                         | PrimitiveType::Uuid
                         | PrimitiveType::Fixed(<span class="kw">_</span>)
@@ -893,6 +900,8 @@
                     <span class="kw">match </span>p {
                         PrimitiveType::Timestamp
                         | PrimitiveType::Timestamptz
+                        | PrimitiveType::TimestampNs
+                        | PrimitiveType::TimestamptzNs
                         | PrimitiveType::Date =&gt; <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Date)),
                         <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(Error::new(
                             ErrorKind::DataInvalid,
@@ -909,9 +918,10 @@
             Transform::Hour =&gt; {
                 <span class="kw">if let </span>Type::Primitive(p) = input_type {
                     <span class="kw">match </span>p {
-                        PrimitiveType::Timestamp | PrimitiveType::Timestamptz =&gt; {
-                            <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Int))
-                        }
+                        PrimitiveType::Timestamp
+                        | PrimitiveType::Timestamptz
+                        | PrimitiveType::TimestampNs
+                        | PrimitiveType::TimestamptzNs =&gt; <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Int)),
                         <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(Error::new(
                             ErrorKind::DataInvalid,
                             <span class="macro">format!</span>(<span class="string">"{input_type} is not a valid input type of {self} transform"</span>,),
diff --git a/api/src/iceberg/spec/values.rs.html b/api/src/iceberg/spec/values.rs.html
index 37b8934..0d1ff12 100644
--- a/api/src/iceberg/spec/values.rs.html
+++ b/api/src/iceberg/spec/values.rs.html
@@ -3394,6 +3394,75 @@
 <a href="#3394" id="3394">3394</a>
 <a href="#3395" id="3395">3395</a>
 <a href="#3396" id="3396">3396</a>
+<a href="#3397" id="3397">3397</a>
+<a href="#3398" id="3398">3398</a>
+<a href="#3399" id="3399">3399</a>
+<a href="#3400" id="3400">3400</a>
+<a href="#3401" id="3401">3401</a>
+<a href="#3402" id="3402">3402</a>
+<a href="#3403" id="3403">3403</a>
+<a href="#3404" id="3404">3404</a>
+<a href="#3405" id="3405">3405</a>
+<a href="#3406" id="3406">3406</a>
+<a href="#3407" id="3407">3407</a>
+<a href="#3408" id="3408">3408</a>
+<a href="#3409" id="3409">3409</a>
+<a href="#3410" id="3410">3410</a>
+<a href="#3411" id="3411">3411</a>
+<a href="#3412" id="3412">3412</a>
+<a href="#3413" id="3413">3413</a>
+<a href="#3414" id="3414">3414</a>
+<a href="#3415" id="3415">3415</a>
+<a href="#3416" id="3416">3416</a>
+<a href="#3417" id="3417">3417</a>
+<a href="#3418" id="3418">3418</a>
+<a href="#3419" id="3419">3419</a>
+<a href="#3420" id="3420">3420</a>
+<a href="#3421" id="3421">3421</a>
+<a href="#3422" id="3422">3422</a>
+<a href="#3423" id="3423">3423</a>
+<a href="#3424" id="3424">3424</a>
+<a href="#3425" id="3425">3425</a>
+<a href="#3426" id="3426">3426</a>
+<a href="#3427" id="3427">3427</a>
+<a href="#3428" id="3428">3428</a>
+<a href="#3429" id="3429">3429</a>
+<a href="#3430" id="3430">3430</a>
+<a href="#3431" id="3431">3431</a>
+<a href="#3432" id="3432">3432</a>
+<a href="#3433" id="3433">3433</a>
+<a href="#3434" id="3434">3434</a>
+<a href="#3435" id="3435">3435</a>
+<a href="#3436" id="3436">3436</a>
+<a href="#3437" id="3437">3437</a>
+<a href="#3438" id="3438">3438</a>
+<a href="#3439" id="3439">3439</a>
+<a href="#3440" id="3440">3440</a>
+<a href="#3441" id="3441">3441</a>
+<a href="#3442" id="3442">3442</a>
+<a href="#3443" id="3443">3443</a>
+<a href="#3444" id="3444">3444</a>
+<a href="#3445" id="3445">3445</a>
+<a href="#3446" id="3446">3446</a>
+<a href="#3447" id="3447">3447</a>
+<a href="#3448" id="3448">3448</a>
+<a href="#3449" id="3449">3449</a>
+<a href="#3450" id="3450">3450</a>
+<a href="#3451" id="3451">3451</a>
+<a href="#3452" id="3452">3452</a>
+<a href="#3453" id="3453">3453</a>
+<a href="#3454" id="3454">3454</a>
+<a href="#3455" id="3455">3455</a>
+<a href="#3456" id="3456">3456</a>
+<a href="#3457" id="3457">3457</a>
+<a href="#3458" id="3458">3458</a>
+<a href="#3459" id="3459">3459</a>
+<a href="#3460" id="3460">3460</a>
+<a href="#3461" id="3461">3461</a>
+<a href="#3462" id="3462">3462</a>
+<a href="#3463" id="3463">3463</a>
+<a href="#3464" id="3464">3464</a>
+<a href="#3465" id="3465">3465</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
@@ -3434,6 +3503,7 @@
 <span class="kw">use </span>serde::{Deserialize, Serialize};
 <span class="kw">use </span>serde_bytes::ByteBuf;
 <span class="kw">use </span>serde_json::{Map <span class="kw">as </span>JsonMap, Number, Value <span class="kw">as </span>JsonValue};
+<span class="kw">use </span>timestamp::nanoseconds_to_datetime;
 <span class="kw">use </span>uuid::Uuid;
 
 <span class="kw">use </span><span class="kw">super</span>::datatypes::{PrimitiveType, Type};
@@ -3441,7 +3511,7 @@
 <span class="kw">use </span><span class="kw">crate</span>::spec::values::date::{date_from_naive_date, days_to_date, unix_epoch};
 <span class="kw">use </span><span class="kw">crate</span>::spec::values::time::microseconds_to_time;
 <span class="kw">use </span><span class="kw">crate</span>::spec::values::timestamp::microseconds_to_datetime;
-<span class="kw">use </span><span class="kw">crate</span>::spec::values::timestamptz::microseconds_to_datetimetz;
+<span class="kw">use </span><span class="kw">crate</span>::spec::values::timestamptz::{microseconds_to_datetimetz, nanoseconds_to_datetimetz};
 <span class="kw">use </span><span class="kw">crate</span>::spec::MAX_DECIMAL_PRECISION;
 <span class="kw">use crate</span>::{ensure_data_valid, Error, ErrorKind};
 
@@ -3722,6 +3792,12 @@
             (PrimitiveType::Timestamptz, PrimitiveLiteral::Long(val)) =&gt; {
                 <span class="macro">write!</span>(f, <span class="string">"{}"</span>, microseconds_to_datetimetz(<span class="kw-2">*</span>val))
             }
+            (PrimitiveType::TimestampNs, PrimitiveLiteral::Long(val)) =&gt; {
+                <span class="macro">write!</span>(f, <span class="string">"{}"</span>, nanoseconds_to_datetime(<span class="kw-2">*</span>val))
+            }
+            (PrimitiveType::TimestamptzNs, PrimitiveLiteral::Long(val)) =&gt; {
+                <span class="macro">write!</span>(f, <span class="string">"{}"</span>, nanoseconds_to_datetimetz(<span class="kw-2">*</span>val))
+            }
             (<span class="kw">_</span>, PrimitiveLiteral::String(val)) =&gt; <span class="macro">write!</span>(f, <span class="string">r#""{}""#</span>, val),
             (PrimitiveType::Uuid, PrimitiveLiteral::UInt128(val)) =&gt; {
                 <span class="macro">write!</span>(f, <span class="string">"{}"</span>, Uuid::from_u128(<span class="kw-2">*</span>val))
@@ -3797,6 +3873,12 @@
             PrimitiveType::Timestamptz =&gt; {
                 PrimitiveLiteral::Long(i64::from_le_bytes(bytes.try_into()<span class="question-mark">?</span>))
             }
+            PrimitiveType::TimestampNs =&gt; {
+                PrimitiveLiteral::Long(i64::from_le_bytes(bytes.try_into()<span class="question-mark">?</span>))
+            }
+            PrimitiveType::TimestamptzNs =&gt; {
+                PrimitiveLiteral::Long(i64::from_le_bytes(bytes.try_into()<span class="question-mark">?</span>))
+            }
             PrimitiveType::String =&gt; {
                 PrimitiveLiteral::String(std::str::from_utf8(bytes)<span class="question-mark">?</span>.to_string())
             }
@@ -4130,6 +4212,23 @@
         }
     }
 
+    <span class="doccomment">/// Creates a timestamp from unix epoch in nanoseconds.
+    ///
+    /// Example:
+    ///
+    /// ```rust
+    /// use iceberg::spec::Datum;
+    /// let t = Datum::timestamp_nanos(1000);
+    ///
+    /// assert_eq!(&amp;format!("{t}"), "1970-01-01 00:00:00.000001");
+    /// ```
+    </span><span class="kw">pub fn </span>timestamp_nanos(value: i64) -&gt; <span class="self">Self </span>{
+        <span class="self">Self </span>{
+            r#type: PrimitiveType::TimestampNs,
+            literal: PrimitiveLiteral::Long(value),
+        }
+    }
+
     <span class="doccomment">/// Creates a timestamp from [`DateTime`].
     ///
     /// Example:
@@ -4188,6 +4287,23 @@
         }
     }
 
+    <span class="doccomment">/// Creates a timestamp with timezone from unix epoch in nanoseconds.
+    ///
+    /// Example:
+    ///
+    /// ```rust
+    /// use iceberg::spec::Datum;
+    /// let t = Datum::timestamptz_nanos(1000);
+    ///
+    /// assert_eq!(&amp;format!("{t}"), "1970-01-01 00:00:00.000001 UTC");
+    /// ```
+    </span><span class="kw">pub fn </span>timestamptz_nanos(value: i64) -&gt; <span class="self">Self </span>{
+        <span class="self">Self </span>{
+            r#type: PrimitiveType::TimestamptzNs,
+            literal: PrimitiveLiteral::Long(value),
+        }
+    }
+
     <span class="doccomment">/// Creates a timestamp with timezone from [`DateTime`].
     /// Example:
     ///
@@ -5201,6 +5317,18 @@
                         .format(<span class="string">"%Y-%m-%dT%H:%M:%S%.f+00:00"</span>)
                         .to_string(),
                 )),
+                (PrimitiveType::TimestampNs, PrimitiveLiteral::Long(val)) =&gt; <span class="prelude-val">Ok</span>(JsonValue::String(
+                    timestamp::nanoseconds_to_datetime(val)
+                        .format(<span class="string">"%Y-%m-%dT%H:%M:%S%.f"</span>)
+                        .to_string(),
+                )),
+                (PrimitiveType::TimestamptzNs, PrimitiveLiteral::Long(val)) =&gt; {
+                    <span class="prelude-val">Ok</span>(JsonValue::String(
+                        timestamptz::nanoseconds_to_datetimetz(val)
+                            .format(<span class="string">"%Y-%m-%dT%H:%M:%S%.f+00:00"</span>)
+                            .to_string(),
+                    ))
+                }
                 (PrimitiveType::String, PrimitiveLiteral::String(val)) =&gt; {
                     <span class="prelude-val">Ok</span>(JsonValue::String(val.clone()))
                 }
@@ -5354,6 +5482,10 @@
         <span class="comment">// This shouldn't fail until the year 262000
         </span>DateTime::from_timestamp_micros(micros).unwrap().naive_utc()
     }
+
+    <span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>nanoseconds_to_datetime(nanos: i64) -&gt; NaiveDateTime {
+        DateTime::from_timestamp_nanos(nanos).naive_utc()
+    }
 }
 
 <span class="kw">mod </span>timestamptz {
@@ -5368,6 +5500,12 @@
 
         DateTime::from_timestamp(secs, rem <span class="kw">as </span>u32 * <span class="number">1_000</span>).unwrap()
     }
+
+    <span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>nanoseconds_to_datetimetz(nanos: i64) -&gt; DateTime&lt;Utc&gt; {
+        <span class="kw">let </span>(secs, rem) = (nanos / <span class="number">1_000_000_000</span>, nanos % <span class="number">1_000_000_000</span>);
+
+        DateTime::from_timestamp(secs, rem <span class="kw">as </span>u32).unwrap()
+    }
 }
 
 <span class="kw">mod </span>_serde {
diff --git a/api/src/iceberg/transform/bucket.rs.html b/api/src/iceberg/transform/bucket.rs.html
index d4d330e..ad6cb90 100644
--- a/api/src/iceberg/transform/bucket.rs.html
+++ b/api/src/iceberg/transform/bucket.rs.html
@@ -887,6 +887,8 @@
 <a href="#887" id="887">887</a>
 <a href="#888" id="888">888</a>
 <a href="#889" id="889">889</a>
+<a href="#890" id="890">890</a>
+<a href="#891" id="891">891</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
@@ -1145,7 +1147,7 @@
     <span class="kw">use </span><span class="kw">crate</span>::expr::PredicateOperator;
     <span class="kw">use </span><span class="kw">crate</span>::spec::PrimitiveType::{
         Binary, Date, Decimal, Fixed, Int, Long, String <span class="kw">as </span>StringType, Time, Timestamp,
-        Timestamptz, Uuid,
+        TimestampNs, Timestamptz, TimestamptzNs, Uuid,
     };
     <span class="kw">use </span><span class="kw">crate</span>::spec::Type::{Primitive, Struct};
     <span class="kw">use </span><span class="kw">crate</span>::spec::{Datum, NestedField, PrimitiveType, StructType, Transform, Type};
@@ -1186,6 +1188,8 @@
                 (Primitive(Time), <span class="prelude-val">Some</span>(Primitive(Int))),
                 (Primitive(Timestamp), <span class="prelude-val">Some</span>(Primitive(Int))),
                 (Primitive(Timestamptz), <span class="prelude-val">Some</span>(Primitive(Int))),
+                (Primitive(TimestampNs), <span class="prelude-val">Some</span>(Primitive(Int))),
+                (Primitive(TimestamptzNs), <span class="prelude-val">Some</span>(Primitive(Int))),
                 (
                     Struct(StructType::new(<span class="macro">vec!</span>[NestedField::optional(
                         <span class="number">1</span>,
diff --git a/api/src/iceberg/transform/identity.rs.html b/api/src/iceberg/transform/identity.rs.html
index 8ccc930..96cc162 100644
--- a/api/src/iceberg/transform/identity.rs.html
+++ b/api/src/iceberg/transform/identity.rs.html
@@ -96,6 +96,8 @@
 <a href="#96" id="96">96</a>
 <a href="#97" id="97">97</a>
 <a href="#98" id="98">98</a>
+<a href="#99" id="99">99</a>
+<a href="#100" id="100">100</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
@@ -136,7 +138,7 @@
 </span><span class="kw">mod </span>test {
     <span class="kw">use </span><span class="kw">crate</span>::spec::PrimitiveType::{
         Binary, Date, Decimal, Fixed, Int, Long, String <span class="kw">as </span>StringType, Time, Timestamp,
-        Timestamptz, Uuid,
+        TimestampNs, Timestamptz, TimestamptzNs, Uuid,
     };
     <span class="kw">use </span><span class="kw">crate</span>::spec::Type::{Primitive, Struct};
     <span class="kw">use </span><span class="kw">crate</span>::spec::{NestedField, StructType, Transform};
@@ -179,6 +181,8 @@
                 (Primitive(Time), <span class="prelude-val">Some</span>(Primitive(Time))),
                 (Primitive(Timestamp), <span class="prelude-val">Some</span>(Primitive(Timestamp))),
                 (Primitive(Timestamptz), <span class="prelude-val">Some</span>(Primitive(Timestamptz))),
+                (Primitive(TimestampNs), <span class="prelude-val">Some</span>(Primitive(TimestampNs))),
+                (Primitive(TimestamptzNs), <span class="prelude-val">Some</span>(Primitive(TimestamptzNs))),
                 (
                     Struct(StructType::new(<span class="macro">vec!</span>[NestedField::optional(
                         <span class="number">1</span>,
diff --git a/api/src/iceberg/transform/temporal.rs.html b/api/src/iceberg/transform/temporal.rs.html
index 722f416..e321ecb 100644
--- a/api/src/iceberg/transform/temporal.rs.html
+++ b/api/src/iceberg/transform/temporal.rs.html
@@ -2593,6 +2593,180 @@
 <a href="#2593" id="2593">2593</a>
 <a href="#2594" id="2594">2594</a>
 <a href="#2595" id="2595">2595</a>
+<a href="#2596" id="2596">2596</a>
+<a href="#2597" id="2597">2597</a>
+<a href="#2598" id="2598">2598</a>
+<a href="#2599" id="2599">2599</a>
+<a href="#2600" id="2600">2600</a>
+<a href="#2601" id="2601">2601</a>
+<a href="#2602" id="2602">2602</a>
+<a href="#2603" id="2603">2603</a>
+<a href="#2604" id="2604">2604</a>
+<a href="#2605" id="2605">2605</a>
+<a href="#2606" id="2606">2606</a>
+<a href="#2607" id="2607">2607</a>
+<a href="#2608" id="2608">2608</a>
+<a href="#2609" id="2609">2609</a>
+<a href="#2610" id="2610">2610</a>
+<a href="#2611" id="2611">2611</a>
+<a href="#2612" id="2612">2612</a>
+<a href="#2613" id="2613">2613</a>
+<a href="#2614" id="2614">2614</a>
+<a href="#2615" id="2615">2615</a>
+<a href="#2616" id="2616">2616</a>
+<a href="#2617" id="2617">2617</a>
+<a href="#2618" id="2618">2618</a>
+<a href="#2619" id="2619">2619</a>
+<a href="#2620" id="2620">2620</a>
+<a href="#2621" id="2621">2621</a>
+<a href="#2622" id="2622">2622</a>
+<a href="#2623" id="2623">2623</a>
+<a href="#2624" id="2624">2624</a>
+<a href="#2625" id="2625">2625</a>
+<a href="#2626" id="2626">2626</a>
+<a href="#2627" id="2627">2627</a>
+<a href="#2628" id="2628">2628</a>
+<a href="#2629" id="2629">2629</a>
+<a href="#2630" id="2630">2630</a>
+<a href="#2631" id="2631">2631</a>
+<a href="#2632" id="2632">2632</a>
+<a href="#2633" id="2633">2633</a>
+<a href="#2634" id="2634">2634</a>
+<a href="#2635" id="2635">2635</a>
+<a href="#2636" id="2636">2636</a>
+<a href="#2637" id="2637">2637</a>
+<a href="#2638" id="2638">2638</a>
+<a href="#2639" id="2639">2639</a>
+<a href="#2640" id="2640">2640</a>
+<a href="#2641" id="2641">2641</a>
+<a href="#2642" id="2642">2642</a>
+<a href="#2643" id="2643">2643</a>
+<a href="#2644" id="2644">2644</a>
+<a href="#2645" id="2645">2645</a>
+<a href="#2646" id="2646">2646</a>
+<a href="#2647" id="2647">2647</a>
+<a href="#2648" id="2648">2648</a>
+<a href="#2649" id="2649">2649</a>
+<a href="#2650" id="2650">2650</a>
+<a href="#2651" id="2651">2651</a>
+<a href="#2652" id="2652">2652</a>
+<a href="#2653" id="2653">2653</a>
+<a href="#2654" id="2654">2654</a>
+<a href="#2655" id="2655">2655</a>
+<a href="#2656" id="2656">2656</a>
+<a href="#2657" id="2657">2657</a>
+<a href="#2658" id="2658">2658</a>
+<a href="#2659" id="2659">2659</a>
+<a href="#2660" id="2660">2660</a>
+<a href="#2661" id="2661">2661</a>
+<a href="#2662" id="2662">2662</a>
+<a href="#2663" id="2663">2663</a>
+<a href="#2664" id="2664">2664</a>
+<a href="#2665" id="2665">2665</a>
+<a href="#2666" id="2666">2666</a>
+<a href="#2667" id="2667">2667</a>
+<a href="#2668" id="2668">2668</a>
+<a href="#2669" id="2669">2669</a>
+<a href="#2670" id="2670">2670</a>
+<a href="#2671" id="2671">2671</a>
+<a href="#2672" id="2672">2672</a>
+<a href="#2673" id="2673">2673</a>
+<a href="#2674" id="2674">2674</a>
+<a href="#2675" id="2675">2675</a>
+<a href="#2676" id="2676">2676</a>
+<a href="#2677" id="2677">2677</a>
+<a href="#2678" id="2678">2678</a>
+<a href="#2679" id="2679">2679</a>
+<a href="#2680" id="2680">2680</a>
+<a href="#2681" id="2681">2681</a>
+<a href="#2682" id="2682">2682</a>
+<a href="#2683" id="2683">2683</a>
+<a href="#2684" id="2684">2684</a>
+<a href="#2685" id="2685">2685</a>
+<a href="#2686" id="2686">2686</a>
+<a href="#2687" id="2687">2687</a>
+<a href="#2688" id="2688">2688</a>
+<a href="#2689" id="2689">2689</a>
+<a href="#2690" id="2690">2690</a>
+<a href="#2691" id="2691">2691</a>
+<a href="#2692" id="2692">2692</a>
+<a href="#2693" id="2693">2693</a>
+<a href="#2694" id="2694">2694</a>
+<a href="#2695" id="2695">2695</a>
+<a href="#2696" id="2696">2696</a>
+<a href="#2697" id="2697">2697</a>
+<a href="#2698" id="2698">2698</a>
+<a href="#2699" id="2699">2699</a>
+<a href="#2700" id="2700">2700</a>
+<a href="#2701" id="2701">2701</a>
+<a href="#2702" id="2702">2702</a>
+<a href="#2703" id="2703">2703</a>
+<a href="#2704" id="2704">2704</a>
+<a href="#2705" id="2705">2705</a>
+<a href="#2706" id="2706">2706</a>
+<a href="#2707" id="2707">2707</a>
+<a href="#2708" id="2708">2708</a>
+<a href="#2709" id="2709">2709</a>
+<a href="#2710" id="2710">2710</a>
+<a href="#2711" id="2711">2711</a>
+<a href="#2712" id="2712">2712</a>
+<a href="#2713" id="2713">2713</a>
+<a href="#2714" id="2714">2714</a>
+<a href="#2715" id="2715">2715</a>
+<a href="#2716" id="2716">2716</a>
+<a href="#2717" id="2717">2717</a>
+<a href="#2718" id="2718">2718</a>
+<a href="#2719" id="2719">2719</a>
+<a href="#2720" id="2720">2720</a>
+<a href="#2721" id="2721">2721</a>
+<a href="#2722" id="2722">2722</a>
+<a href="#2723" id="2723">2723</a>
+<a href="#2724" id="2724">2724</a>
+<a href="#2725" id="2725">2725</a>
+<a href="#2726" id="2726">2726</a>
+<a href="#2727" id="2727">2727</a>
+<a href="#2728" id="2728">2728</a>
+<a href="#2729" id="2729">2729</a>
+<a href="#2730" id="2730">2730</a>
+<a href="#2731" id="2731">2731</a>
+<a href="#2732" id="2732">2732</a>
+<a href="#2733" id="2733">2733</a>
+<a href="#2734" id="2734">2734</a>
+<a href="#2735" id="2735">2735</a>
+<a href="#2736" id="2736">2736</a>
+<a href="#2737" id="2737">2737</a>
+<a href="#2738" id="2738">2738</a>
+<a href="#2739" id="2739">2739</a>
+<a href="#2740" id="2740">2740</a>
+<a href="#2741" id="2741">2741</a>
+<a href="#2742" id="2742">2742</a>
+<a href="#2743" id="2743">2743</a>
+<a href="#2744" id="2744">2744</a>
+<a href="#2745" id="2745">2745</a>
+<a href="#2746" id="2746">2746</a>
+<a href="#2747" id="2747">2747</a>
+<a href="#2748" id="2748">2748</a>
+<a href="#2749" id="2749">2749</a>
+<a href="#2750" id="2750">2750</a>
+<a href="#2751" id="2751">2751</a>
+<a href="#2752" id="2752">2752</a>
+<a href="#2753" id="2753">2753</a>
+<a href="#2754" id="2754">2754</a>
+<a href="#2755" id="2755">2755</a>
+<a href="#2756" id="2756">2756</a>
+<a href="#2757" id="2757">2757</a>
+<a href="#2758" id="2758">2758</a>
+<a href="#2759" id="2759">2759</a>
+<a href="#2760" id="2760">2760</a>
+<a href="#2761" id="2761">2761</a>
+<a href="#2762" id="2762">2762</a>
+<a href="#2763" id="2763">2763</a>
+<a href="#2764" id="2764">2764</a>
+<a href="#2765" id="2765">2765</a>
+<a href="#2766" id="2766">2766</a>
+<a href="#2767" id="2767">2767</a>
+<a href="#2768" id="2768">2768</a>
+<a href="#2769" id="2769">2769</a>
 </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
@@ -2615,7 +2789,9 @@
 <span class="kw">use </span>arrow_arith::arity::binary;
 <span class="kw">use </span>arrow_arith::temporal::{date_part, DatePart};
 <span class="kw">use </span>arrow_array::types::Date32Type;
-<span class="kw">use </span>arrow_array::{Array, ArrayRef, Date32Array, Int32Array, TimestampMicrosecondArray};
+<span class="kw">use </span>arrow_array::{
+    Array, ArrayRef, Date32Array, Int32Array, TimestampMicrosecondArray, TimestampNanosecondArray,
+};
 <span class="kw">use </span>arrow_schema::{DataType, TimeUnit};
 <span class="kw">use </span>chrono::{DateTime, Datelike, Duration};
 
@@ -2629,6 +2805,8 @@
 </span><span class="kw">const </span>UNIX_EPOCH_YEAR: i32 = <span class="number">1970</span>;
 <span class="doccomment">/// One second in micros.
 </span><span class="kw">const </span>MICROS_PER_SECOND: i64 = <span class="number">1_000_000</span>;
+<span class="doccomment">/// One second in nanos.
+</span><span class="kw">const </span>NANOS_PER_SECOND: i64 = <span class="number">1_000_000_000</span>;
 
 <span class="doccomment">/// Extract a date or timestamp year, as years from 1970
 </span><span class="attr">#[derive(Debug)]
@@ -2636,7 +2814,7 @@
 
 <span class="kw">impl </span>Year {
     <span class="attr">#[inline]
-    </span><span class="kw">fn </span>timestamp_to_year(timestamp: i64) -&gt; <span class="prelude-ty">Result</span>&lt;i32&gt; {
+    </span><span class="kw">fn </span>timestamp_to_year_micros(timestamp: i64) -&gt; <span class="prelude-ty">Result</span>&lt;i32&gt; {
         <span class="prelude-val">Ok</span>(DateTime::from_timestamp_micros(timestamp)
             .ok_or_else(|| {
                 Error::new(
@@ -2647,6 +2825,11 @@
             </span>.year()
             - UNIX_EPOCH_YEAR)
     }
+
+    <span class="attr">#[inline]
+    </span><span class="kw">fn </span>timestamp_to_year_nanos(timestamp: i64) -&gt; <span class="prelude-ty">Result</span>&lt;i32&gt; {
+        <span class="prelude-val">Ok</span>(DateTime::from_timestamp_nanos(timestamp).year() - UNIX_EPOCH_YEAR)
+    }
 }
 
 <span class="kw">impl </span>TransformFunction <span class="kw">for </span>Year {
@@ -2667,8 +2850,18 @@
             (PrimitiveType::Date, PrimitiveLiteral::Int(v)) =&gt; {
                 Date32Type::to_naive_date(<span class="kw-2">*</span>v).year() - UNIX_EPOCH_YEAR
             }
-            (PrimitiveType::Timestamp, PrimitiveLiteral::Long(v)) =&gt; <span class="self">Self</span>::timestamp_to_year(<span class="kw-2">*</span>v)<span class="question-mark">?</span>,
-            (PrimitiveType::Timestamptz, PrimitiveLiteral::Long(v)) =&gt; <span class="self">Self</span>::timestamp_to_year(<span class="kw-2">*</span>v)<span class="question-mark">?</span>,
+            (PrimitiveType::Timestamp, PrimitiveLiteral::Long(v)) =&gt; {
+                <span class="self">Self</span>::timestamp_to_year_micros(<span class="kw-2">*</span>v)<span class="question-mark">?
+            </span>}
+            (PrimitiveType::Timestamptz, PrimitiveLiteral::Long(v)) =&gt; {
+                <span class="self">Self</span>::timestamp_to_year_micros(<span class="kw-2">*</span>v)<span class="question-mark">?
+            </span>}
+            (PrimitiveType::TimestampNs, PrimitiveLiteral::Long(v)) =&gt; {
+                <span class="self">Self</span>::timestamp_to_year_nanos(<span class="kw-2">*</span>v)<span class="question-mark">?
+            </span>}
+            (PrimitiveType::TimestamptzNs, PrimitiveLiteral::Long(v)) =&gt; {
+                <span class="self">Self</span>::timestamp_to_year_nanos(<span class="kw-2">*</span>v)<span class="question-mark">?
+            </span>}
             <span class="kw">_ </span>=&gt; {
                 <span class="kw">return </span><span class="prelude-val">Err</span>(<span class="kw">crate</span>::Error::new(
                     <span class="kw">crate</span>::ErrorKind::FeatureUnsupported,
@@ -2689,7 +2882,7 @@
 
 <span class="kw">impl </span>Month {
     <span class="attr">#[inline]
-    </span><span class="kw">fn </span>timestamp_to_month(timestamp: i64) -&gt; <span class="prelude-ty">Result</span>&lt;i32&gt; {
+    </span><span class="kw">fn </span>timestamp_to_month_micros(timestamp: i64) -&gt; <span class="prelude-ty">Result</span>&lt;i32&gt; {
         <span class="comment">// date: aaaa-aa-aa
         // unix epoch date: 1970-01-01
         // if date &gt; unix epoch date, delta month = (aa - 1) + 12 * (aaaa-1970)
@@ -2709,6 +2902,22 @@
             <span class="prelude-val">Ok</span>(-delta)
         }
     }
+
+    <span class="attr">#[inline]
+    </span><span class="kw">fn </span>timestamp_to_month_nanos(timestamp: i64) -&gt; <span class="prelude-ty">Result</span>&lt;i32&gt; {
+        <span class="comment">// date: aaaa-aa-aa
+        // unix epoch date: 1970-01-01
+        // if date &gt; unix epoch date, delta month = (aa - 1) + 12 * (aaaa-1970)
+        // if date &lt; unix epoch date, delta month = (12 - (aa - 1)) + 12 * (1970-aaaa-1)
+        </span><span class="kw">let </span>date = DateTime::from_timestamp_nanos(timestamp);
+        <span class="kw">let </span>unix_epoch_date = DateTime::from_timestamp_nanos(<span class="number">0</span>);
+        <span class="kw">if </span>date &gt; unix_epoch_date {
+            <span class="prelude-val">Ok</span>((date.month0() <span class="kw">as </span>i32) + <span class="number">12 </span>* (date.year() - UNIX_EPOCH_YEAR))
+        } <span class="kw">else </span>{
+            <span class="kw">let </span>delta = (<span class="number">12 </span>- date.month0() <span class="kw">as </span>i32) + <span class="number">12 </span>* (UNIX_EPOCH_YEAR - date.year() - <span class="number">1</span>);
+            <span class="prelude-val">Ok</span>(-delta)
+        }
+    }
 }
 
 <span class="kw">impl </span>TransformFunction <span class="kw">for </span>Month {
@@ -2739,9 +2948,17 @@
                 (Date32Type::to_naive_date(<span class="kw-2">*</span>v).year() - UNIX_EPOCH_YEAR) * <span class="number">12
                     </span>+ Date32Type::to_naive_date(<span class="kw-2">*</span>v).month0() <span class="kw">as </span>i32
             }
-            (PrimitiveType::Timestamp, PrimitiveLiteral::Long(v)) =&gt; <span class="self">Self</span>::timestamp_to_month(<span class="kw-2">*</span>v)<span class="question-mark">?</span>,
+            (PrimitiveType::Timestamp, PrimitiveLiteral::Long(v)) =&gt; {
+                <span class="self">Self</span>::timestamp_to_month_micros(<span class="kw-2">*</span>v)<span class="question-mark">?
+            </span>}
             (PrimitiveType::Timestamptz, PrimitiveLiteral::Long(v)) =&gt; {
-                <span class="self">Self</span>::timestamp_to_month(<span class="kw-2">*</span>v)<span class="question-mark">?
+                <span class="self">Self</span>::timestamp_to_month_micros(<span class="kw-2">*</span>v)<span class="question-mark">?
+            </span>}
+            (PrimitiveType::TimestampNs, PrimitiveLiteral::Long(v)) =&gt; {
+                <span class="self">Self</span>::timestamp_to_month_nanos(<span class="kw-2">*</span>v)<span class="question-mark">?
+            </span>}
+            (PrimitiveType::TimestamptzNs, PrimitiveLiteral::Long(v)) =&gt; {
+                <span class="self">Self</span>::timestamp_to_month_nanos(<span class="kw-2">*</span>v)<span class="question-mark">?
             </span>}
             <span class="kw">_ </span>=&gt; {
                 <span class="kw">return </span><span class="prelude-val">Err</span>(<span class="kw">crate</span>::Error::new(
@@ -2791,6 +3008,35 @@
 
         <span class="prelude-val">Ok</span>(days)
     }
+
+    <span class="kw">fn </span>day_timestamp_nano(v: i64) -&gt; <span class="prelude-ty">Result</span>&lt;i32&gt; {
+        <span class="kw">let </span>secs = v / NANOS_PER_SECOND;
+
+        <span class="kw">let </span>(nanos, offset) = <span class="kw">if </span>v &gt;= <span class="number">0 </span>{
+            <span class="kw">let </span>nanos = (v.rem_euclid(NANOS_PER_SECOND)) <span class="kw">as </span>u32;
+            <span class="kw">let </span>offset = <span class="number">0i64</span>;
+            (nanos, offset)
+        } <span class="kw">else </span>{
+            <span class="kw">let </span>v = v + <span class="number">1</span>;
+            <span class="kw">let </span>nanos = (v.rem_euclid(NANOS_PER_SECOND)) <span class="kw">as </span>u32;
+            <span class="kw">let </span>offset = <span class="number">1i64</span>;
+            (nanos, offset)
+        };
+
+        <span class="kw">let </span>delta = Duration::new(secs, nanos).ok_or_else(|| {
+            Error::new(
+                ErrorKind::DataInvalid,
+                <span class="macro">format!</span>(
+                    <span class="string">"Failed to create 'TimeDelta' from seconds {} and nanos {}"</span>,
+                    secs, nanos
+                ),
+            )
+        })<span class="question-mark">?</span>;
+
+        <span class="kw">let </span>days = (delta.num_days() - offset) <span class="kw">as </span>i32;
+
+        <span class="prelude-val">Ok</span>(days)
+    }
 }
 
 <span class="kw">impl </span>TransformFunction <span class="kw">for </span>Day {
@@ -2801,6 +3047,11 @@
                 .downcast_ref::&lt;TimestampMicrosecondArray&gt;()
                 .unwrap()
                 .try_unary(|v| -&gt; <span class="prelude-ty">Result</span>&lt;i32&gt; { <span class="self">Self</span>::day_timestamp_micro(v) })<span class="question-mark">?</span>,
+            DataType::Timestamp(TimeUnit::Nanosecond, <span class="kw">_</span>) =&gt; input
+                .as_any()
+                .downcast_ref::&lt;TimestampNanosecondArray&gt;()
+                .unwrap()
+                .try_unary(|v| -&gt; <span class="prelude-ty">Result</span>&lt;i32&gt; { <span class="self">Self</span>::day_timestamp_nano(v) })<span class="question-mark">?</span>,
             DataType::Date32 =&gt; input
                 .as_any()
                 .downcast_ref::&lt;Date32Array&gt;()
@@ -2826,6 +3077,12 @@
             (PrimitiveType::Timestamptz, PrimitiveLiteral::Long(v)) =&gt; {
                 <span class="self">Self</span>::day_timestamp_micro(<span class="kw-2">*</span>v)<span class="question-mark">?
             </span>}
+            (PrimitiveType::TimestampNs, PrimitiveLiteral::Long(v)) =&gt; {
+                <span class="self">Self</span>::day_timestamp_nano(<span class="kw-2">*</span>v)<span class="question-mark">?
+            </span>}
+            (PrimitiveType::TimestamptzNs, PrimitiveLiteral::Long(v)) =&gt; {
+                <span class="self">Self</span>::day_timestamp_nano(<span class="kw-2">*</span>v)<span class="question-mark">?
+            </span>}
             <span class="kw">_ </span>=&gt; {
                 <span class="kw">return </span><span class="prelude-val">Err</span>(<span class="kw">crate</span>::Error::new(
                     <span class="kw">crate</span>::ErrorKind::FeatureUnsupported,
@@ -2849,6 +3106,11 @@
     </span><span class="kw">fn </span>hour_timestamp_micro(v: i64) -&gt; i32 {
         (v <span class="kw">as </span>f64 / <span class="number">1000.0 </span>/ <span class="number">1000.0 </span>* HOUR_PER_SECOND) <span class="kw">as </span>i32
     }
+
+    <span class="attr">#[inline]
+    </span><span class="kw">fn </span>hour_timestamp_nano(v: i64) -&gt; i32 {
+        (v <span class="kw">as </span>f64 / <span class="number">1_000_000.0 </span>/ <span class="number">1000.0 </span>* HOUR_PER_SECOND) <span class="kw">as </span>i32
+    }
 }
 
 <span class="kw">impl </span>TransformFunction <span class="kw">for </span>Hour {
@@ -2878,6 +3140,12 @@
             (PrimitiveType::Timestamptz, PrimitiveLiteral::Long(v)) =&gt; {
                 <span class="self">Self</span>::hour_timestamp_micro(<span class="kw-2">*</span>v)
             }
+            (PrimitiveType::TimestampNs, PrimitiveLiteral::Long(v)) =&gt; {
+                <span class="self">Self</span>::hour_timestamp_nano(<span class="kw-2">*</span>v)
+            }
+            (PrimitiveType::TimestamptzNs, PrimitiveLiteral::Long(v)) =&gt; {
+                <span class="self">Self</span>::hour_timestamp_nano(<span class="kw-2">*</span>v)
+            }
             <span class="kw">_ </span>=&gt; {
                 <span class="kw">return </span><span class="prelude-val">Err</span>(<span class="kw">crate</span>::Error::new(
                     <span class="kw">crate</span>::ErrorKind::FeatureUnsupported,
@@ -2902,7 +3170,7 @@
     <span class="kw">use </span><span class="kw">crate</span>::expr::PredicateOperator;
     <span class="kw">use </span><span class="kw">crate</span>::spec::PrimitiveType::{
         Binary, Date, Decimal, Fixed, Int, Long, String <span class="kw">as </span>StringType, Time, Timestamp,
-        Timestamptz, Uuid,
+        TimestampNs, Timestamptz, TimestamptzNs, Uuid,
     };
     <span class="kw">use </span><span class="kw">crate</span>::spec::Type::{Primitive, Struct};
     <span class="kw">use </span><span class="kw">crate</span>::spec::{Datum, NestedField, PrimitiveType, StructType, Transform, Type};
@@ -2945,6 +3213,8 @@
                 (Primitive(Time), <span class="prelude-val">None</span>),
                 (Primitive(Timestamp), <span class="prelude-val">Some</span>(Primitive(Date))),
                 (Primitive(Timestamptz), <span class="prelude-val">Some</span>(Primitive(Date))),
+                (Primitive(TimestampNs), <span class="prelude-val">Some</span>(Primitive(Date))),
+                (Primitive(TimestamptzNs), <span class="prelude-val">Some</span>(Primitive(Date))),
                 (
                     Struct(StructType::new(<span class="macro">vec!</span>[NestedField::optional(
                         <span class="number">1</span>,
@@ -2995,6 +3265,8 @@
                 (Primitive(Time), <span class="prelude-val">None</span>),
                 (Primitive(Timestamp), <span class="prelude-val">Some</span>(Primitive(Date))),
                 (Primitive(Timestamptz), <span class="prelude-val">Some</span>(Primitive(Date))),
+                (Primitive(TimestampNs), <span class="prelude-val">Some</span>(Primitive(Date))),
+                (Primitive(TimestamptzNs), <span class="prelude-val">Some</span>(Primitive(Date))),
                 (
                     Struct(StructType::new(<span class="macro">vec!</span>[NestedField::optional(
                         <span class="number">1</span>,
@@ -3045,6 +3317,8 @@
                 (Primitive(Time), <span class="prelude-val">None</span>),
                 (Primitive(Timestamp), <span class="prelude-val">Some</span>(Primitive(Date))),
                 (Primitive(Timestamptz), <span class="prelude-val">Some</span>(Primitive(Date))),
+                (Primitive(TimestampNs), <span class="prelude-val">Some</span>(Primitive(Date))),
+                (Primitive(TimestamptzNs), <span class="prelude-val">Some</span>(Primitive(Date))),
                 (
                     Struct(StructType::new(<span class="macro">vec!</span>[NestedField::optional(
                         <span class="number">1</span>,
@@ -3095,6 +3369,8 @@
                 (Primitive(Time), <span class="prelude-val">None</span>),
                 (Primitive(Timestamp), <span class="prelude-val">Some</span>(Primitive(Int))),
                 (Primitive(Timestamptz), <span class="prelude-val">Some</span>(Primitive(Int))),
+                (Primitive(TimestampNs), <span class="prelude-val">Some</span>(Primitive(Int))),
+                (Primitive(TimestamptzNs), <span class="prelude-val">Some</span>(Primitive(Int))),
                 (
                     Struct(StructType::new(<span class="macro">vec!</span>[NestedField::optional(
                         <span class="number">1</span>,
@@ -4918,6 +5194,50 @@
         <span class="macro">assert_eq!</span>(res, expect);
     }
 
+    <span class="kw">fn </span>test_timestamp_ns_and_tz_transform(
+        time: <span class="kw-2">&amp;</span>str,
+        transform: <span class="kw-2">&amp;</span>BoxedTransformFunction,
+        expect: Datum,
+    ) {
+        <span class="kw">let </span>timestamp_ns = Datum::timestamp_nanos(
+            NaiveDateTime::parse_from_str(time, <span class="string">"%Y-%m-%d %H:%M:%S.%f"</span>)
+                .unwrap()
+                .and_utc()
+                .timestamp_nanos_opt()
+                .unwrap(),
+        );
+        <span class="kw">let </span>timestamptz_ns = Datum::timestamptz_nanos(
+            NaiveDateTime::parse_from_str(time, <span class="string">"%Y-%m-%d %H:%M:%S.%f"</span>)
+                .unwrap()
+                .and_utc()
+                .timestamp_nanos_opt()
+                .unwrap(),
+        );
+        <span class="kw">let </span>res = transform.transform_literal(<span class="kw-2">&amp;</span>timestamp_ns).unwrap().unwrap();
+        <span class="macro">assert_eq!</span>(res, expect);
+        <span class="kw">let </span>res = transform
+            .transform_literal(<span class="kw-2">&amp;</span>timestamptz_ns)
+            .unwrap()
+            .unwrap();
+        <span class="macro">assert_eq!</span>(res, expect);
+    }
+
+    <span class="kw">fn </span>test_timestamp_ns_and_tz_transform_using_i64(
+        time: i64,
+        transform: <span class="kw-2">&amp;</span>BoxedTransformFunction,
+        expect: Datum,
+    ) {
+        <span class="kw">let </span>timestamp_ns = Datum::timestamp_nanos(time);
+        <span class="kw">let </span>timestamptz_ns = Datum::timestamptz_nanos(time);
+        <span class="kw">let </span>res = transform.transform_literal(<span class="kw-2">&amp;</span>timestamp_ns).unwrap().unwrap();
+        <span class="macro">assert_eq!</span>(res, expect);
+        <span class="kw">let </span>res = transform
+            .transform_literal(<span class="kw-2">&amp;</span>timestamptz_ns)
+            .unwrap()
+            .unwrap();
+        <span class="macro">assert_eq!</span>(res, expect);
+    }
+
     <span class="attr">#[test]
     </span><span class="kw">fn </span>test_transform_year_literal() {
         <span class="kw">let </span>year = Box::new(<span class="kw">super</span>::Year) <span class="kw">as </span>BoxedTransformFunction;
@@ -4933,6 +5253,14 @@
             Datum::int(<span class="number">1970 </span>- <span class="kw">super</span>::UNIX_EPOCH_YEAR),
         );
         test_timestamp_and_tz_transform(<span class="string">"1969-01-01 00:00:00.00"</span>, <span class="kw-2">&amp;</span>year, Datum::int(-<span class="number">1</span>));
+
+        <span class="comment">// Test TimestampNanosecond
+        </span>test_timestamp_ns_and_tz_transform_using_i64(
+            <span class="number">186280000000</span>,
+            <span class="kw-2">&amp;</span>year,
+            Datum::int(<span class="number">1970 </span>- <span class="kw">super</span>::UNIX_EPOCH_YEAR),
+        );
+        test_timestamp_ns_and_tz_transform(<span class="string">"1969-01-01 00:00:00.00"</span>, <span class="kw-2">&amp;</span>year, Datum::int(-<span class="number">1</span>));
     }
 
     <span class="attr">#[test]
@@ -5027,6 +5355,17 @@
         test_timestamp_and_tz_transform(<span class="string">"2017-12-01 00:00:00.00"</span>, <span class="kw-2">&amp;</span>month, Datum::int(<span class="number">575</span>));
         test_timestamp_and_tz_transform(<span class="string">"1970-01-01 00:00:00.00"</span>, <span class="kw-2">&amp;</span>month, Datum::int(<span class="number">0</span>));
         test_timestamp_and_tz_transform(<span class="string">"1969-12-31 00:00:00.00"</span>, <span class="kw-2">&amp;</span>month, Datum::int(-<span class="number">1</span>));
+
+        <span class="comment">// Test TimestampNanosecond
+        </span>test_timestamp_ns_and_tz_transform_using_i64(
+            <span class="number">186280000000</span>,
+            <span class="kw-2">&amp;</span>month,
+            Datum::int((<span class="number">1970 </span>- <span class="kw">super</span>::UNIX_EPOCH_YEAR) * <span class="number">12</span>),
+        );
+        test_timestamp_ns_and_tz_transform(<span class="string">"1969-12-01 23:00:00.00"</span>, <span class="kw-2">&amp;</span>month, Datum::int(-<span class="number">1</span>));
+        test_timestamp_ns_and_tz_transform(<span class="string">"2017-12-01 00:00:00.00"</span>, <span class="kw-2">&amp;</span>month, Datum::int(<span class="number">575</span>));
+        test_timestamp_ns_and_tz_transform(<span class="string">"1970-01-01 00:00:00.00"</span>, <span class="kw-2">&amp;</span>month, Datum::int(<span class="number">0</span>));
+        test_timestamp_ns_and_tz_transform(<span class="string">"1969-12-31 00:00:00.00"</span>, <span class="kw-2">&amp;</span>month, Datum::int(-<span class="number">1</span>));
     }
 
     <span class="attr">#[test]
@@ -5118,6 +5457,11 @@
         </span>test_timestamp_and_tz_transform_using_i64(<span class="number">1512151975038194</span>, <span class="kw-2">&amp;</span>day, Datum::int(<span class="number">17501</span>));
         test_timestamp_and_tz_transform_using_i64(-<span class="number">115200000000</span>, <span class="kw-2">&amp;</span>day, Datum::int(-<span class="number">2</span>));
         test_timestamp_and_tz_transform(<span class="string">"2017-12-01 10:30:42.123"</span>, <span class="kw-2">&amp;</span>day, Datum::int(<span class="number">17501</span>));
+
+        <span class="comment">// Test TimestampNanosecond
+        </span>test_timestamp_ns_and_tz_transform_using_i64(<span class="number">1512151975038194</span>, <span class="kw-2">&amp;</span>day, Datum::int(<span class="number">17</span>));
+        test_timestamp_ns_and_tz_transform_using_i64(-<span class="number">115200000000</span>, <span class="kw-2">&amp;</span>day, Datum::int(-<span class="number">1</span>));
+        test_timestamp_ns_and_tz_transform(<span class="string">"2017-12-01 10:30:42.123"</span>, <span class="kw-2">&amp;</span>day, Datum::int(<span class="number">17501</span>));
     }
 
     <span class="attr">#[test]
@@ -5186,6 +5530,10 @@
         <span class="comment">// Test TimestampMicrosecond
         </span>test_timestamp_and_tz_transform(<span class="string">"2017-12-01 18:00:00.00"</span>, <span class="kw-2">&amp;</span>hour, Datum::int(<span class="number">420042</span>));
         test_timestamp_and_tz_transform(<span class="string">"1969-12-31 23:00:00.00"</span>, <span class="kw-2">&amp;</span>hour, Datum::int(-<span class="number">1</span>));
+
+        <span class="comment">// Test TimestampNanosecond
+        </span>test_timestamp_ns_and_tz_transform(<span class="string">"2017-12-01 18:00:00.00"</span>, <span class="kw-2">&amp;</span>hour, Datum::int(<span class="number">420042</span>));
+        test_timestamp_ns_and_tz_transform(<span class="string">"1969-12-31 23:00:00.00"</span>, <span class="kw-2">&amp;</span>hour, Datum::int(-<span class="number">1</span>));
     }
 }
 </code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/api/src/iceberg/transform/truncate.rs.html b/api/src/iceberg/transform/truncate.rs.html
index a0f9b6b..06cb3f7 100644
--- a/api/src/iceberg/transform/truncate.rs.html
+++ b/api/src/iceberg/transform/truncate.rs.html
@@ -822,6 +822,8 @@
 <a href="#822" id="822">822</a>
 <a href="#823" id="823">823</a>
 <a href="#824" id="824">824</a>
+<a href="#825" id="825">825</a>
+<a href="#826" id="826">826</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
@@ -998,7 +1000,7 @@
     <span class="kw">use </span><span class="kw">crate</span>::expr::PredicateOperator;
     <span class="kw">use </span><span class="kw">crate</span>::spec::PrimitiveType::{
         Binary, Date, Decimal, Fixed, Int, Long, String <span class="kw">as </span>StringType, Time, Timestamp,
-        Timestamptz, Uuid,
+        TimestampNs, Timestamptz, TimestamptzNs, Uuid,
     };
     <span class="kw">use </span><span class="kw">crate</span>::spec::Type::{Primitive, Struct};
     <span class="kw">use </span><span class="kw">crate</span>::spec::{Datum, NestedField, PrimitiveType, StructType, Transform, Type};
@@ -1043,6 +1045,8 @@
                 (Primitive(Time), <span class="prelude-val">None</span>),
                 (Primitive(Timestamp), <span class="prelude-val">None</span>),
                 (Primitive(Timestamptz), <span class="prelude-val">None</span>),
+                (Primitive(TimestampNs), <span class="prelude-val">None</span>),
+                (Primitive(TimestamptzNs), <span class="prelude-val">None</span>),
                 (
                     Struct(StructType::new(<span class="macro">vec!</span>[NestedField::optional(
                         <span class="number">1</span>,
diff --git a/api/src/iceberg/transform/void.rs.html b/api/src/iceberg/transform/void.rs.html
index adf9013..f3b6697 100644
--- a/api/src/iceberg/transform/void.rs.html
+++ b/api/src/iceberg/transform/void.rs.html
@@ -152,6 +152,8 @@
 <a href="#152" id="152">152</a>
 <a href="#153" id="153">153</a>
 <a href="#154" id="154">154</a>
+<a href="#155" id="155">155</a>
+<a href="#156" id="156">156</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
@@ -191,7 +193,7 @@
 </span><span class="kw">mod </span>test {
     <span class="kw">use </span><span class="kw">crate</span>::spec::PrimitiveType::{
         Binary, Date, Decimal, Fixed, Int, Long, String <span class="kw">as </span>StringType, Time, Timestamp,
-        Timestamptz, Uuid,
+        TimestampNs, Timestamptz, TimestamptzNs, Uuid,
     };
     <span class="kw">use </span><span class="kw">crate</span>::spec::Type::{Primitive, Struct};
     <span class="kw">use </span><span class="kw">crate</span>::spec::{NestedField, StructType, Transform};
@@ -235,6 +237,8 @@
                 (Primitive(Time), <span class="prelude-val">Some</span>(Primitive(Time))),
                 (Primitive(Timestamp), <span class="prelude-val">Some</span>(Primitive(Timestamp))),
                 (Primitive(Timestamptz), <span class="prelude-val">Some</span>(Primitive(Timestamptz))),
+                (Primitive(TimestampNs), <span class="prelude-val">Some</span>(Primitive(TimestampNs))),
+                (Primitive(TimestamptzNs), <span class="prelude-val">Some</span>(Primitive(TimestamptzNs))),
                 (
                     Struct(StructType::new(<span class="macro">vec!</span>[NestedField::optional(
                         <span class="number">1</span>,
diff --git a/api/src/iceberg/writer/file_writer/parquet_writer.rs.html b/api/src/iceberg/writer/file_writer/parquet_writer.rs.html
index 006eb46..df50880 100644
--- a/api/src/iceberg/writer/file_writer/parquet_writer.rs.html
+++ b/api/src/iceberg/writer/file_writer/parquet_writer.rs.html
@@ -1225,6 +1225,39 @@
 <a href="#1225" id="1225">1225</a>
 <a href="#1226" id="1226">1226</a>
 <a href="#1227" id="1227">1227</a>
+<a href="#1228" id="1228">1228</a>
+<a href="#1229" id="1229">1229</a>
+<a href="#1230" id="1230">1230</a>
+<a href="#1231" id="1231">1231</a>
+<a href="#1232" id="1232">1232</a>
+<a href="#1233" id="1233">1233</a>
+<a href="#1234" id="1234">1234</a>
+<a href="#1235" id="1235">1235</a>
+<a href="#1236" id="1236">1236</a>
+<a href="#1237" id="1237">1237</a>
+<a href="#1238" id="1238">1238</a>
+<a href="#1239" id="1239">1239</a>
+<a href="#1240" id="1240">1240</a>
+<a href="#1241" id="1241">1241</a>
+<a href="#1242" id="1242">1242</a>
+<a href="#1243" id="1243">1243</a>
+<a href="#1244" id="1244">1244</a>
+<a href="#1245" id="1245">1245</a>
+<a href="#1246" id="1246">1246</a>
+<a href="#1247" id="1247">1247</a>
+<a href="#1248" id="1248">1248</a>
+<a href="#1249" id="1249">1249</a>
+<a href="#1250" id="1250">1250</a>
+<a href="#1251" id="1251">1251</a>
+<a href="#1252" id="1252">1252</a>
+<a href="#1253" id="1253">1253</a>
+<a href="#1254" id="1254">1254</a>
+<a href="#1255" id="1255">1255</a>
+<a href="#1256" id="1256">1256</a>
+<a href="#1257" id="1257">1257</a>
+<a href="#1258" id="1258">1258</a>
+<a href="#1259" id="1259">1259</a>
+<a href="#1260" id="1260">1260</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
@@ -1564,6 +1597,14 @@
                 <span class="kw">let </span>convert_func = |v: i64| <span class="prelude-ty">Result</span>::&lt;Datum&gt;::Ok(Datum::timestamptz_micros(v));
                 <span class="self">self</span>.update_state::&lt;Int64Type&gt;(field_id, <span class="kw-2">&amp;</span>stat, convert_func)
             }
+            (PrimitiveType::TimestampNs, Statistics::Int64(stat)) =&gt; {
+                <span class="kw">let </span>convert_func = |v: i64| <span class="prelude-ty">Result</span>::&lt;Datum&gt;::Ok(Datum::timestamp_nanos(v));
+                <span class="self">self</span>.update_state::&lt;Int64Type&gt;(field_id, <span class="kw-2">&amp;</span>stat, convert_func)
+            }
+            (PrimitiveType::TimestamptzNs, Statistics::Int64(stat)) =&gt; {
+                <span class="kw">let </span>convert_func = |v: i64| <span class="prelude-ty">Result</span>::&lt;Datum&gt;::Ok(Datum::timestamptz_nanos(v));
+                <span class="self">self</span>.update_state::&lt;Int64Type&gt;(field_id, <span class="kw-2">&amp;</span>stat, convert_func)
+            }
             (
                 PrimitiveType::Decimal {
                     precision: <span class="kw">_</span>,
@@ -1822,7 +1863,7 @@
     <span class="kw">use </span>anyhow::Result;
     <span class="kw">use </span>arrow_array::types::Int64Type;
     <span class="kw">use </span>arrow_array::{
-        ArrayRef, BooleanArray, Int32Array, Int64Array, ListArray, RecordBatch, StructArray,
+        Array, ArrayRef, BooleanArray, Int32Array, Int64Array, ListArray, RecordBatch, StructArray,
     };
     <span class="kw">use </span>arrow_schema::{DataType, SchemaRef <span class="kw">as </span>ArrowSchemaRef};
     <span class="kw">use </span>arrow_select::concat::concat_batches;
@@ -1859,6 +1900,18 @@
                 .into(),
                 NestedField::optional(
                     <span class="number">11</span>,
+                    <span class="string">"timestamp_ns"</span>,
+                    Type::Primitive(PrimitiveType::TimestampNs),
+                )
+                .into(),
+                NestedField::optional(
+                    <span class="number">12</span>,
+                    <span class="string">"timestamptz_ns"</span>,
+                    Type::Primitive(PrimitiveType::TimestamptzNs),
+                )
+                .into(),
+                NestedField::optional(
+                    <span class="number">13</span>,
                     <span class="string">"decimal"</span>,
                     Type::Primitive(PrimitiveType::Decimal {
                         precision: <span class="number">10</span>,
@@ -1866,8 +1919,8 @@
                     }),
                 )
                 .into(),
-                NestedField::optional(<span class="number">12</span>, <span class="string">"uuid"</span>, Type::Primitive(PrimitiveType::Uuid)).into(),
-                NestedField::optional(<span class="number">13</span>, <span class="string">"fixed"</span>, Type::Primitive(PrimitiveType::Fixed(<span class="number">10</span>)))
+                NestedField::optional(<span class="number">14</span>, <span class="string">"uuid"</span>, Type::Primitive(PrimitiveType::Uuid)).into(),
+                NestedField::optional(<span class="number">15</span>, <span class="string">"fixed"</span>, Type::Primitive(PrimitiveType::Fixed(<span class="number">10</span>)))
                     .into(),
             ])
             .build()
@@ -2318,12 +2371,22 @@
             arrow_array::TimestampMicrosecondArray::from(<span class="macro">vec!</span>[<span class="prelude-val">Some</span>(<span class="number">0</span>), <span class="prelude-val">Some</span>(<span class="number">1</span>), <span class="prelude-val">None</span>, <span class="prelude-val">Some</span>(<span class="number">3</span>)])
                 .with_timezone_utc(),
         ) <span class="kw">as </span>ArrayRef;
-        <span class="kw">let </span>col11 = Arc::new(
+        <span class="kw">let </span>col11 = Arc::new(arrow_array::TimestampNanosecondArray::from(<span class="macro">vec!</span>[
+            <span class="prelude-val">Some</span>(<span class="number">0</span>),
+            <span class="prelude-val">Some</span>(<span class="number">1</span>),
+            <span class="prelude-val">None</span>,
+            <span class="prelude-val">Some</span>(<span class="number">3</span>),
+        ])) <span class="kw">as </span>ArrayRef;
+        <span class="kw">let </span>col12 = Arc::new(
+            arrow_array::TimestampNanosecondArray::from(<span class="macro">vec!</span>[<span class="prelude-val">Some</span>(<span class="number">0</span>), <span class="prelude-val">Some</span>(<span class="number">1</span>), <span class="prelude-val">None</span>, <span class="prelude-val">Some</span>(<span class="number">3</span>)])
+                .with_timezone_utc(),
+        ) <span class="kw">as </span>ArrayRef;
+        <span class="kw">let </span>col13 = Arc::new(
             arrow_array::Decimal128Array::from(<span class="macro">vec!</span>[<span class="prelude-val">Some</span>(<span class="number">1</span>), <span class="prelude-val">Some</span>(<span class="number">2</span>), <span class="prelude-val">None</span>, <span class="prelude-val">Some</span>(<span class="number">100</span>)])
                 .with_precision_and_scale(<span class="number">10</span>, <span class="number">5</span>)
                 .unwrap(),
         ) <span class="kw">as </span>ArrayRef;
-        <span class="kw">let </span>col12 = Arc::new(
+        <span class="kw">let </span>col14 = Arc::new(
             arrow_array::FixedSizeBinaryArray::try_from_sparse_iter_with_size(
                 <span class="macro">vec!</span>[
                     <span class="prelude-val">Some</span>(Uuid::from_u128(<span class="number">0</span>).as_bytes().to_vec()),
@@ -2336,7 +2399,7 @@
             )
             .unwrap(),
         ) <span class="kw">as </span>ArrayRef;
-        <span class="kw">let </span>col13 = Arc::new(
+        <span class="kw">let </span>col15 = Arc::new(
             arrow_array::FixedSizeBinaryArray::try_from_sparse_iter_with_size(
                 <span class="macro">vec!</span>[
                     <span class="prelude-val">Some</span>(<span class="macro">vec!</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">7</span>, <span class="number">8</span>, <span class="number">9</span>, <span class="number">10</span>]),
@@ -2351,6 +2414,7 @@
         ) <span class="kw">as </span>ArrayRef;
         <span class="kw">let </span>to_write = RecordBatch::try_new(arrow_schema.clone(), <span class="macro">vec!</span>[
             col0, col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12, col13,
+            col14, col15,
         ])
         .unwrap();
 
@@ -2398,8 +2462,10 @@
                 (<span class="number">8</span>, Datum::time_micros(<span class="number">0</span>).unwrap()),
                 (<span class="number">9</span>, Datum::timestamp_micros(<span class="number">0</span>)),
                 (<span class="number">10</span>, Datum::timestamptz_micros(<span class="number">0</span>)),
+                (<span class="number">11</span>, Datum::timestamp_nanos(<span class="number">0</span>)),
+                (<span class="number">12</span>, Datum::timestamptz_nanos(<span class="number">0</span>)),
                 (
-                    <span class="number">11</span>,
+                    <span class="number">13</span>,
                     Datum::new(
                         PrimitiveType::Decimal {
                             precision: <span class="number">10</span>,
@@ -2408,10 +2474,8 @@
                         PrimitiveLiteral::Int128(<span class="number">1</span>)
                     )
                 ),
-                (<span class="number">12</span>, Datum::uuid(Uuid::from_u128(<span class="number">0</span>))),
-                (<span class="number">13</span>, Datum::fixed(<span class="macro">vec!</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">7</span>, <span class="number">8</span>, <span class="number">9</span>, <span class="number">10</span>])),
-                (<span class="number">12</span>, Datum::uuid(Uuid::from_u128(<span class="number">0</span>))),
-                (<span class="number">13</span>, Datum::fixed(<span class="macro">vec!</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">7</span>, <span class="number">8</span>, <span class="number">9</span>, <span class="number">10</span>])),
+                (<span class="number">14</span>, Datum::uuid(Uuid::from_u128(<span class="number">0</span>))),
+                (<span class="number">15</span>, Datum::fixed(<span class="macro">vec!</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">7</span>, <span class="number">8</span>, <span class="number">9</span>, <span class="number">10</span>])),
             ])
         );
         <span class="macro">assert_eq!</span>(
@@ -2428,8 +2492,10 @@
                 (<span class="number">8</span>, Datum::time_micros(<span class="number">3</span>).unwrap()),
                 (<span class="number">9</span>, Datum::timestamp_micros(<span class="number">3</span>)),
                 (<span class="number">10</span>, Datum::timestamptz_micros(<span class="number">3</span>)),
+                (<span class="number">11</span>, Datum::timestamp_nanos(<span class="number">3</span>)),
+                (<span class="number">12</span>, Datum::timestamptz_nanos(<span class="number">3</span>)),
                 (
-                    <span class="number">11</span>,
+                    <span class="number">13</span>,
                     Datum::new(
                         PrimitiveType::Decimal {
                             precision: <span class="number">10</span>,
@@ -2438,9 +2504,9 @@
                         PrimitiveLiteral::Int128(<span class="number">100</span>)
                     )
                 ),
-                (<span class="number">12</span>, Datum::uuid(Uuid::from_u128(<span class="number">3</span>))),
+                (<span class="number">14</span>, Datum::uuid(Uuid::from_u128(<span class="number">3</span>))),
                 (
-                    <span class="number">13</span>,
+                    <span class="number">15</span>,
                     Datum::fixed(<span class="macro">vec!</span>[<span class="number">21</span>, <span class="number">22</span>, <span class="number">23</span>, <span class="number">24</span>, <span class="number">25</span>, <span class="number">26</span>, <span class="number">27</span>, <span class="number">28</span>, <span class="number">29</span>, <span class="number">30</span>])
                 ),
             ])
diff --git a/api/src/iceberg_catalog_glue/schema.rs.html b/api/src/iceberg_catalog_glue/schema.rs.html
index d44fb37..3366696 100644
--- a/api/src/iceberg_catalog_glue/schema.rs.html
+++ b/api/src/iceberg_catalog_glue/schema.rs.html
@@ -478,6 +478,8 @@
 <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>
 </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
@@ -644,6 +646,8 @@
             PrimitiveType::Double =&gt; <span class="string">"double"</span>.to_string(),
             PrimitiveType::Date =&gt; <span class="string">"date"</span>.to_string(),
             PrimitiveType::Timestamp =&gt; <span class="string">"timestamp"</span>.to_string(),
+            PrimitiveType::TimestampNs =&gt; <span class="string">"timestamp_ns"</span>.to_string(),
+            PrimitiveType::TimestamptzNs =&gt; <span class="string">"timestamptz_ns"</span>.to_string(),
             PrimitiveType::Time | PrimitiveType::String | PrimitiveType::Uuid =&gt; {
                 <span class="string">"string"</span>.to_string()
             }
diff --git a/api/src/iceberg_catalog_hms/schema.rs.html b/api/src/iceberg_catalog_hms/schema.rs.html
index 9214db2..b9057d0 100644
--- a/api/src/iceberg_catalog_hms/schema.rs.html
+++ b/api/src/iceberg_catalog_hms/schema.rs.html
@@ -456,6 +456,8 @@
 <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>
 </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
@@ -579,6 +581,8 @@
             PrimitiveType::Double =&gt; <span class="string">"double"</span>.to_string(),
             PrimitiveType::Date =&gt; <span class="string">"date"</span>.to_string(),
             PrimitiveType::Timestamp =&gt; <span class="string">"timestamp"</span>.to_string(),
+            PrimitiveType::TimestampNs =&gt; <span class="string">"timestamp_ns"</span>.to_string(),
+            PrimitiveType::TimestamptzNs =&gt; <span class="string">"timestamptz_ns"</span>.to_string(),
             PrimitiveType::Time | PrimitiveType::String | PrimitiveType::Uuid =&gt; {
                 <span class="string">"string"</span>.to_string()
             }