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>(&self, key: <a
class="primitive"
href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&K</a>)
-> <a class="enum"
href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html"
title="enum core::option::Option">Option</a><V>;
+<span class="item-spacer"></span> fn <a href="#tymethod.set"
class="fn">set</a>(&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>(&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>(&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>(&self) -> &dyn <a class="trait"
href="trait.ObjectCache.html" title="trait
iceberg::cache::ObjectCache">ObjectCache</a><<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><<a class="struct" [...]
+<span class="item-spacer"></span> fn <a
href="#tymethod.manifest_list_cache"
class="fn">manifest_list_cache</a>(&self) -> &dyn <a class="trait"
href="trait.ObjectCache.html" title="trait
iceberg::cache::ObjectCache">ObjectCache</a><<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>(&self)
-> &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>(&self) -> &dyn <a class="trait"
href="trait.ObjectCache.html" title="trait
iceberg::cache::ObjectCache">ObjectCache</a><<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<<span
class="kw">_</span>> = 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<K, V>: 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">&</span><span
class="self">self</span>, key: <span class="kw-2">&</span>K) -> <span
class="prelude-ty">Option</span><V>;
+ <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">&</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">&</span><span class="self">self</span>) -> <span
class="kw-2">&</span><span class="kw">dyn </span>ObjectCache<String,
Arc<Manifest>>;
+ <span class="doccomment">/// Gets a cache for manifest lists.
+ </span><span class="kw">fn </span>manifest_list_cache(<span
class="kw-2">&</span><span class="self">self</span>) -> <span
class="kw-2">&</span><span class="kw">dyn </span>ObjectCache<String,
Arc<ManifestList>>;
+}
+
+<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<<span
class="kw">dyn </span>ObjectCacheProvide>;
+
+<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<<span class="kw">dyn
</span>ObjectCache<String, Arc<Manifest>>>);
+ <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<T> Access for <a
class=\"struct\"
href=\"https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html\"
title=\"struct alloc::sync::Arc\">Arc</a><T><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<T> Access for <a
class=\"struct\"
href=\"https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html\"
title=\"struct alloc::sync::Arc\">Arc</a><T><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