Files
google_speech_rs/docs/inventory/index.html
T
2021-06-02 05:29:43 +00:00

71 lines
11 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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="githubcrates-iodocs-rs"><meta name="keywords" content="rust, rustlang, rust-lang, inventory"><title>inventory - Rust</title><link rel="stylesheet" type="text/css" href="../normalize.css"><link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><script src="../crates.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
<link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../inventory/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><p class="location">Crate inventory</p><div class="block version"><p>Version 0.1.10</p></div><div class="sidebar-elems"><a id="all-types" href="all.html"><p>See all inventory's items</p></a><div class="block items"><ul><li><a href="#macros">Macros</a></li><li><a href="#traits">Traits</a></li><li><a href="#types">Type Definitions</a></li></ul></div><p class="location"></p><div id="sidebar-vars" data-name="inventory" data-ty="mod" data-relpath="../"></div></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" height="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Crate <a class="mod" href="">inventory</a></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../src/inventory/lib.rs.html#1-381" title="goto source code">[src]</a></span></h1><div class="docblock"><p><a href="https://github.com/dtolnay/inventory"><img src="https://img.shields.io/badge/github-8da0cb?style=for-the-badge&amp;labelColor=555555&amp;logo=github" alt="github" /></a><a href="https://crates.io/crates/inventory"><img src="https://img.shields.io/badge/crates.io-fc8d62?style=for-the-badge&amp;labelColor=555555&amp;logo=rust" alt="crates-io" /></a><a href="https://docs.rs/inventory"><img src="https://img.shields.io/badge/docs.rs-66c2a5?style=for-the-badge&amp;labelColor=555555&amp;logoColor=white&amp;logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K" alt="docs-rs" /></a></p>
<br>
<p><strong>Typed distributed plugin registration.</strong></p>
<p>This crate provides a way to set up a plugin registry into which plugins
can be registered from any source file linked into your application. There
does not need to be a central list of all the plugins.</p>
<h1 id="examples" class="section-header"><a href="#examples">Examples</a></h1>
<p>Suppose we are writing a command line flags library and want to allow any
source file in the application to register command line flags that are
relevant to it.</p>
<p>This is the flag registration style used by <a href="https://gflags.github.io/gflags/">gflags</a> and is better suited
for large scale development than maintaining a single central list of flags,
as the central list would become an endless source of merge conflicts in an
application developed simultaneously by thousands of developers.</p>
<h2 id="instantiating-the-plugin-registry" class="section-header"><a href="#instantiating-the-plugin-registry">Instantiating the plugin registry</a></h2>
<p>Lets use a <code>struct Flag</code> as the plugin type, which will contain the short
name of the flag like <code>-v</code>, the full name like <code>--verbose</code>, and maybe other
information like argument type and help text. We instantiate a plugin
registry with an invocation of <code>inventory::collect!</code>.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">Flag</span> {
<span class="ident">short</span>: <span class="ident">char</span>,
<span class="ident">name</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">str</span>,
<span class="comment">/* ... */</span>
}
<span class="kw">impl</span> <span class="ident">Flag</span> {
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">short</span>: <span class="ident">char</span>, <span class="ident">name</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">str</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="self">Self</span> {
<span class="ident">Flag</span> { <span class="ident">short</span>, <span class="ident">name</span> }
}
}
<span class="ident">inventory</span>::<span class="macro">collect</span><span class="macro">!</span>(<span class="ident">Flag</span>);</pre></div>
<p>This <code>collect!</code> call must be in the same crate that defines the plugin type.
This macro does not “run” anything so place it outside of any function body.</p>
<h2 id="registering-plugins" class="section-header"><a href="#registering-plugins">Registering plugins</a></h2>
<p>Now any crate with access to the <code>Flag</code> type can register flags as a plugin.
Plugins can be registered by the same crate that declares the plugin type,
or by any downstream crate.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="ident">inventory</span>::<span class="macro">submit</span><span class="macro">!</span> {
<span class="ident">Flag</span>::<span class="ident">new</span>(<span class="string">&#39;v&#39;</span>, <span class="string">&quot;verbose&quot;</span>)
}</pre></div>
<p>The <code>submit!</code> macro does not “run” anything so place it outside of any
function body. In particular, note that all <code>submit!</code> invocations across all
source files linked into your application all take effect simultaneously. A
<code>submit!</code> invocation is not a statement that needs to be called from <code>main</code>
in order to execute.</p>
<h2 id="iterating-over-plugins" class="section-header"><a href="#iterating-over-plugins">Iterating over plugins</a></h2>
<p>The value <code>inventory::iter::&lt;T&gt;</code> is an iterator with element type <code>&amp;'static T</code> that iterates over all plugins registered of type <code>T</code>.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">for</span> <span class="ident">flag</span> <span class="kw">in</span> <span class="ident">inventory</span>::<span class="ident">iter</span>::<span class="op">&lt;</span><span class="ident">Flag</span><span class="op">&gt;</span> {
<span class="macro">println</span><span class="macro">!</span>(<span class="string">&quot;-{}, --{}&quot;</span>, <span class="ident">flag</span>.<span class="ident">short</span>, <span class="ident">flag</span>.<span class="ident">name</span>);
}</pre></div>
<p>There is no guarantee about the order that plugins of the same type are
visited by the iterator. They may be visited in any order.</p>
</div><h2 id="macros" class="section-header"><a href="#macros">Macros</a></h2>
<table><tr class="module-item"><td><a class="macro" href="macro.collect.html" title="inventory::collect macro">collect</a></td><td class="docblock-short"><p>Associate a plugin registry with the specified type.</p>
</td></tr><tr class="module-item"><td><a class="macro" href="macro.submit.html" title="inventory::submit macro">submit</a></td><td class="docblock-short"><p>Enter an element into the plugin registry corresponding to its type.</p>
</td></tr></table><h2 id="traits" class="section-header"><a href="#traits">Traits</a></h2>
<table><tr class="module-item"><td><a class="trait" href="trait.Collect.html" title="inventory::Collect trait">Collect</a></td><td class="docblock-short"><p>Trait bound corresponding to types that can be iterated by inventory::iter.</p>
</td></tr></table><h2 id="types" class="section-header"><a href="#types">Type Definitions</a></h2>
<table><tr class="module-item"><td><a class="type" href="type.iter.html" title="inventory::iter type">iter</a></td><td class="docblock-short"><p>An iterator over plugins registered of a given type.</p>
</td></tr></table></section><section id="search" class="content hidden"></section><section class="footer"></section><div id="rustdoc-vars" data-root-path="../" data-current-crate="inventory" data-search-js="../search-index.js"></div>
<script src="../main.js"></script></body></html>