<!DOCTYPE html><htmllang="en"><head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><metaname="generator"content="rustdoc"><metaname="description"content="Opt-in access to the experimental raw entry API."><title>RawEntryApiV1 in indexmap::map - Rust</title><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><linkrel="stylesheet"href="../../static.files/normalize-76eba96aa4d2e634.css"><linkrel="stylesheet"href="../../static.files/rustdoc-5bc39a1768837dd0.css"><metaname="rustdoc-vars"data-root-path="../../"data-static-root-path="../../static.files/"data-current-crate="indexmap"data-themes=""data-resource-suffix=""data-rustdoc-version="1.77.0 (aedd173a2 2024-03-17)"data-channel="1.77.0"data-search-js="search-dd67cee4cfa65049.js"data-settings-js="settings-4313503d2e1961c2.js"><scriptsrc="../../static.files/storage-4c98445ec4002617.js"></script><scriptdefersrc="sidebar-items.js"></script><scriptdefersrc="../../static.files/main-48f368f3872407c8.js"></script><noscript><linkrel="stylesheet"href="../../static.files/noscript-04d5337699b92874.css"></noscript><linkrel="alternate icon"type="image/png"href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><linkrel="alternate icon"type="image/png"href="../../static.files/favicon-32x32-422f7d1d52889060.png"><linkrel="icon"type="image/svg+xml"href="../../static.files/favicon-2c020d218678b618.svg"></head><bodyclass="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><navclass="mobile-topbar"><buttonclass="sidebar-menu-toggle"title="show sidebar"></button></nav><navclass="sidebar"><divclass="sidebar-crate"><h2><ahref="../../indexmap/index.html">indexmap</a><spanclass="version">2.2.6</span></h2></div><h2class="location"><ahref="#">RawEntryApiV1</a></h2><divclass="sidebar-elems"><section><h3><ahref="#required-methods">Required Methods</a></h3><ulclass="block"><li><ahref="#tymethod.raw_entry_mut_v1">raw_entry_mut_v1</a></li><li><ahref="#tymethod.raw_entry_v1">raw_entry_v1</a></li></ul><h3><ahref="#implementors">Implementors</a></h3></section><h2><ahref="index.html">In indexmap::map</a></h2></div></nav><divclass="sidebar-resizer"></div>
<main><divclass="width-limiter"><navclass="sub"><formclass="search-form"><span></span><divid="sidebar-button"tabindex="-1"><ahref="../../indexmap/all.html"title="show sidebar"></a></div><inputclass="search-input"name="search"aria-label="Run search in the documentation"autocomplete="off"spellcheck="false"placeholder="Click or press ‘S’ to search, ‘?’ for more options…"type="search"><divid="help-button"tabindex="-1"><ahref="../../help.html"title="help">?</a></div><divid="settings-menu"tabindex="-1"><ahref="../../settings.html"title="settings"><imgwidth="22"height="22"alt="Change settings"src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><sectionid="main-content"class="content"><divclass="main-heading"><h1>Trait <ahref="../index.html">indexmap</a>::<wbr><ahref="index.html">map</a>::<wbr><aclass="trait"href="#">RawEntryApiV1</a><buttonid="copy-path"title="Copy item path to clipboard"><imgsrc="../../static.files/clipboard-7571035ce49a181d.svg"width="19"height="18"alt="Copy item path"></button></h1><spanclass="out-of-band"><aclass="src"href="../../src/indexmap/map/core/raw_entry_v1.rs.html#23-173">source</a> · <buttonid="toggle-all-docs"title="collapse all docs">[<span>−</span>]</button></span></div><preclass="rust item-decl"><code>pub trait RawEntryApiV1<K, V, S>: Sealed {
}</code></pre><detailsclass="toggle top-doc"open><summaryclass="hideme"><span>Expand description</span></summary><divclass="docblock"><p>Opt-in access to the experimental raw entry API.</p>
<p>See the <ahref="raw_entry_v1/index.html"title="mod indexmap::map::raw_entry_v1"><code>raw_entry_v1</code></a> module documentation for more information.</p>
</div></details><h2id="required-methods"class="section-header">Required Methods<ahref="#required-methods"class="anchor">§</a></h2><divclass="methods"><detailsclass="toggle method-toggle"open><summary><sectionid="tymethod.raw_entry_v1"class="method"><aclass="src rightside"href="../../src/indexmap/map/core/raw_entry_v1.rs.html#73">source</a><h4class="code-header">fn <ahref="#tymethod.raw_entry_v1"class="fn">raw_entry_v1</a>(&self) -><aclass="struct"href="raw_entry_v1/struct.RawEntryBuilder.html"title="struct indexmap::map::raw_entry_v1::RawEntryBuilder">RawEntryBuilder</a><'_, K, V, S></h4></section></summary><divclass="docblock"><p>Creates a raw immutable entry builder for the <ahref="struct.IndexMap.html"title="struct indexmap::map::IndexMap"><code>IndexMap</code></a>.</p>
<p>Raw entries provide the lowest level of control for searching and
manipulating a map. They must be manually initialized with a hash and
then manually searched.</p>
<p>This is useful for</p>
<ul>
<li>Hash memoization</li>
<li>Using a search key that doesn’t work with the <ahref="../trait.Equivalent.html"title="trait indexmap::Equivalent"><code>Equivalent</code></a> trait</li>
<li>Using custom comparison logic without newtype wrappers</li>
</ul>
<p>Unless you are in such a situation, higher-level and more foolproof APIs like
<ahref="struct.IndexMap.html#method.get"title="method indexmap::map::IndexMap::get"><code>get</code></a> should be preferred.</p>
<p>Immutable raw entries have very limited use; you might instead want
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="tymethod.raw_entry_mut_v1"class="method"><aclass="src rightside"href="../../src/indexmap/map/core/raw_entry_v1.rs.html#172">source</a><h4class="code-header">fn <ahref="#tymethod.raw_entry_mut_v1"class="fn">raw_entry_mut_v1</a>(&mut self) -><aclass="struct"href="raw_entry_v1/struct.RawEntryBuilderMut.html"title="struct indexmap::map::raw_entry_v1::RawEntryBuilderMut">RawEntryBuilderMut</a><'_, K, V, S></h4></section></summary><divclass="docblock"><p>Creates a raw entry builder for the <ahref="struct.IndexMap.html"title="struct indexmap::map::IndexMap"><code>IndexMap</code></a>.</p>
<p>Raw entries provide the lowest level of control for searching and
manipulating a map. They must be manually initialized with a hash and
then manually searched. After this, insertions into a vacant entry
still require an owned key to be provided.</p>
<p>Raw entries are useful for such exotic situations as:</p>
<ul>
<li>Hash memoization</li>
<li>Deferring the creation of an owned key until it is known to be required</li>
<li>Using a search key that doesn’t work with the <ahref="../trait.Equivalent.html"title="trait indexmap::Equivalent"><code>Equivalent</code></a> trait</li>
<li>Using custom comparison logic without newtype wrappers</li>
</ul>
<p>Because raw entries provide much more low-level control, it’s much easier
to put the <code>IndexMap</code> into an inconsistent state which, while memory-safe,
will cause the map to produce seemingly random results. Higher-level and more
foolproof APIs like <ahref="struct.IndexMap.html#method.entry"title="method indexmap::map::IndexMap::entry"><code>entry</code></a> should be preferred when possible.</p>
<p>Raw entries give mutable access to the keys. This must not be used
to modify how the key would compare or hash, as the map will not re-evaluate
where the key should go, meaning the keys may become “lost” if their
location does not reflect their state. For instance, if you change a key
so that the map now contains keys which compare equal, search may start
acting erratically, with two keys randomly masking each other. Implementations
are free to assume this doesn’t happen (within the limits of memory-safety).</p>