blob: 85c28ba719ced90fee7d659d3905d0707682835b [file] [log] [blame]
<!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="Streamer describes a “streaming iterator.”"><meta name="keywords" content="rust, rustlang, rust-lang, Streamer"><title>Streamer in tantivy_fst - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button><a class="sidebar-logo" href="../tantivy_fst/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../tantivy_fst/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">Streamer</a></h2><div class="sidebar-elems"><section><h3><a href="#required-associated-types">Required Associated Types</a></h3><ul class="block"><li><a href="#associatedtype.Item">Item</a></li></ul><h3><a href="#required-methods">Required Methods</a></h3><ul class="block"><li><a href="#tymethod.next">next</a></li></ul><h3><a href="#implementors">Implementors</a></h3></section><h2><a href="index.html">In tantivy_fst</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Trait <a href="index.html">tantivy_fst</a>::<wbr><a class="trait" href="#">Streamer</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/tantivy_fst/stream.rs.html#97-107">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><div class="item-decl"><pre class="rust trait"><code>pub trait Streamer&lt;'a&gt; {
type <a href="#associatedtype.Item" class="associatedtype">Item</a>: 'a;
fn <a href="#tymethod.next" class="fnname">next</a>(&amp;'a mut self) -&gt; Option&lt;Self::<a class="associatedtype" href="trait.Streamer.html#associatedtype.Item" title="type tantivy_fst::Streamer::Item">Item</a>&gt;;
}</code></pre></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Streamer describes a “streaming iterator.”</p>
<p>It provides a mechanism for writing code that is generic over streams
produced by this crate.</p>
<p>Note that this is strictly less useful than <code>Iterator</code> because the item
associated type is bound to a specific lifetime. However, this does permit
us to write <em>some</em> generic code over streams that produce values tied
to the lifetime of the stream.</p>
<p>Some form of stream abstraction is inherently required for this crate
because elements in a finite state transducer are produced <em>by iterating</em>
over the structure. The alternative would be to create a new allocation
for each element iterated over, which would be prohibitively expensive.</p>
<h2 id="usage--motivation"><a href="#usage--motivation">Usage &amp; motivation</a></h2>
<p>Streams are hard to use because they don’t fit into Rust’s current type
system very well. They are so hard to use that this author loathes having a
publically defined trait for it. Nevertheless, they do just barely provide
a means for composing multiple stream abstractions with different concrete
types. For example, one might want to take the union of a range query
stream with a stream that has been filtered by a regex. These streams have
different concrete types. A <code>Streamer</code> trait allows us to write code that
is generic over these concrete types. (All of the set operations are
implemented this way.)</p>
<p>A problem with streams is that the trait is itself parameterized by a
lifetime. In practice, this makes them very unergonomic because specifying
a <code>Streamer</code> bound generally requires a higher-ranked trait bound. This is
necessary because the lifetime can’t actually be named in the enclosing
function; instead, the lifetime is local to iteration itself. Therefore,
one must assert that the bound is valid for <em>any particular</em> lifetime.
This is the essence of higher-rank trait bounds.</p>
<p>Because of this, you might expect to see lots of bounds that look like
this:</p>
<div class="example-wrap ignore"><div class='tooltip'></div><pre class="rust rust-example-rendered"><code><span class="kw">fn </span>takes_stream&lt;T, S&gt;(s: S)
<span class="kw">where </span>S: <span class="kw">for</span>&lt;<span class="lifetime">&#39;a</span>&gt; Streamer&lt;<span class="lifetime">&#39;a</span>, Item=T&gt;
{
}</code></pre></div>
<p>There are <em>three</em> different problems with this declaration:</p>
<ol>
<li><code>S</code> is not bound by any particular lifetime itself, and most streams
probably contain a reference to an underlying finite state transducer.</li>
<li>It is often convenient to separate the notion of “stream” with
“stream constructor.” This represents a similar split found in the
standard library for <code>Iterator</code> and <code>IntoIterator</code>, respectively.</li>
<li>The <code>Item=T</code> is invalid because <code>Streamer</code>’s associated type is
parameterized by a lifetime and there is no way to parameterize an
arbitrary type constructor. (In this context, <code>T</code> is the type
constructor, because it will invariably require a lifetime to become
a concrete type.)</li>
</ol>
<p>With that said, we must revise our possibly-workable bounds to a giant
scary monster:</p>
<div class="example-wrap ignore"><div class='tooltip'></div><pre class="rust rust-example-rendered"><code><span class="kw">fn </span>takes_stream&lt;<span class="lifetime">&#39;f</span>, I, S&gt;(s: I)
<span class="kw">where </span>I: <span class="kw">for</span>&lt;<span class="lifetime">&#39;a</span>&gt; IntoStreamer&lt;<span class="lifetime">&#39;a</span>, Into=S, Item=(<span class="kw-2">&amp;</span><span class="lifetime">&#39;a </span>[u8], Output)&gt;,
S: <span class="lifetime">&#39;f </span>+ <span class="kw">for</span>&lt;<span class="lifetime">&#39;a</span>&gt; Streamer&lt;<span class="lifetime">&#39;a</span>, Item=(<span class="kw-2">&amp;</span><span class="lifetime">&#39;a </span>[u8], Output)&gt;
{
}</code></pre></div>
<p>We addressed the above points correspondingly:</p>
<ol>
<li><code>S</code> is now bound by <code>'f</code>, which corresponds to the lifetime (possibly
<code>'static</code>) of the underlying stream.</li>
<li>The <code>I</code> type parameter has been added to refer to a type that knows how
to build a stream. Notice that neither of the bounds for <code>I</code> or <code>S</code>
share a lifetime parameter. This is because the higher rank trait bound
specifies it works for <em>any</em> particular lifetime.</li>
<li><code>T</code> has been replaced with specific concrete types. Note that these
concrete types are duplicated. With iterators, we could use
<code>Item=S::Item</code> in the bound for <code>I</code>, but one cannot access an associated
type through a higher-ranked trait bound. Therefore, we must duplicate
the item type.</li>
</ol>
<p>As you can see, streams offer little flexibility, little ergonomics and a
lot of hard to read trait bounds. The situation is lamentable, but
nevertheless, without them, we would not be able to compose streams by
leveraging the type system.</p>
<p>A redeemable quality is that these <em>same exact</em> trait bounds (modulo some
tweaks in the <code>Item</code> associated type) appear in many places in this crate
without much variation. Therefore, once you grok it, it’s mostly easy to
pattern match it with “oh I need a stream.” My hope is that clear
documentation and examples make these complex bounds easier to burden.</p>
<p>Stretching this abstraction further with Rust’s current type system is not
advised.</p>
</div></details><h2 id="required-associated-types" class="small-section-header">Required Associated Types<a href="#required-associated-types" class="anchor"></a></h2><div class="methods"><details class="rustdoc-toggle method-toggle" open><summary><section id="associatedtype.Item" class="method has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/stream.rs.html#99">source</a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a>: 'a</h4></section></summary><div class="docblock"><p>The type of the item emitted by this stream.</p>
</div></details></div><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor"></a></h2><div class="methods"><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.next" class="method has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/stream.rs.html#106">source</a><h4 class="code-header">fn <a href="#tymethod.next" class="fnname">next</a>(&amp;'a mut self) -&gt; Option&lt;Self::<a class="associatedtype" href="trait.Streamer.html#associatedtype.Item" title="type tantivy_fst::Streamer::Item">Item</a>&gt;</h4></section></summary><div class="docblock"><p>Emits the next element in this stream, or <code>None</code> to indicate the stream
has been exhausted.</p>
<p>It is not specified what a stream does after <code>None</code> is emitted. In most
cases, <code>None</code> should be emitted on every subsequent call.</p>
</div></details></div><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor"></a></h2><div id="implementors-list"><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-Chain%3C%27f%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/raw/ops.rs.html#226-244">source</a><a href="#impl-Streamer%3C%27a%3E-for-Chain%3C%27f%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a, 'f&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for tantivy_fst::raw::<a class="struct" href="raw/struct.Chain.html" title="struct tantivy_fst::raw::Chain">Chain</a>&lt;'f&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Item-1" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-1" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = (&amp;'a [u8], <a class="struct" href="raw/struct.Output.html" title="struct tantivy_fst::raw::Output">Output</a>)</h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-Difference%3C%27f%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/raw/ops.rs.html#335-364">source</a><a href="#impl-Streamer%3C%27a%3E-for-Difference%3C%27f%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a, 'f&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for tantivy_fst::raw::<a class="struct" href="raw/struct.Difference.html" title="struct tantivy_fst::raw::Difference">Difference</a>&lt;'f&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Item-2" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-2" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = (&amp;'a [u8], &amp;'a [<a class="struct" href="raw/struct.IndexedValue.html" title="struct tantivy_fst::raw::IndexedValue">IndexedValue</a>])</h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-Intersection%3C%27f%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/raw/ops.rs.html#289-318">source</a><a href="#impl-Streamer%3C%27a%3E-for-Intersection%3C%27f%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a, 'f&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for tantivy_fst::raw::<a class="struct" href="raw/struct.Intersection.html" title="struct tantivy_fst::raw::Intersection">Intersection</a>&lt;'f&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Item-3" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-3" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = (&amp;'a [u8], &amp;'a [<a class="struct" href="raw/struct.IndexedValue.html" title="struct tantivy_fst::raw::IndexedValue">IndexedValue</a>])</h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-SymmetricDifference%3C%27f%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/raw/ops.rs.html#376-407">source</a><a href="#impl-Streamer%3C%27a%3E-for-SymmetricDifference%3C%27f%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a, 'f&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for tantivy_fst::raw::<a class="struct" href="raw/struct.SymmetricDifference.html" title="struct tantivy_fst::raw::SymmetricDifference">SymmetricDifference</a>&lt;'f&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Item-4" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-4" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = (&amp;'a [u8], &amp;'a [<a class="struct" href="raw/struct.IndexedValue.html" title="struct tantivy_fst::raw::IndexedValue">IndexedValue</a>])</h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-Union%3C%27f%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/raw/ops.rs.html#255-277">source</a><a href="#impl-Streamer%3C%27a%3E-for-Union%3C%27f%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a, 'f&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for tantivy_fst::raw::<a class="struct" href="raw/struct.Union.html" title="struct tantivy_fst::raw::Union">Union</a>&lt;'f&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Item-5" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-5" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = (&amp;'a [u8], &amp;'a [<a class="struct" href="raw/struct.IndexedValue.html" title="struct tantivy_fst::raw::IndexedValue">IndexedValue</a>])</h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-Chain%3C%27m%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/map.rs.html#1037-1044">source</a><a href="#impl-Streamer%3C%27a%3E-for-Chain%3C%27m%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a, 'm&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for tantivy_fst::map::<a class="struct" href="map/struct.Chain.html" title="struct tantivy_fst::map::Chain">Chain</a>&lt;'m&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Item-6" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-6" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = (&amp;'a [u8], <a class="struct" href="raw/struct.Output.html" title="struct tantivy_fst::raw::Output">Output</a>)</h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-Difference%3C%27m%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/map.rs.html#1071-1078">source</a><a href="#impl-Streamer%3C%27a%3E-for-Difference%3C%27m%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a, 'm&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for tantivy_fst::map::<a class="struct" href="map/struct.Difference.html" title="struct tantivy_fst::map::Difference">Difference</a>&lt;'m&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Item-7" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-7" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = (&amp;'a [u8], &amp;'a [<a class="struct" href="raw/struct.IndexedValue.html" title="struct tantivy_fst::raw::IndexedValue">IndexedValue</a>])</h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-Intersection%3C%27m%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/map.rs.html#1052-1059">source</a><a href="#impl-Streamer%3C%27a%3E-for-Intersection%3C%27m%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a, 'm&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for tantivy_fst::map::<a class="struct" href="map/struct.Intersection.html" title="struct tantivy_fst::map::Intersection">Intersection</a>&lt;'m&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Item-8" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-8" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = (&amp;'a [u8], &amp;'a [<a class="struct" href="raw/struct.IndexedValue.html" title="struct tantivy_fst::raw::IndexedValue">IndexedValue</a>])</h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-Keys%3C%27m%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/map.rs.html#612-619">source</a><a href="#impl-Streamer%3C%27a%3E-for-Keys%3C%27m%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a, 'm&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for <a class="struct" href="map/struct.Keys.html" title="struct tantivy_fst::map::Keys">Keys</a>&lt;'m&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Item-9" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-9" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = &amp;'a [u8]</h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-SymmetricDifference%3C%27m%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/map.rs.html#1086-1093">source</a><a href="#impl-Streamer%3C%27a%3E-for-SymmetricDifference%3C%27m%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a, 'm&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for tantivy_fst::map::<a class="struct" href="map/struct.SymmetricDifference.html" title="struct tantivy_fst::map::SymmetricDifference">SymmetricDifference</a>&lt;'m&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Item-10" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-10" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = (&amp;'a [u8], &amp;'a [<a class="struct" href="raw/struct.IndexedValue.html" title="struct tantivy_fst::raw::IndexedValue">IndexedValue</a>])</h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-Union%3C%27m%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/map.rs.html#1023-1030">source</a><a href="#impl-Streamer%3C%27a%3E-for-Union%3C%27m%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a, 'm&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for tantivy_fst::map::<a class="struct" href="map/struct.Union.html" title="struct tantivy_fst::map::Union">Union</a>&lt;'m&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Item-11" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-11" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = (&amp;'a [u8], &amp;'a [<a class="struct" href="raw/struct.IndexedValue.html" title="struct tantivy_fst::raw::IndexedValue">IndexedValue</a>])</h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-Values%3C%27m%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/map.rs.html#627-634">source</a><a href="#impl-Streamer%3C%27a%3E-for-Values%3C%27m%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a, 'm&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for <a class="struct" href="map/struct.Values.html" title="struct tantivy_fst::map::Values">Values</a>&lt;'m&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Item-12" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-12" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = u64</h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-StreamWithState%3C%27m%2C%20A%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/map.rs.html#1121-1132">source</a><a href="#impl-Streamer%3C%27a%3E-for-StreamWithState%3C%27m%2C%20A%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a, 'm, A:&nbsp;'a + <a class="trait" href="automaton/trait.Automaton.html" title="trait tantivy_fst::automaton::Automaton">Automaton</a>&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for tantivy_fst::map::<a class="struct" href="map/struct.StreamWithState.html" title="struct tantivy_fst::map::StreamWithState">StreamWithState</a>&lt;'m, A&gt;<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;A::<a class="associatedtype" href="automaton/trait.Automaton.html#associatedtype.State" title="type tantivy_fst::automaton::Automaton::State">State</a>: Clone,</span></h3></section></summary><div class="impl-items"><section id="associatedtype.Item-13" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-13" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = (&amp;'a [u8], u64, &lt;A as <a class="trait" href="automaton/trait.Automaton.html" title="trait tantivy_fst::automaton::Automaton">Automaton</a>&gt;::<a class="associatedtype" href="automaton/trait.Automaton.html#associatedtype.State" title="type tantivy_fst::automaton::Automaton::State">State</a>)</h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-Stream%3C%27m%2C%20A%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/map.rs.html#558-564">source</a><a href="#impl-Streamer%3C%27a%3E-for-Stream%3C%27m%2C%20A%3E" class="anchor"></a><h3 class="code-header">impl&lt;'a, 'm, A:&nbsp;<a class="trait" href="automaton/trait.Automaton.html" title="trait tantivy_fst::automaton::Automaton">Automaton</a>&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for tantivy_fst::map::<a class="struct" href="map/struct.Stream.html" title="struct tantivy_fst::map::Stream">Stream</a>&lt;'m, A&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Item-14" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-14" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = (&amp;'a [u8], u64)</h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-StreamWithState%3C%27f%2C%20A%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/raw/mod.rs.html#1139-1148">source</a><a href="#impl-Streamer%3C%27a%3E-for-StreamWithState%3C%27f%2C%20A%3E" class="anchor"></a><h3 class="code-header">impl&lt;'f, 'a, A:&nbsp;'a + <a class="trait" href="automaton/trait.Automaton.html" title="trait tantivy_fst::automaton::Automaton">Automaton</a>&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for tantivy_fst::raw::<a class="struct" href="raw/struct.StreamWithState.html" title="struct tantivy_fst::raw::StreamWithState">StreamWithState</a>&lt;'f, A&gt;<span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;A::<a class="associatedtype" href="automaton/trait.Automaton.html#associatedtype.State" title="type tantivy_fst::automaton::Automaton::State">State</a>: Clone,</span></h3></section></summary><div class="impl-items"><section id="associatedtype.Item-15" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-15" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = (&amp;'a [u8], <a class="struct" href="raw/struct.Output.html" title="struct tantivy_fst::raw::Output">Output</a>, &lt;A as <a class="trait" href="automaton/trait.Automaton.html" title="trait tantivy_fst::automaton::Automaton">Automaton</a>&gt;::<a class="associatedtype" href="automaton/trait.Automaton.html#associatedtype.State" title="type tantivy_fst::automaton::Automaton::State">State</a>)</h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Streamer%3C%27a%3E-for-Stream%3C%27f%2C%20A%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tantivy_fst/raw/mod.rs.html#794-800">source</a><a href="#impl-Streamer%3C%27a%3E-for-Stream%3C%27f%2C%20A%3E" class="anchor"></a><h3 class="code-header">impl&lt;'f, 'a, A:&nbsp;<a class="trait" href="automaton/trait.Automaton.html" title="trait tantivy_fst::automaton::Automaton">Automaton</a>&gt; <a class="trait" href="trait.Streamer.html" title="trait tantivy_fst::Streamer">Streamer</a>&lt;'a&gt; for tantivy_fst::raw::<a class="struct" href="raw/struct.Stream.html" title="struct tantivy_fst::raw::Stream">Stream</a>&lt;'f, A&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Item-16" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Item-16" class="anchor"></a><h4 class="code-header">type <a href="#associatedtype.Item" class="associatedtype">Item</a> = (&amp;'a [u8], <a class="struct" href="raw/struct.Output.html" title="struct tantivy_fst::raw::Output">Output</a>)</h4></section></div></details></div><script src="../implementors/tantivy_fst/stream/trait.Streamer.js" async></script></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="tantivy_fst" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (5c8bff74b 2022-10-21)" ></div></body></html>