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 9a4c32d5 deploy: ca22eaaf422b5d0e5a360e443bfda6b18301cb35
9a4c32d5 is described below

commit 9a4c32d599b3fd646f0628e16165408ee938ed05
Author: liurenjie1024 <[email protected]>
AuthorDate: Wed Apr 16 12:29:25 2025 +0000

    deploy: ca22eaaf422b5d0e5a360e443bfda6b18301cb35
---
 api/iceberg/all.html                            |   2 +-
 api/iceberg/cache/index.html                    |   2 +
 api/iceberg/cache/sidebar-items.js              |   1 +
 api/iceberg/cache/trait.ObjectCache.html        |  13 +++
 api/iceberg/cache/trait.ObjectCacheProvide.html |  13 +++
 api/iceberg/cache/type.ObjectCacheProvider.html |   2 +
 api/iceberg/index.html                          |   4 +-
 api/iceberg/sidebar-items.js                    |   2 +-
 api/search-index.js                             |   4 +-
 api/search.desc/iceberg/iceberg-desc-0-.js      |   2 +-
 api/src-files.js                                |   4 +-
 api/src/iceberg/cache.rs.html                   | 127 ++++++++++++++++++++++++
 api/src/iceberg/lib.rs.html                     |   4 +-
 api/type.impl/alloc/sync/struct.Arc.js          |   4 +-
 14 files changed, 172 insertions(+), 12 deletions(-)

diff --git a/api/iceberg/all.html b/api/iceberg/all.html
index 05b035b6..68d224fd 100644
--- a/api/iceberg/all.html
+++ b/api/iceberg/all.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="List of 
all items in this crate"><title>List of all items in this 
crate</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-
 [...]
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="List of 
all items in this crate"><title>List of all items in this 
crate</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-
 [...]
\ No newline at end of file
diff --git a/api/iceberg/cache/index.html b/api/iceberg/cache/index.html
new file mode 100644
index 00000000..2cae2a16
--- /dev/null
+++ b/api/iceberg/cache/index.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" content="Cache 
management for Iceberg."><title>iceberg::cache - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8bad
 [...]
+</div></details><h2 id="traits" class="section-header">Traits<a href="#traits" 
class="anchor">§</a></h2><ul class="item-table"><li><div class="item-name"><a 
class="trait" href="trait.ObjectCache.html" title="trait 
iceberg::cache::ObjectCache">Object<wbr>Cache</a></div><div class="desc 
docblock-short">A trait for caching in-memory objects of given 
type.</div></li><li><div class="item-name"><a class="trait" 
href="trait.ObjectCacheProvide.html" title="trait 
iceberg::cache::ObjectCacheProvid [...]
\ No newline at end of file
diff --git a/api/iceberg/cache/sidebar-items.js 
b/api/iceberg/cache/sidebar-items.js
new file mode 100644
index 00000000..922fe810
--- /dev/null
+++ b/api/iceberg/cache/sidebar-items.js
@@ -0,0 +1 @@
+window.SIDEBAR_ITEMS = 
{"trait":["ObjectCache","ObjectCacheProvide"],"type":["ObjectCacheProvider"]};
\ No newline at end of file
diff --git a/api/iceberg/cache/trait.ObjectCache.html 
b/api/iceberg/cache/trait.ObjectCache.html
new file mode 100644
index 00000000..fd57d8af
--- /dev/null
+++ b/api/iceberg/cache/trait.ObjectCache.html
@@ -0,0 +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="A trait 
for caching in-memory objects of given type."><title>ObjectCache in 
iceberg::cache - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-Medium-e1a
 [...]
+    // Required methods
+    fn <a href="#tymethod.get" class="fn">get</a>(&amp;self, key: <a 
class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.reference.html";>&amp;K</a>)
 -&gt; <a class="enum" 
href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html"; 
title="enum core::option::Option">Option</a>&lt;V&gt;;
+<span class="item-spacer"></span>    fn <a href="#tymethod.set" 
class="fn">set</a>(&amp;self, key: K, value: V);
+}</code></pre><details class="toggle top-doc" open><summary 
class="hideme"><span>Expand description</span></summary><div 
class="docblock"><p>A trait for caching in-memory objects of given type.</p>
+<h2 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h2>
+<p>ObjectCache will store deeply nested objects, such as <code>Manifest</code>,
+which contains <code>Schema</code>. Please ensure that the cache stores the
+object in memory as-is, without attempting to serialize it, as
+serialization could be extremely expensive.</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.get" class="method"><a class="src rightside" 
href="../../src/iceberg/cache.rs.html#34">Source</a><h4 class="code-header">fn 
<a href="#tymethod.get" class="fn">get</a>(&amp;self, key: <a class="primitive" 
href="https://doc.rust-lang.org/nightly/std/primitive.refer [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="tymethod.set" class="method"><a class="src rightside" 
href="../../src/iceberg/cache.rs.html#36">Source</a><h4 class="code-header">fn 
<a href="#tymethod.set" class="fn">set</a>(&amp;self, key: K, value: 
V)</h4></section></summary><div class="docblock"><p>Sets an object in the cache 
with the given key and value.</p>
+</div></details></div><h2 id="implementors" 
class="section-header">Implementors<a href="#implementors" 
class="anchor">§</a></h2><div id="implementors-list"></div><script 
src="../../trait.impl/iceberg/cache/trait.ObjectCache.js" 
async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg/cache/trait.ObjectCacheProvide.html 
b/api/iceberg/cache/trait.ObjectCacheProvide.html
new file mode 100644
index 00000000..d2f56f92
--- /dev/null
+++ b/api/iceberg/cache/trait.ObjectCacheProvide.html
@@ -0,0 +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="A trait 
for caching different in-memory objects used by 
iceberg."><title>ObjectCacheProvide in iceberg::cache - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Regular-0fe48ade.woff2,
 [...]
+    // Required methods
+    fn <a href="#tymethod.manifest_cache" 
class="fn">manifest_cache</a>(&amp;self) -&gt; &amp;dyn <a class="trait" 
href="trait.ObjectCache.html" title="trait 
iceberg::cache::ObjectCache">ObjectCache</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html"; 
title="struct alloc::string::String">String</a>, <a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html"; 
title="struct alloc::sync::Arc">Arc</a>&lt;<a class="struct" [...]
+<span class="item-spacer"></span>    fn <a 
href="#tymethod.manifest_list_cache" 
class="fn">manifest_list_cache</a>(&amp;self) -&gt; &amp;dyn <a class="trait" 
href="trait.ObjectCache.html" title="trait 
iceberg::cache::ObjectCache">ObjectCache</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html"; 
title="struct alloc::string::String">String</a>, <a class="struct" 
href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html"; 
title="struct all [...]
+}</code></pre><details class="toggle top-doc" open><summary 
class="hideme"><span>Expand description</span></summary><div 
class="docblock"><p>A trait for caching different in-memory objects used by 
iceberg.</p>
+<h2 id="notes"><a class="doc-anchor" href="#notes">§</a>Notes</h2>
+<p>ObjectCache will store deeply nested objects, such as <code>Manifest</code>,
+which contains <code>Schema</code>. Please ensure that the cache stores the
+object in memory as-is, without attempting to serialize it, as
+serialization could be extremely expensive.</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.manifest_cache" class="method"><a class="src rightside" 
href="../../src/iceberg/cache.rs.html#49">Source</a><h4 class="code-header">fn 
<a href="#tymethod.manifest_cache" class="fn">manifest_cache</a>(&amp;self) 
-&gt; &amp;dyn <a class="trait" href="trait.ObjectCa [...]
+</div></details><details class="toggle method-toggle" open><summary><section 
id="tymethod.manifest_list_cache" class="method"><a class="src rightside" 
href="../../src/iceberg/cache.rs.html#51">Source</a><h4 class="code-header">fn 
<a href="#tymethod.manifest_list_cache" 
class="fn">manifest_list_cache</a>(&amp;self) -&gt; &amp;dyn <a class="trait" 
href="trait.ObjectCache.html" title="trait 
iceberg::cache::ObjectCache">ObjectCache</a>&lt;<a class="struct" 
href="https://doc.rust-lang.org/nig [...]
+</div></details></div><h2 id="implementors" 
class="section-header">Implementors<a href="#implementors" 
class="anchor">§</a></h2><div id="implementors-list"></div><script 
src="../../trait.impl/iceberg/cache/trait.ObjectCacheProvide.js" 
async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg/cache/type.ObjectCacheProvider.html 
b/api/iceberg/cache/type.ObjectCacheProvider.html
new file mode 100644
index 00000000..caf6ac7c
--- /dev/null
+++ b/api/iceberg/cache/type.ObjectCacheProvider.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta 
name="viewport" content="width=device-width, initial-scale=1.0"><meta 
name="generator" content="rustdoc"><meta name="description" 
content="CacheProvider is a type alias for a thread-safe reference-counted 
pointer to a CacheProvide trait object."><title>ObjectCacheProvider in 
iceberg::cache - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.
 [...]
+</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 ObjectCacheProvider { <span class="comment">/* private 
fields */</span> }</code></pre><script 
src="../../type.impl/alloc/sync/struct.Arc.js" 
data-self-path="iceberg::cache::ObjectCacheProvider" 
async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg/index.html b/api/iceberg/index.html
index 6dcbf1ba..9e07e5a5 100644
--- a/api/iceberg/index.html
+++ b/api/iceberg/index.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="Apache 
Iceberg Official Native Rust Implementation"><title>iceberg - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePr
 [...]
+<!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="Apache 
Iceberg Official Native Rust Implementation"><title>iceberg - 
Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePr
 [...]
 <h2 id="examples"><a class="doc-anchor" href="#examples">§</a>Examples</h2><h3 
id="scan-a-table"><a class="doc-anchor" href="#scan-a-table">§</a>Scan A 
Table</h3>
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span 
class="kw">use </span>futures::TryStreamExt;
 <span class="kw">use </span>iceberg::io::{FileIO, FileIOBuilder};
@@ -27,4 +27,4 @@
     </span><span class="kw">let </span>_data: Vec&lt;<span 
class="kw">_</span>&gt; = stream.try_collect().<span 
class="kw">await</span><span class="question-mark">?</span>;
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</div></details><h2 id="modules" class="section-header">Modules<a 
href="#modules" class="anchor">§</a></h2><ul class="item-table"><li><div 
class="item-name"><a class="mod" href="arrow/index.html" title="mod 
iceberg::arrow">arrow</a></div><div class="desc docblock-short">Conversion 
between Iceberg and Arrow schema</div></li><li><div class="item-name"><a 
class="mod" href="expr/index.html" title="mod iceberg::expr">expr</a></div><div 
class="desc docblock-short">This module contains expressi [...]
\ No newline at end of file
+</div></details><h2 id="modules" class="section-header">Modules<a 
href="#modules" class="anchor">§</a></h2><ul class="item-table"><li><div 
class="item-name"><a class="mod" href="arrow/index.html" title="mod 
iceberg::arrow">arrow</a></div><div class="desc docblock-short">Conversion 
between Iceberg and Arrow schema</div></li><li><div class="item-name"><a 
class="mod" href="cache/index.html" title="mod 
iceberg::cache">cache</a></div><div class="desc docblock-short">Cache 
management for Icebe [...]
\ No newline at end of file
diff --git a/api/iceberg/sidebar-items.js b/api/iceberg/sidebar-items.js
index cdac36e2..f1bcd42c 100644
--- a/api/iceberg/sidebar-items.js
+++ b/api/iceberg/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = 
{"enum":["ErrorKind","TableRequirement","TableUpdate"],"macro":["ensure_data_valid"],"mod":["arrow","expr","inspect","io","puffin","scan","spec","table","transaction","transform","writer"],"struct":["Error","Namespace","NamespaceIdent","TableCommit","TableCreation","TableIdent","ViewCreation"],"trait":["Catalog"],"type":["Result"]};
\ No newline at end of file
+window.SIDEBAR_ITEMS = 
{"enum":["ErrorKind","TableRequirement","TableUpdate"],"macro":["ensure_data_valid"],"mod":["arrow","cache","expr","inspect","io","puffin","scan","spec","table","transaction","transform","writer"],"struct":["Error","Namespace","NamespaceIdent","TableCommit","TableCreation","TableIdent","ViewCreation"],"trait":["Catalog"],"type":["Result"]};
\ No newline at end of file
diff --git a/api/search-index.js b/api/search-index.js
index 16a60e71..1b376e99 100644
--- a/api/search-index.js
+++ b/api/search-index.js
@@ -1,4 +1,4 @@
-var searchIndex = new 
Map(JSON.parse('[["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPPPPPIPPPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNCNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNNONOOCMOCOONNNNONCOCMNNNNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFFFFKSRRSNNNNNNNNHHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNMNNNMNMHMN
 [...]
+var searchIndex = new 
Map(JSON.parse('[["iceberg",{"t":"PPPPPKPPPPPFGPPPFFPPPPPPPPPPIPPPPPPPPFFFGGPPPFNCNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNMMOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMQNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNCNNNNNNNNNNNCNMMMOONNNOOONOMNNNNNNONOOCMOCOONNNNONCOCMNNNNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNCOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFFFFKSRRSNNNNNNNNHHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNMNNNMNMHM
 [...]
 if (typeof exports !== 'undefined') exports.searchIndex = searchIndex;
 else if (window.initSearch) window.initSearch(searchIndex);
-//{"start":39,"fragment_lengths":[85249,2348,2291,1821,2127,2098,2233,1414,3389,787,1116,140]}
\ No newline at end of file
+//{"start":39,"fragment_lengths":[85713,2348,2291,1821,2127,2098,2233,1414,3389,787,1116,140]}
\ No newline at end of file
diff --git a/api/search.desc/iceberg/iceberg-desc-0-.js 
b/api/search.desc/iceberg/iceberg-desc-0-.js
index 72cea215..2139446a 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-files.js b/api/src-files.js
index 268dc2da..ad190a65 100644
--- a/api/src-files.js
+++ b/api/src-files.js
@@ -1,3 +1,3 @@
-var srcIndex = new 
Map(JSON.parse('[["iceberg",["",[["arrow",[],["delete_file_manager.rs","mod.rs","nan_val_cnt_visitor.rs","reader.rs","record_batch_projector.rs","record_batch_transformer.rs","schema.rs","value.rs"]],["avro",[],["mod.rs","schema.rs"]],["catalog",[],["mod.rs"]],["expr",[["visitors",[],["bound_predicate_visitor.rs","expression_evaluator.rs","inclusive_metrics_evaluator.rs","inclusive_projection.rs","manifest_evaluator.rs","mod.rs","page_index_evaluator.rs","row_group_met
 [...]
+var srcIndex = new 
Map(JSON.parse('[["iceberg",["",[["arrow",[],["delete_file_manager.rs","mod.rs","nan_val_cnt_visitor.rs","reader.rs","record_batch_projector.rs","record_batch_transformer.rs","schema.rs","value.rs"]],["avro",[],["mod.rs","schema.rs"]],["catalog",[],["mod.rs"]],["expr",[["visitors",[],["bound_predicate_visitor.rs","expression_evaluator.rs","inclusive_metrics_evaluator.rs","inclusive_projection.rs","manifest_evaluator.rs","mod.rs","page_index_evaluator.rs","row_group_met
 [...]
 createSrcSidebar();
-//{"start":36,"fragment_lengths":[1925,91,90,80,80,72,67,48,194,49,63,47]}
\ No newline at end of file
+//{"start":36,"fragment_lengths":[1936,91,90,80,80,72,67,48,194,49,63,47]}
\ No newline at end of file
diff --git a/api/src/iceberg/cache.rs.html b/api/src/iceberg/cache.rs.html
new file mode 100644
index 00000000..86e23c2e
--- /dev/null
+++ b/api/src/iceberg/cache.rs.html
@@ -0,0 +1,127 @@
+<!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="Source of 
the Rust file `crates/iceberg/src/cache.rs`."><title>cache.rs - 
source</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-Medium-e1aa3f0a.woff2,Sourc
 [...]
+<a href="#1" id="1">1</a>
+<a href="#2" id="2">2</a>
+<a href="#3" id="3">3</a>
+<a href="#4" id="4">4</a>
+<a href="#5" id="5">5</a>
+<a href="#6" id="6">6</a>
+<a href="#7" id="7">7</a>
+<a href="#8" id="8">8</a>
+<a href="#9" id="9">9</a>
+<a href="#10" id="10">10</a>
+<a href="#11" id="11">11</a>
+<a href="#12" id="12">12</a>
+<a href="#13" id="13">13</a>
+<a href="#14" id="14">14</a>
+<a href="#15" id="15">15</a>
+<a href="#16" id="16">16</a>
+<a href="#17" id="17">17</a>
+<a href="#18" id="18">18</a>
+<a href="#19" id="19">19</a>
+<a href="#20" id="20">20</a>
+<a href="#21" id="21">21</a>
+<a href="#22" id="22">22</a>
+<a href="#23" id="23">23</a>
+<a href="#24" id="24">24</a>
+<a href="#25" id="25">25</a>
+<a href="#26" id="26">26</a>
+<a href="#27" id="27">27</a>
+<a href="#28" id="28">28</a>
+<a href="#29" id="29">29</a>
+<a href="#30" id="30">30</a>
+<a href="#31" id="31">31</a>
+<a href="#32" id="32">32</a>
+<a href="#33" id="33">33</a>
+<a href="#34" id="34">34</a>
+<a href="#35" id="35">35</a>
+<a href="#36" id="36">36</a>
+<a href="#37" id="37">37</a>
+<a href="#38" id="38">38</a>
+<a href="#39" id="39">39</a>
+<a href="#40" id="40">40</a>
+<a href="#41" id="41">41</a>
+<a href="#42" id="42">42</a>
+<a href="#43" id="43">43</a>
+<a href="#44" id="44">44</a>
+<a href="#45" id="45">45</a>
+<a href="#46" id="46">46</a>
+<a href="#47" id="47">47</a>
+<a href="#48" id="48">48</a>
+<a href="#49" id="49">49</a>
+<a href="#50" id="50">50</a>
+<a href="#51" id="51">51</a>
+<a href="#52" id="52">52</a>
+<a href="#53" id="53">53</a>
+<a href="#54" id="54">54</a>
+<a href="#55" id="55">55</a>
+<a href="#56" id="56">56</a>
+<a href="#57" id="57">57</a>
+<a href="#58" id="58">58</a>
+<a href="#59" id="59">59</a>
+<a href="#60" id="60">60</a>
+<a href="#61" id="61">61</a>
+<a href="#62" id="62">62</a>
+<a href="#63" id="63">63</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
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+</span><span class="doccomment">//! Cache management for Iceberg.
+
+</span><span class="kw">use </span>std::sync::Arc;
+
+<span class="kw">use </span><span class="kw">crate</span>::spec::{Manifest, 
ManifestList};
+
+<span class="doccomment">/// A trait for caching in-memory objects of given 
type.
+///
+/// # Notes
+///
+/// ObjectCache will store deeply nested objects, such as `Manifest`,
+/// which contains `Schema`. Please ensure that the cache stores the
+/// object in memory as-is, without attempting to serialize it, as
+/// serialization could be extremely expensive.
+</span><span class="kw">pub trait </span>ObjectCache&lt;K, V&gt;: Send + Sync {
+    <span class="doccomment">/// Gets an object from the cache by its key.
+    </span><span class="kw">fn </span>get(<span class="kw-2">&amp;</span><span 
class="self">self</span>, key: <span class="kw-2">&amp;</span>K) -&gt; <span 
class="prelude-ty">Option</span>&lt;V&gt;;
+    <span class="doccomment">/// Sets an object in the cache with the given 
key and value.
+    </span><span class="kw">fn </span>set(<span class="kw-2">&amp;</span><span 
class="self">self</span>, key: K, value: V);
+}
+
+<span class="doccomment">/// A trait for caching different in-memory objects 
used by iceberg.
+///
+/// # Notes
+///
+/// ObjectCache will store deeply nested objects, such as `Manifest`,
+/// which contains `Schema`. Please ensure that the cache stores the
+/// object in memory as-is, without attempting to serialize it, as
+/// serialization could be extremely expensive.
+</span><span class="kw">pub trait </span>ObjectCacheProvide: Send + Sync {
+    <span class="doccomment">/// Gets a cache for manifests.
+    </span><span class="kw">fn </span>manifest_cache(<span 
class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span 
class="kw-2">&amp;</span><span class="kw">dyn </span>ObjectCache&lt;String, 
Arc&lt;Manifest&gt;&gt;;
+    <span class="doccomment">/// Gets a cache for manifest lists.
+    </span><span class="kw">fn </span>manifest_list_cache(<span 
class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span 
class="kw-2">&amp;</span><span class="kw">dyn </span>ObjectCache&lt;String, 
Arc&lt;ManifestList&gt;&gt;;
+}
+
+<span class="doccomment">/// CacheProvider is a type alias for a thread-safe 
reference-counted pointer to a CacheProvide trait object.
+</span><span class="kw">pub type </span>ObjectCacheProvider = Arc&lt;<span 
class="kw">dyn </span>ObjectCacheProvide&gt;;
+
+<span class="attr">#[cfg(test)]
+</span><span class="kw">mod </span>tests {
+    <span class="kw">use super</span>::<span class="kw-2">*</span>;
+
+    <span class="kw">struct 
</span>_TestDynCompatibleForObjectCache(Arc&lt;<span class="kw">dyn 
</span>ObjectCache&lt;String, Arc&lt;Manifest&gt;&gt;&gt;);
+    <span class="kw">struct 
</span>_TestDynCompatibleForObjectCacheProvider(ObjectCacheProvider);
+}
+</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/api/src/iceberg/lib.rs.html b/api/src/iceberg/lib.rs.html
index 5d8da6eb..9f8a2b65 100644
--- a/api/src/iceberg/lib.rs.html
+++ b/api/src/iceberg/lib.rs.html
@@ -89,7 +89,8 @@
 <a href="#88" id="88">88</a>
 <a href="#89" id="89">89</a>
 <a href="#90" id="90">90</a>
-<a href="#91" id="91">91</a></pre></div><pre class="rust"><code><span 
class="comment">// Licensed to the Apache Software Foundation (ASF) under one
+<a href="#91" id="91">91</a>
+<a href="#92" id="92">92</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
 // regarding copyright ownership.  The ASF licenses this file
@@ -161,6 +162,7 @@
 <span class="kw">pub mod </span>table;
 
 <span class="kw">mod </span>avro;
+<span class="kw">pub mod </span>cache;
 <span class="kw">pub mod </span>io;
 <span class="kw">pub mod </span>spec;
 
diff --git a/api/type.impl/alloc/sync/struct.Arc.js 
b/api/type.impl/alloc/sync/struct.Arc.js
index 713764fe..c13b7713 100644
--- a/api/type.impl/alloc/sync/struct.Arc.js
+++ b/api/type.impl/alloc/sync/struct.Arc.js
@@ -1,9 +1,9 @@
 (function() {
-    var type_impls = Object.fromEntries([["iceberg",[["<details class=\"toggle 
implementors-toggle\" open><summary><section id=\"impl-Access-for-Arc%3CT%3E\" 
class=\"impl\"><a href=\"#impl-Access-for-Arc%3CT%3E\" 
class=\"anchor\">§</a><h3 class=\"code-header\">impl&lt;T&gt; Access for <a 
class=\"struct\" 
href=\"https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html\"; 
title=\"struct alloc::sync::Arc\">Arc</a>&lt;T&gt;<div class=\"where\">where\n  
  T: Access + ?<a class=\"trait\" hr [...]
+    var type_impls = Object.fromEntries([["iceberg",[["<details class=\"toggle 
implementors-toggle\" open><summary><section id=\"impl-Access-for-Arc%3CT%3E\" 
class=\"impl\"><a href=\"#impl-Access-for-Arc%3CT%3E\" 
class=\"anchor\">§</a><h3 class=\"code-header\">impl&lt;T&gt; Access for <a 
class=\"struct\" 
href=\"https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html\"; 
title=\"struct alloc::sync::Arc\">Arc</a>&lt;T&gt;<div class=\"where\">where\n  
  T: Access + ?<a class=\"trait\" hr [...]
     if (window.register_type_impls) {
         window.register_type_impls(type_impls);
     } else {
         window.pending_type_impls = type_impls;
     }
 })()
-//{"start":55,"fragment_lengths":[265652]}
\ No newline at end of file
+//{"start":55,"fragment_lengths":[267856]}
\ No newline at end of file

Reply via email to