trait.RngCore.html 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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="API documentation for the Rust `RngCore` trait in crate `rand_core`."><meta name="keywords" content="rust, rustlang, rust-lang, RngCore"><title>rand_core::RngCore - 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="../dark.css"><link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle"><script src="../storage.js"></script><link rel="shortcut icon" href="https://www.rust-lang.org/favicon.ico"></head><body class="rustdoc trait"><!--[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">&#9776;</div><a href='../rand_core/index.html'><img src='https://www.rust-lang.org/logos/rust-logo-128x128-blk.png' alt='logo' width='100'></a><p class='location'>Trait RngCore</p><div class="sidebar-elems"><div class="block items"><a class="sidebar-title" href="#required-methods">Required Methods</a><div class="sidebar-links"><a href="#tymethod.next_u32">next_u32</a><a href="#tymethod.next_u64">next_u64</a><a href="#tymethod.fill_bytes">fill_bytes</a><a href="#tymethod.try_fill_bytes">try_fill_bytes</a></div><a class="sidebar-title" href="#foreign-impls">Implementations on Foreign Types</a><div class="sidebar-links"><a href="#impl-RngCore">&amp;&#39;a mut R</a><a href="#impl-RngCore">Box&lt;R&gt;</a></div><a class="sidebar-title" href="#implementors">Implementors</a><a class="sidebar-title" href="#implementations">Trait Implementations</a><div class="sidebar-links"><a href="#impl-Read">Read</a></div></div><p class='location'><a href='index.html'>rand_core</a></p><script>window.sidebarCurrent = {name: 'RngCore', ty: 'trait', relpath: ''};</script><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!"><img src="../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices"></div></div><script src="../theme.js"></script><nav class="sub"><form class="search-form js-only"><div class="search-container"><input class="search-input" name="search" autocomplete="off" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class='fqn'><span class='in-band'>Trait <a href='index.html'>rand_core</a>::<wbr><a class="trait" href=''>RngCore</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/rand_core/lib.rs.html#147-193' title='goto source code'>[src]</a></span></h1><div class="docblock type-decl"><pre class='rust trait'>pub trait RngCore {
  2. fn <a href='#tymethod.next_u32' class='fnname'>next_u32</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>;
  3. <div class='item-spacer'></div> fn <a href='#tymethod.next_u64' class='fnname'>next_u64</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>;
  4. <div class='item-spacer'></div> fn <a href='#tymethod.fill_bytes' class='fnname'>fill_bytes</a>(&amp;mut self, dest: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;mut [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>);
  5. <div class='item-spacer'></div> fn <a href='#tymethod.try_fill_bytes' class='fnname'>try_fill_bytes</a>(&amp;mut self, dest: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;mut [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, <a class="struct" href="../rand_core/struct.Error.html" title="struct rand_core::Error">Error</a>&gt;;
  6. }</pre></div><div class='docblock'><p>The core of a random number generator.</p>
  7. <p>This trait encapsulates the low-level functionality common to all
  8. generators, and is the &quot;back end&quot;, to be implemented by generators.
  9. End users should normally use <a href="../rand/trait.Rng.html"><code>Rng</code></a> from the <a href="https://crates.io/crates/rand">rand</a> crate, which is
  10. automatically implemented for every type implementing <code>RngCore</code>.</p>
  11. <p>Three different methods for generating random data are provided since the
  12. optimal implementation of each is dependent on the type of generator. There
  13. is no required relationship between the output of each; e.g. many
  14. implementations of <a href="trait.RngCore.html#tymethod.fill_bytes"><code>fill_bytes</code></a> consume a whole number of <code>u32</code> or <code>u64</code>
  15. values and drop any remaining unused bytes.</p>
  16. <p>The <a href="trait.RngCore.html#tymethod.try_fill_bytes"><code>try_fill_bytes</code></a> method is a variant of <a href="trait.RngCore.html#tymethod.fill_bytes"><code>fill_bytes</code></a> allowing error
  17. handling; it is not deemed sufficiently useful to add equivalents for
  18. <a href="trait.RngCore.html#tymethod.next_u32"><code>next_u32</code></a> or <a href="trait.RngCore.html#tymethod.next_u64"><code>next_u64</code></a> since the latter methods are almost always used
  19. with algorithmic generators (PRNGs), which are normally infallible.</p>
  20. <p>Algorithmic generators implementing <a href="trait.SeedableRng.html"><code>SeedableRng</code></a> should normally have
  21. <em>portable, reproducible</em> output, i.e. fix Endianness when converting values
  22. to avoid platform differences, and avoid making any changes which affect
  23. output (except by communicating that the release has breaking changes).</p>
  24. <p>Typically implementators will implement only one of the methods available
  25. in this trait directly, then use the helper functions from the
  26. <a href="../rand_core/impls/index.html"><code>rand_core::impls</code></a> module to implement the other methods.</p>
  27. <p>It is recommended that implementations also implement:</p>
  28. <ul>
  29. <li><code>Debug</code> with a custom implementation which <em>does not</em> print any internal
  30. state (at least, <a href="trait.CryptoRng.html"><code>CryptoRng</code></a>s should not risk leaking state through
  31. <code>Debug</code>).</li>
  32. <li><code>Serialize</code> and <code>Deserialize</code> (from Serde), preferably making Serde
  33. support optional at the crate level in PRNG libs.</li>
  34. <li><code>Clone</code>, if possible.</li>
  35. <li><em>never</em> implement <code>Copy</code> (accidental copies may cause repeated values).</li>
  36. <li><em>do not</em> implement <code>Default</code> for pseudorandom generators, but instead
  37. implement <a href="trait.SeedableRng.html"><code>SeedableRng</code></a>, to guide users towards proper seeding.
  38. External / hardware RNGs can choose to implement <code>Default</code>.</li>
  39. <li><code>Eq</code> and <code>PartialEq</code> could be implemented, but are probably not useful.</li>
  40. </ul>
  41. <h1 id="example" class="section-header"><a href="#example">Example</a></h1>
  42. <p>A simple example, obviously not generating very <em>random</em> output:</p>
  43. <pre class="rust rust-example-rendered">
  44. <span class="attribute">#![<span class="ident">allow</span>(<span class="ident">dead_code</span>)]</span>
  45. <span class="kw">use</span> <span class="ident">rand_core</span>::{<span class="ident">RngCore</span>, <span class="ident">Error</span>, <span class="ident">impls</span>};
  46. <span class="kw">struct</span> <span class="ident">CountingRng</span>(<span class="ident">u64</span>);
  47. <span class="kw">impl</span> <span class="ident">RngCore</span> <span class="kw">for</span> <span class="ident">CountingRng</span> {
  48. <span class="kw">fn</span> <span class="ident">next_u32</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">u32</span> {
  49. <span class="self">self</span>.<span class="ident">next_u64</span>() <span class="kw">as</span> <span class="ident">u32</span>
  50. }
  51. <span class="kw">fn</span> <span class="ident">next_u64</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">u64</span> {
  52. <span class="self">self</span>.<span class="number">0</span> <span class="op">+=</span> <span class="number">1</span>;
  53. <span class="self">self</span>.<span class="number">0</span>
  54. }
  55. <span class="kw">fn</span> <span class="ident">fill_bytes</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">dest</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> [<span class="ident">u8</span>]) {
  56. <span class="ident">impls</span>::<span class="ident">fill_bytes_via_next</span>(<span class="self">self</span>, <span class="ident">dest</span>)
  57. }
  58. <span class="kw">fn</span> <span class="ident">try_fill_bytes</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">dest</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> [<span class="ident">u8</span>]) <span class="op">-&gt;</span> <span class="prelude-ty">Result</span><span class="op">&lt;</span>(), <span class="ident">Error</span><span class="op">&gt;</span> {
  59. <span class="prelude-val">Ok</span>(<span class="self">self</span>.<span class="ident">fill_bytes</span>(<span class="ident">dest</span>))
  60. }
  61. }</pre>
  62. </div>
  63. <h2 id='required-methods' class='small-section-header'>
  64. Required Methods<a href='#required-methods' class='anchor'></a>
  65. </h2>
  66. <div class='methods'>
  67. <h3 id='tymethod.next_u32' class='method'><span id='next_u32.v' class='invisible'><code>fn <a href='#tymethod.next_u32' class='fnname'>next_u32</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a></code></span></h3><div class='docblock'><p>Return the next random <code>u32</code>.</p>
  68. <p>RNGs must implement at least one method from this trait directly. In
  69. the case this method is not implemented directly, it can be implemented
  70. using <code>self.next_u64() as u32</code> or
  71. <a href="../rand_core/impls/fn.next_u32_via_fill.html">via <code>fill_bytes</code></a>.</p>
  72. </div><h3 id='tymethod.next_u64' class='method'><span id='next_u64.v' class='invisible'><code>fn <a href='#tymethod.next_u64' class='fnname'>next_u64</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></code></span></h3><div class='docblock'><p>Return the next random <code>u64</code>.</p>
  73. <p>RNGs must implement at least one method from this trait directly. In
  74. the case this method is not implemented directly, it can be implemented
  75. <a href="../rand_core/impls/fn.next_u64_via_u32.html">via <code>next_u32</code></a> or
  76. <a href="../rand_core/impls/fn.next_u64_via_fill.html">via <code>fill_bytes</code></a>.</p>
  77. </div><h3 id='tymethod.fill_bytes' class='method'><span id='fill_bytes.v' class='invisible'><code>fn <a href='#tymethod.fill_bytes' class='fnname'>fill_bytes</a>(&amp;mut self, dest: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;mut [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>)</code></span></h3><div class='docblock'><p>Fill <code>dest</code> with random data.</p>
  78. <p>RNGs must implement at least one method from this trait directly. In
  79. the case this method is not implemented directly, it can be implemented
  80. <a href="../rand_core/impls/fn.fill_bytes_via_next.html">via <code>next_u*</code></a> or
  81. via <code>try_fill_bytes</code>; if this generator can fail the implementation
  82. must choose how best to handle errors here (e.g. panic with a
  83. descriptive message or log a warning and retry a few times).</p>
  84. <p>This method should guarantee that <code>dest</code> is entirely filled
  85. with new data, and may panic if this is impossible
  86. (e.g. reading past the end of a file that is being used as the
  87. source of randomness).</p>
  88. </div><h3 id='tymethod.try_fill_bytes' class='method'><span id='try_fill_bytes.v' class='invisible'><code>fn <a href='#tymethod.try_fill_bytes' class='fnname'>try_fill_bytes</a>(&amp;mut self, dest: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;mut [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, <a class="struct" href="../rand_core/struct.Error.html" title="struct rand_core::Error">Error</a>&gt;</code></span></h3><div class='docblock'><p>Fill <code>dest</code> entirely with random data.</p>
  89. <p>This is the only method which allows an RNG to report errors while
  90. generating random data thus making this the primary method implemented
  91. by external (true) RNGs (e.g. <code>OsRng</code>) which can fail. It may be used
  92. directly to generate keys and to seed (infallible) PRNGs.</p>
  93. <p>Other than error handling, this method is identical to <a href="trait.RngCore.html#method.fill_bytes"><code>fill_bytes</code></a>;
  94. thus this may be implemented using <code>Ok(self.fill_bytes(dest))</code> or
  95. <code>fill_bytes</code> may be implemented with
  96. <code>self.try_fill_bytes(dest).unwrap()</code> or more specific error handling.</p>
  97. </div></div>
  98. <h2 id='implementations' class='small-section-header'>
  99. Trait Implementations<a href='#implementations' class='anchor'></a>
  100. </h2>
  101. <div id='implementations-list'><h3 id='impl-Read' class='impl'><span class='in-band'><table class='table-display'><tbody><tr><td><code>impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a> for <a class="trait" href="../rand_core/trait.RngCore.html" title="trait rand_core::RngCore">RngCore</a></code><a href='#impl-Read' class='anchor'></a></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rand_core/lib.rs.html#392-397' title='goto source code'>[src]</a></span></td></tr></tbody></table></h3><div class='impl-items'><h4 id='method.read' class="method"><span id='read.v' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html#tymethod.read' class='fnname'>read</a>(&amp;mut self, buf: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;mut [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html" title="struct std::io::error::Error">Error</a>&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rand_core/lib.rs.html#393-396' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Pull some bytes from this source into the specified buffer, returning how many bytes were read. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#tymethod.read">Read more</a></p>
  102. </div><h4 id='method.initializer' class="method"><span id='initializer.v' class='invisible'><table class='table-display'><tbody><tr><td><code>unsafe fn <a href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.initializer' class='fnname'>initializer</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/struct.Initializer.html" title="struct std::io::Initializer">Initializer</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#552-554' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='stability'><div class='stab unstable'><span class=microscope>🔬</span> This is a nightly-only experimental API. (<code>read_initializer</code>)</div></div><div class='docblock'><p>Determines if this <code>Read</code>er can work with buffers of uninitialized memory. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.initializer">Read more</a></p>
  103. </div><h4 id='method.read_to_end' class="method"><span id='read_to_end.v' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.read_to_end' class='fnname'>read_to_end</a>(&amp;mut self, buf: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html" title="struct std::io::error::Error">Error</a>&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div><a class='srclink' href='https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#604-606' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Read all bytes until EOF in this source, placing them into <code>buf</code>. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.read_to_end">Read more</a></p>
  104. </div><h4 id='method.read_to_string' class="method"><span id='read_to_string.v' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.read_to_string' class='fnname'>read_to_string</a>(&amp;mut self, buf: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html" title="struct std::io::error::Error">Error</a>&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div><a class='srclink' href='https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#647-658' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Read all bytes until EOF in this source, appending them to <code>buf</code>. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.read_to_string">Read more</a></p>
  105. </div><h4 id='method.read_exact' class="method"><span id='read_exact.v' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.read_exact' class='fnname'>read_exact</a>(&amp;mut self, buf: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;mut [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html" title="struct std::io::error::Error">Error</a>&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><div class='since' title='Stable since Rust version 1.6.0'>1.6.0</div><a class='srclink' href='https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#710-725' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Read the exact number of bytes required to fill <code>buf</code>. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.read_exact">Read more</a></p>
  106. </div><h4 id='method.by_ref' class="method"><span id='by_ref.v' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.by_ref' class='fnname'>by_ref</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut </a>Self</code></span></td><td><span class='out-of-band'><div class='ghost'></div><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div><a class='srclink' href='https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#762' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Creates a &quot;by reference&quot; adaptor for this instance of <code>Read</code>. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.by_ref">Read more</a></p>
  107. </div><h4 id='method.bytes' class="method"><span id='bytes.v' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.bytes' class='fnname'>bytes</a>(self) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/struct.Bytes.html" title="struct std::io::Bytes">Bytes</a>&lt;Self&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div><a class='srclink' href='https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#799-801' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Transforms this <code>Read</code> instance to an [<code>Iterator</code>] over its bytes. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.bytes">Read more</a></p>
  108. </div><h4 id='method.chars' class="method"><span id='chars.v' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.chars' class='fnname'>chars</a>(self) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/struct.Chars.html" title="struct std::io::Chars">Chars</a>&lt;Self&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#846-848' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='stability'><div class='stab deprecated'>Deprecated since 1.27.0<p>: Use str::from_utf8 instead:
  109. https://doc.rust-lang.org/nightly/std/str/struct.Utf8Error.html#examples</p>
  110. </div><div class='stab unstable'><details><summary><span class=microscope>🔬</span> This is a nightly-only experimental API. (<code>io</code>)</summary><p>the semantics of a partial read/write of where errors happen is currently unclear and may change</p>
  111. </details></div></div><div class='docblock'><p>Transforms this <code>Read</code> instance to an [<code>Iterator</code>] over [<code>char</code>]s. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.chars">Read more</a></p>
  112. </div><h4 id='method.chain' class="method"><span id='chain.v' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.chain' class='fnname'>chain</a>&lt;R&gt;(self, next: R) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/struct.Chain.html" title="struct std::io::Chain">Chain</a>&lt;Self, R&gt; <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;R: <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a>,&nbsp;</span></code></span></td><td><span class='out-of-band'><div class='ghost'></div><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div><a class='srclink' href='https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#881-883' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Creates an adaptor which will chain this stream with another. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.chain">Read more</a></p>
  113. </div><h4 id='method.take' class="method"><span id='take.v' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.take' class='fnname'>take</a>(self, limit: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/struct.Take.html" title="struct std::io::Take">Take</a>&lt;Self&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div><a class='srclink' href='https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#917-919' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><div class='docblock'><p>Creates an adaptor which will read at most <code>limit</code> bytes from it. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.take">Read more</a></p>
  114. </div></div></div>
  115. <h2 id='foreign-impls' class='small-section-header'>
  116. Implementations on Foreign Types<a href='#foreign-impls' class='anchor'></a>
  117. </h2>
  118. <h3 id='impl-RngCore' class='impl'><span class='in-band'><table class='table-display'><tbody><tr><td><code>impl&lt;'a, R:&nbsp;<a class="trait" href="../rand_core/trait.RngCore.html" title="trait rand_core::RngCore">RngCore</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>&gt; <a class="trait" href="../rand_core/trait.RngCore.html" title="trait rand_core::RngCore">RngCore</a> for <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;'a mut </a>R</code><a href='#impl-RngCore' class='anchor'></a></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rand_core/lib.rs.html#343-363' title='goto source code'>[src]</a></span></td></tr></tbody></table></h3><span class='docblock autohide'><div class='impl-items'><h4 id='method.next_u32' class="method"><span id='next_u32.v-1' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='#method.next_u32' class='fnname'>next_u32</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rand_core/lib.rs.html#345-347' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><h4 id='method.next_u64' class="method"><span id='next_u64.v-1' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='#method.next_u64' class='fnname'>next_u64</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rand_core/lib.rs.html#350-352' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><h4 id='method.fill_bytes' class="method"><span id='fill_bytes.v-1' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='#method.fill_bytes' class='fnname'>fill_bytes</a>(&amp;mut self, dest: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;mut [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>)</code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rand_core/lib.rs.html#355-357' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><h4 id='method.try_fill_bytes' class="method"><span id='try_fill_bytes.v-1' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='#method.try_fill_bytes' class='fnname'>try_fill_bytes</a>(&amp;mut self, dest: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;mut [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, <a class="struct" href="../rand_core/struct.Error.html" title="struct rand_core::Error">Error</a>&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rand_core/lib.rs.html#360-362' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4></div></span><h3 id='impl-RngCore-1' class='impl'><span class='in-band'><table class='table-display'><tbody><tr><td><code>impl&lt;R:&nbsp;<a class="trait" href="../rand_core/trait.RngCore.html" title="trait rand_core::RngCore">RngCore</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>&gt; <a class="trait" href="../rand_core/trait.RngCore.html" title="trait rand_core::RngCore">RngCore</a> for <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;R&gt;</code><a href='#impl-RngCore-1' class='anchor'></a></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rand_core/lib.rs.html#369-389' title='goto source code'>[src]</a></span></td></tr></tbody></table></h3><span class='docblock autohide'><div class='impl-items'><h4 id='method.next_u32-1' class="method"><span id='next_u32.v-2' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='#method.next_u32' class='fnname'>next_u32</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rand_core/lib.rs.html#371-373' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><h4 id='method.next_u64-1' class="method"><span id='next_u64.v-2' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='#method.next_u64' class='fnname'>next_u64</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a></code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rand_core/lib.rs.html#376-378' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><h4 id='method.fill_bytes-1' class="method"><span id='fill_bytes.v-2' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='#method.fill_bytes' class='fnname'>fill_bytes</a>(&amp;mut self, dest: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;mut [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>)</code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rand_core/lib.rs.html#381-383' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4><h4 id='method.try_fill_bytes-1' class="method"><span id='try_fill_bytes.v-2' class='invisible'><table class='table-display'><tbody><tr><td><code>fn <a href='#method.try_fill_bytes' class='fnname'>try_fill_bytes</a>(&amp;mut self, dest: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;mut [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, <a class="struct" href="../rand_core/struct.Error.html" title="struct rand_core::Error">Error</a>&gt;</code></span></td><td><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rand_core/lib.rs.html#386-388' title='goto source code'>[src]</a></td></tr></tbody></table></span></h4></div></span>
  119. <h2 id='implementors' class='small-section-header'>
  120. Implementors<a href='#implementors' class='anchor'></a>
  121. </h2>
  122. <ul class='item-list' id='implementors-list'>
  123. <li><table class='table-display'><tbody><tr><td><code>impl&lt;R:&nbsp;<a class="trait" href="../rand_core/block/trait.BlockRngCore.html" title="trait rand_core::block::BlockRngCore">BlockRngCore</a>&lt;Item = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>&gt;&gt; RngCore for <a class="struct" href="../rand_core/block/struct.BlockRng.html" title="struct rand_core::block::BlockRng">BlockRng</a>&lt;R&gt; <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;R as <a class="trait" href="../rand_core/block/trait.BlockRngCore.html" title="trait rand_core::block::BlockRngCore">BlockRngCore</a>&gt;::<a class="type" href="../rand_core/block/trait.BlockRngCore.html#associatedtype.Results" title="type rand_core::block::BlockRngCore::Results">Results</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>&gt; + <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>&gt;,&nbsp;</span></code><td><div class='out-of-band'><a class='srclink' href='../src/rand_core/block.rs.html#175-281' title='goto source code'>[src]</a></div></td></tr></tbody></table></li>
  124. <li><table class='table-display'><tbody><tr><td><code>impl&lt;R:&nbsp;<a class="trait" href="../rand_core/block/trait.BlockRngCore.html" title="trait rand_core::block::BlockRngCore">BlockRngCore</a>&lt;Item = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>&gt;&gt; RngCore for <a class="struct" href="../rand_core/block/struct.BlockRng64.html" title="struct rand_core::block::BlockRng64">BlockRng64</a>&lt;R&gt; <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;R as <a class="trait" href="../rand_core/block/trait.BlockRngCore.html" title="trait rand_core::block::BlockRngCore">BlockRngCore</a>&gt;::<a class="type" href="../rand_core/block/trait.BlockRngCore.html#associatedtype.Results" title="type rand_core::block::BlockRngCore::Results">Results</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>&gt; + <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>&gt;,&nbsp;</span></code><td><div class='out-of-band'><a class='srclink' href='../src/rand_core/block.rs.html#383-488' title='goto source code'>[src]</a></div></td></tr></tbody></table></li>
  125. </ul><script type="text/javascript">window.inlined_types=new Set([]);</script><script type="text/javascript" async
  126. src="../implementors/rand_core/trait.RngCore.js">
  127. </script></section><section id="search" class="content hidden"></section><section class="footer"></section><aside id="help" class="hidden"><div><h1 class="hidden">Help</h1><div class="shortcuts"><h2>Keyboard Shortcuts</h2><dl><dt><kbd>?</kbd></dt><dd>Show this help dialog</dd><dt><kbd>S</kbd></dt><dd>Focus the search field</dd><dt><kbd>↑</kbd></dt><dd>Move up in search results</dd><dt><kbd>↓</kbd></dt><dd>Move down in search results</dd><dt><kbd>↹</kbd></dt><dd>Switch tab</dd><dt><kbd>&#9166;</kbd></dt><dd>Go to active search result</dd><dt><kbd>+</kbd></dt><dd>Expand all sections</dd><dt><kbd>-</kbd></dt><dd>Collapse all sections</dd></dl></div><div class="infos"><h2>Search Tricks</h2><p>Prefix searches with a type followed by a colon (e.g. <code>fn:</code>) to restrict the search to a given type.</p><p>Accepted types are: <code>fn</code>, <code>mod</code>, <code>struct</code>, <code>enum</code>, <code>trait</code>, <code>type</code>, <code>macro</code>, and <code>const</code>.</p><p>Search functions by type signature (e.g. <code>vec -> usize</code> or <code>* -> vec</code>)</p><p>Search multiple things at once by splitting your query with comma (e.g. <code>str,u8</code> or <code>String,struct:Vec,test</code>)</p></div></div></aside><script>window.rootPath = "../";window.currentCrate = "rand_core";</script><script src="../aliases.js"></script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>