Files
mercator_service/encoding_rs/struct.Decoder.html

194 lines
44 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
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="API documentation for the Rust `Decoder` struct in crate `encoding_rs`."><meta name="keywords" content="rust, rustlang, rust-lang, Decoder"><title>encoding_rs::Decoder - 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><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="shortcut icon" href="../favicon.ico"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc struct"><!--[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='../encoding_rs/index.html'><div class='logo-container'><img src='../rust-logo.png' alt='logo'></div></a><p class='location'>Struct Decoder</p><div class="sidebar-elems"><div class="block items"><a class="sidebar-title" href="#methods">Methods</a><div class="sidebar-links"><a href="#method.decode_to_str">decode_to_str</a><a href="#method.decode_to_str_without_replacement">decode_to_str_without_replacement</a><a href="#method.decode_to_string">decode_to_string</a><a href="#method.decode_to_string_without_replacement">decode_to_string_without_replacement</a><a href="#method.decode_to_utf16">decode_to_utf16</a><a href="#method.decode_to_utf16_without_replacement">decode_to_utf16_without_replacement</a><a href="#method.decode_to_utf8">decode_to_utf8</a><a href="#method.decode_to_utf8_without_replacement">decode_to_utf8_without_replacement</a><a href="#method.encoding">encoding</a><a href="#method.latin1_byte_compatible_up_to">latin1_byte_compatible_up_to</a><a href="#method.max_utf16_buffer_length">max_utf16_buffer_length</a><a href="#method.max_utf8_buffer_length">max_utf8_buffer_length</a><a href="#method.max_utf8_buffer_length_without_replacement">max_utf8_buffer_length_without_replacement</a></div><a class="sidebar-title" href="#synthetic-implementations">Auto Trait Implementations</a><div class="sidebar-links"><a href="#impl-RefUnwindSafe">RefUnwindSafe</a><a href="#impl-Send">Send</a><a href="#impl-Sync">Sync</a><a href="#impl-Unpin">Unpin</a><a href="#impl-UnwindSafe">UnwindSafe</a></div><a class="sidebar-title" href="#blanket-implementations">Blanket Implementations</a><div class="sidebar-links"><a href="#impl-Any">Any</a><a href="#impl-Borrow%3CT%3E">Borrow&lt;T&gt;</a><a href="#impl-BorrowMut%3CT%3E">BorrowMut&lt;T&gt;</a><a href="#impl-From%3CT%3E">From&lt;T&gt;</a><a href="#impl-Into%3CU%3E">Into&lt;U&gt;</a><a href="#impl-TryFrom%3CU%3E">TryFrom&lt;U&gt;</a><a href="#impl-TryInto%3CU%3E">TryInto&lt;U&gt;</a></div></div><p class='location'><a href='index.html'>encoding_rs</a></p><script>window.sidebarCurrent = {name: 'Decoder', ty: 'struct', 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"><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><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='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/encoding_rs/lib.rs.html#3610-3614' title='goto source code'>[src]</a></span><span class='in-band'>Struct <a href='index.html'>encoding_rs</a>::<wbr><a class="struct" href=''>Decoder</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><pre class='rust struct'>pub struct Decoder { /* fields omitted */ }</pre></div><div class='docblock'><p>A converter that decodes a byte stream into Unicode according to a
character encoding in a streaming (incremental) manner.</p>
<p>The various <code>decode_*</code> methods take an input buffer (<code>src</code>) and an output
buffer <code>dst</code> both of which are caller-allocated. There are variants for
both UTF-8 and UTF-16 output buffers.</p>
<p>A <code>decode_*</code> method decodes bytes from <code>src</code> into Unicode characters stored
into <code>dst</code> until one of the following three things happens:</p>
<ol>
<li>
<p>A malformed byte sequence is encountered (<code>*_without_replacement</code>
variants only).</p>
</li>
<li>
<p>The output buffer has been filled so near capacity that the decoder
cannot be sure that processing an additional byte of input wouldn't
cause so much output that the output buffer would overflow.</p>
</li>
<li>
<p>All the input bytes have been processed.</p>
</li>
</ol>
<p>The <code>decode_*</code> method then returns tuple of a status indicating which one
of the three reasons to return happened, how many input bytes were read,
how many output code units (<code>u8</code> when decoding into UTF-8 and <code>u16</code>
when decoding to UTF-16) were written (except when decoding into <code>String</code>,
whose length change indicates this), and in the case of the
variants performing replacement, a boolean indicating whether an error was
replaced with the REPLACEMENT CHARACTER during the call.</p>
<p>The number of bytes &quot;written&quot; is what's logically written. Garbage may be
written in the output buffer beyond the point logically written to.
Therefore, if you wish to decode into an <code>&amp;mut str</code>, you should use the
methods that take an <code>&amp;mut str</code> argument instead of the ones that take an
<code>&amp;mut [u8]</code> argument. The former take care of overwriting the trailing
garbage to ensure the UTF-8 validity of the <code>&amp;mut str</code> as a whole, but the
latter don't.</p>
<p>In the case of the <code>*_without_replacement</code> variants, the status is a
<a href="enum.DecoderResult.html"><code>DecoderResult</code></a> enumeration (possibilities <code>Malformed</code>, <code>OutputFull</code> and
<code>InputEmpty</code> corresponding to the three cases listed above).</p>
<p>In the case of methods whose name does not end with
<code>*_without_replacement</code>, malformed sequences are automatically replaced
with the REPLACEMENT CHARACTER and errors do not cause the methods to
return early.</p>
<p>When decoding to UTF-8, the output buffer must have at least 4 bytes of
space. When decoding to UTF-16, the output buffer must have at least two
UTF-16 code units (<code>u16</code>) of space.</p>
<p>When decoding to UTF-8 without replacement, the methods are guaranteed
not to return indicating that more output space is needed if the length
of the output buffer is at least the length returned by
<a href="#method.max_utf8_buffer_length_without_replacement"><code>max_utf8_buffer_length_without_replacement()</code></a>. When decoding to UTF-8
with replacement, the length of the output buffer that guarantees the
methods not to return indicating that more output space is needed is given
by <a href="#method.max_utf8_buffer_length"><code>max_utf8_buffer_length()</code></a>. When decoding to UTF-16 with
or without replacement, the length of the output buffer that guarantees
the methods not to return indicating that more output space is needed is
given by <a href="#method.max_utf16_buffer_length"><code>max_utf16_buffer_length()</code></a>.</p>
<p>The output written into <code>dst</code> is guaranteed to be valid UTF-8 or UTF-16,
and the output after each <code>decode_*</code> call is guaranteed to consist of
complete characters. (I.e. the code unit sequence for the last character is
guaranteed not to be split across output buffers.)</p>
<p>The boolean argument <code>last</code> indicates that the end of the stream is reached
when all the bytes in <code>src</code> have been consumed.</p>
<p>A <code>Decoder</code> object can be used to incrementally decode a byte stream.</p>
<p>During the processing of a single stream, the caller must call <code>decode_*</code>
zero or more times with <code>last</code> set to <code>false</code> and then call <code>decode_*</code> at
least once with <code>last</code> set to <code>true</code>. If <code>decode_*</code> returns <code>InputEmpty</code>,
the processing of the stream has ended. Otherwise, the caller must call
<code>decode_*</code> again with <code>last</code> set to <code>true</code> (or treat a <code>Malformed</code> result as
a fatal error).</p>
<p>Once the stream has ended, the <code>Decoder</code> object must not be used anymore.
That is, you need to create another one to process another stream.</p>
<p>When the decoder returns <code>OutputFull</code> or the decoder returns <code>Malformed</code> and
the caller does not wish to treat it as a fatal error, the input buffer
<code>src</code> may not have been completely consumed. In that case, the caller must
pass the unconsumed contents of <code>src</code> to <code>decode_*</code> again upon the next
call.</p>
<h1 id="infinite-loops" class="section-header"><a href="#infinite-loops">Infinite loops</a></h1>
<p>When converting with a fixed-size output buffer whose size is too small to
accommodate one character or (when applicable) one numeric character
reference of output, an infinite loop ensues. When converting with a
fixed-size output buffer, it generally makes sense to make the buffer
fairly large (e.g. couple of kilobytes).</p>
</div><h2 id='methods' class='small-section-header'>Methods<a href='#methods' class='anchor'></a></h2><h3 id='impl' class='impl'><code class='in-band'>impl <a class="struct" href="../encoding_rs/struct.Decoder.html" title="struct encoding_rs::Decoder">Decoder</a></code><a href='#impl' class='anchor'></a><a class='srclink' href='../src/encoding_rs/lib.rs.html#3616-4238' title='goto source code'>[src]</a></h3><div class='impl-items'><h4 id='method.encoding' class="method"><code id='encoding.v'>pub fn <a href='#method.encoding' class='fnname'>encoding</a>(&amp;self) -&gt; &amp;'static <a class="struct" href="../encoding_rs/struct.Encoding.html" title="struct encoding_rs::Encoding">Encoding</a></code><a class='srclink' href='../src/encoding_rs/lib.rs.html#3646-3648' title='goto source code'>[src]</a></h4><div class='docblock'><p>The <code>Encoding</code> this <code>Decoder</code> is for.</p>
<p>BOM sniffing can change the return value of this method during the life
of the decoder.</p>
<p>Available via the C wrapper.</p>
</div><h4 id='method.max_utf8_buffer_length' class="method"><code id='max_utf8_buffer_length.v'>pub fn <a href='#method.max_utf8_buffer_length' class='fnname'>max_utf8_buffer_length</a>(&amp;self, byte_length: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;</code><a class='srclink' href='../src/encoding_rs/lib.rs.html#3659-3736' title='goto source code'>[src]</a></h4><div class='docblock'><p>Query the worst-case UTF-8 output size <em>with replacement</em>.</p>
<p>Returns the size of the output buffer in UTF-8 code units (<code>u8</code>)
that will not overflow given the current state of the decoder and
<code>byte_length</code> number of additional input bytes when decoding with
errors handled by outputting a REPLACEMENT CHARACTER for each malformed
sequence or <code>None</code> if <code>usize</code> would overflow.</p>
<p>Available via the C wrapper.</p>
</div><h4 id='method.max_utf8_buffer_length_without_replacement' class="method"><code id='max_utf8_buffer_length_without_replacement.v'>pub fn <a href='#method.max_utf8_buffer_length_without_replacement' class='fnname'>max_utf8_buffer_length_without_replacement</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;self, <br>&nbsp;&nbsp;&nbsp;&nbsp;byte_length: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a><br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;</code><a class='srclink' href='../src/encoding_rs/lib.rs.html#3749-3833' title='goto source code'>[src]</a></h4><div class='docblock'><p>Query the worst-case UTF-8 output size <em>without replacement</em>.</p>
<p>Returns the size of the output buffer in UTF-8 code units (<code>u8</code>)
that will not overflow given the current state of the decoder and
<code>byte_length</code> number of additional input bytes when decoding without
replacement error handling or <code>None</code> if <code>usize</code> would overflow.</p>
<p>Note that this value may be too small for the <code>_with_replacement</code> case.
Use <code>max_utf8_buffer_length()</code> for that case.</p>
<p>Available via the C wrapper.</p>
</div><h4 id='method.decode_to_utf8' class="method"><code id='decode_to_utf8.v'>pub fn <a href='#method.decode_to_utf8' class='fnname'>decode_to_utf8</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;src: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</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>, <br>&nbsp;&nbsp;&nbsp;&nbsp;dst: <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>, <br>&nbsp;&nbsp;&nbsp;&nbsp;last: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><br>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="enum" href="../encoding_rs/enum.CoderResult.html" title="enum encoding_rs::CoderResult">CoderResult</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a></code><a class='srclink' href='../src/encoding_rs/lib.rs.html#3842-3891' title='goto source code'>[src]</a></h4><div class='docblock'><p>Incrementally decode a byte stream into UTF-8 with malformed sequences
replaced with the REPLACEMENT CHARACTER.</p>
<p>See the documentation of the struct for documentation for <code>decode_*</code>
methods collectively.</p>
<p>Available via the C wrapper.</p>
</div><h4 id='method.decode_to_str' class="method"><code id='decode_to_str.v'>pub fn <a href='#method.decode_to_str' class='fnname'>decode_to_str</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;src: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</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>, <br>&nbsp;&nbsp;&nbsp;&nbsp;dst: &amp;mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;last: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><br>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="enum" href="../encoding_rs/enum.CoderResult.html" title="enum encoding_rs::CoderResult">CoderResult</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a></code><a class='srclink' href='../src/encoding_rs/lib.rs.html#3905-3930' title='goto source code'>[src]</a></h4><div class='docblock'><p>Incrementally decode a byte stream into UTF-8 with malformed sequences
replaced with the REPLACEMENT CHARACTER with type system signaling
of UTF-8 validity.</p>
<p>This methods calls <code>decode_to_utf8</code> and then zeroes
out up to three bytes that aren't logically part of the write in order
to retain the UTF-8 validity even for the unwritten part of the buffer.</p>
<p>See the documentation of the struct for documentation for <code>decode_*</code>
methods collectively.</p>
<p>Available to Rust only.</p>
</div><h4 id='method.decode_to_string' class="method"><code id='decode_to_string.v'>pub fn <a href='#method.decode_to_string' class='fnname'>decode_to_string</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;src: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</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>, <br>&nbsp;&nbsp;&nbsp;&nbsp;dst: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;last: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><br>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="enum" href="../encoding_rs/enum.CoderResult.html" title="enum encoding_rs::CoderResult">CoderResult</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a></code><a class='srclink' href='../src/encoding_rs/lib.rs.html#3949-3965' title='goto source code'>[src]</a></h4><div class='docblock'><p>Incrementally decode a byte stream into UTF-8 with malformed sequences
replaced with the REPLACEMENT CHARACTER using a <code>String</code> receiver.</p>
<p>Like the others, this method follows the logic that the output buffer is
caller-allocated. This method treats the capacity of the <code>String</code> as
the output limit. That is, this method guarantees not to cause a
reallocation of the backing buffer of <code>String</code>.</p>
<p>The return value is a tuple that contains the <code>DecoderResult</code>, the
number of bytes read and a boolean indicating whether replacements
were done. The number of bytes written is signaled via the length of
the <code>String</code> changing.</p>
<p>See the documentation of the struct for documentation for <code>decode_*</code>
methods collectively.</p>
<p>Available to Rust only.</p>
</div><h4 id='method.decode_to_utf8_without_replacement' class="method"><code id='decode_to_utf8_without_replacement.v'>pub fn <a href='#method.decode_to_utf8_without_replacement' class='fnname'>decode_to_utf8_without_replacement</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;src: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</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>, <br>&nbsp;&nbsp;&nbsp;&nbsp;dst: <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>, <br>&nbsp;&nbsp;&nbsp;&nbsp;last: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><br>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="enum" href="../encoding_rs/enum.DecoderResult.html" title="enum encoding_rs::DecoderResult">DecoderResult</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a></code><a class='srclink' href='../src/encoding_rs/macros.rs.html#1293-1502' title='goto source code'>[src]</a></h4><div class='docblock'><p>Incrementally decode a byte stream into UTF-8
<em>without replacement</em>.</p>
<p>See the documentation of the struct for
documentation for <code>decode_*</code> methods
collectively.</p>
<p>Available via the C wrapper.</p>
</div><h4 id='method.decode_to_str_without_replacement' class="method"><code id='decode_to_str_without_replacement.v'>pub fn <a href='#method.decode_to_str_without_replacement' class='fnname'>decode_to_str_without_replacement</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;src: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</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>, <br>&nbsp;&nbsp;&nbsp;&nbsp;dst: &amp;mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;last: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><br>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="enum" href="../encoding_rs/enum.DecoderResult.html" title="enum encoding_rs::DecoderResult">DecoderResult</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a></code><a class='srclink' href='../src/encoding_rs/lib.rs.html#3995-4020' title='goto source code'>[src]</a></h4><div class='docblock'><p>Incrementally decode a byte stream into UTF-8 with type system signaling
of UTF-8 validity.</p>
<p>This methods calls <code>decode_to_utf8</code> and then zeroes out up to three
bytes that aren't logically part of the write in order to retain the
UTF-8 validity even for the unwritten part of the buffer.</p>
<p>See the documentation of the struct for documentation for <code>decode_*</code>
methods collectively.</p>
<p>Available to Rust only.</p>
</div><h4 id='method.decode_to_string_without_replacement' class="method"><code id='decode_to_string_without_replacement.v'>pub fn <a href='#method.decode_to_string_without_replacement' class='fnname'>decode_to_string_without_replacement</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;src: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</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>, <br>&nbsp;&nbsp;&nbsp;&nbsp;dst: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;last: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><br>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="enum" href="../encoding_rs/enum.DecoderResult.html" title="enum encoding_rs::DecoderResult">DecoderResult</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a></code><a class='srclink' href='../src/encoding_rs/lib.rs.html#4037-4053' title='goto source code'>[src]</a></h4><div class='docblock'><p>Incrementally decode a byte stream into UTF-8 using a <code>String</code> receiver.</p>
<p>Like the others, this method follows the logic that the output buffer is
caller-allocated. This method treats the capacity of the <code>String</code> as
the output limit. That is, this method guarantees not to cause a
reallocation of the backing buffer of <code>String</code>.</p>
<p>The return value is a pair that contains the <code>DecoderResult</code> and the
number of bytes read. The number of bytes written is signaled via
the length of the <code>String</code> changing.</p>
<p>See the documentation of the struct for documentation for <code>decode_*</code>
methods collectively.</p>
<p>Available to Rust only.</p>
</div><h4 id='method.max_utf16_buffer_length' class="method"><code id='max_utf16_buffer_length.v'>pub fn <a href='#method.max_utf16_buffer_length' class='fnname'>max_utf16_buffer_length</a>(&amp;self, byte_length: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;</code><a class='srclink' href='../src/encoding_rs/lib.rs.html#4067-4141' title='goto source code'>[src]</a></h4><div class='docblock'><p>Query the worst-case UTF-16 output size (with or without replacement).</p>
<p>Returns the size of the output buffer in UTF-16 code units (<code>u16</code>)
that will not overflow given the current state of the decoder and
<code>byte_length</code> number of additional input bytes or <code>None</code> if <code>usize</code>
would overflow.</p>
<p>Since the REPLACEMENT CHARACTER fits into one UTF-16 code unit, the
return value of this method applies also in the
<code>_without_replacement</code> case.</p>
<p>Available via the C wrapper.</p>
</div><h4 id='method.decode_to_utf16' class="method"><code id='decode_to_utf16.v'>pub fn <a href='#method.decode_to_utf16' class='fnname'>decode_to_utf16</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;src: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</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>, <br>&nbsp;&nbsp;&nbsp;&nbsp;dst: <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.u16.html">u16</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;last: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><br>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="enum" href="../encoding_rs/enum.CoderResult.html" title="enum encoding_rs::CoderResult">CoderResult</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a></code><a class='srclink' href='../src/encoding_rs/lib.rs.html#4150-4193' title='goto source code'>[src]</a></h4><div class='docblock'><p>Incrementally decode a byte stream into UTF-16 with malformed sequences
replaced with the REPLACEMENT CHARACTER.</p>
<p>See the documentation of the struct for documentation for <code>decode_*</code>
methods collectively.</p>
<p>Available via the C wrapper.</p>
</div><h4 id='method.decode_to_utf16_without_replacement' class="method"><code id='decode_to_utf16_without_replacement.v'>pub fn <a href='#method.decode_to_utf16_without_replacement' class='fnname'>decode_to_utf16_without_replacement</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;&amp;mut self, <br>&nbsp;&nbsp;&nbsp;&nbsp;src: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</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>, <br>&nbsp;&nbsp;&nbsp;&nbsp;dst: <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.u16.html">u16</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;last: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><br>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">(</a><a class="enum" href="../encoding_rs/enum.DecoderResult.html" title="enum encoding_rs::DecoderResult">DecoderResult</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">)</a></code><a class='srclink' href='../src/encoding_rs/macros.rs.html#1293-1502' title='goto source code'>[src]</a></h4><div class='docblock'><p>Incrementally decode a byte stream into UTF-16
<em>without replacement</em>.</p>
<p>See the documentation of the struct for
documentation for <code>decode_*</code> methods
collectively.</p>
<p>Available via the C wrapper.</p>
</div><h4 id='method.latin1_byte_compatible_up_to' class="method"><code id='latin1_byte_compatible_up_to.v'>pub fn <a href='#method.latin1_byte_compatible_up_to' class='fnname'>latin1_byte_compatible_up_to</a>(&amp;self, bytes: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</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/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>&gt;</code><a class='srclink' href='../src/encoding_rs/lib.rs.html#4229-4237' title='goto source code'>[src]</a></h4><div class='docblock'><p>Checks for compatibility with storing Unicode scalar values as unsigned
bytes taking into account the state of the decoder.</p>
<p>Returns <code>None</code> if the decoder is not in a neutral state, including waiting
for the BOM, or if the encoding is never Latin1-byte-compatible.</p>
<p>Otherwise returns the index of the first byte whose unsigned value doesn't
directly correspond to the decoded Unicode scalar value, or the length
of the input if all bytes in the input decode directly to scalar values
corresponding to the unsigned byte values.</p>
<p>Does not change the state of the decoder.</p>
<p>Do not use this unless you are supporting SpiderMonkey/V8-style string
storage optimizations.</p>
<p>Available via the C wrapper.</p>
</div></div><h2 id='synthetic-implementations' class='small-section-header'>Auto Trait Implementations<a href='#synthetic-implementations' class='anchor'></a></h2><div id='synthetic-implementations-list'><h3 id='impl-RefUnwindSafe' class='impl'><code class='in-band'>impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/panic/trait.RefUnwindSafe.html" title="trait std::panic::RefUnwindSafe">RefUnwindSafe</a> for <a class="struct" href="../encoding_rs/struct.Decoder.html" title="struct encoding_rs::Decoder">Decoder</a></code><a href='#impl-RefUnwindSafe' class='anchor'></a></h3><div class='impl-items'></div><h3 id='impl-Send' class='impl'><code class='in-band'>impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="struct" href="../encoding_rs/struct.Decoder.html" title="struct encoding_rs::Decoder">Decoder</a></code><a href='#impl-Send' class='anchor'></a></h3><div class='impl-items'></div><h3 id='impl-Sync' class='impl'><code class='in-band'>impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="../encoding_rs/struct.Decoder.html" title="struct encoding_rs::Decoder">Decoder</a></code><a href='#impl-Sync' class='anchor'></a></h3><div class='impl-items'></div><h3 id='impl-Unpin' class='impl'><code class='in-band'>impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="struct" href="../encoding_rs/struct.Decoder.html" title="struct encoding_rs::Decoder">Decoder</a></code><a href='#impl-Unpin' class='anchor'></a></h3><div class='impl-items'></div><h3 id='impl-UnwindSafe' class='impl'><code class='in-band'>impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/panic/trait.UnwindSafe.html" title="trait std::panic::UnwindSafe">UnwindSafe</a> for <a class="struct" href="../encoding_rs/struct.Decoder.html" title="struct encoding_rs::Decoder">Decoder</a></code><a href='#impl-UnwindSafe' class='anchor'></a></h3><div class='impl-items'></div></div><h2 id='blanket-implementations' class='small-section-header'>Blanket Implementations<a href='#blanket-implementations' class='anchor'></a></h2><div id='blanket-implementations-list'><h3 id='impl-Any' class='impl'><code class='in-band'>impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></code><a href='#impl-Any' class='anchor'></a><a class='srclink' href='https://doc.rust-lang.org/nightly/src/core/any.rs.html#108-112' title='goto source code'>[src]</a></h3><div class='impl-items'><h4 id='method.type_id' class="method hidden"><code id='type_id.v'>fn <a href='https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id' class='fnname'>type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></code><a class='srclink' href='https://doc.rust-lang.org/nightly/src/core/any.rs.html#109-111' title='goto source code'>[src]</a></h4><div class='docblock hidden'><p>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id">Read more</a></p>
</div></div><h3 id='impl-Borrow%3CT%3E' class='impl'><code class='in-band'>impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></code><a href='#impl-Borrow%3CT%3E' class='anchor'></a><a class='srclink' href='https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#213-217' title='goto source code'>[src]</a></h3><div class='impl-items'><h4 id='method.borrow' class="method hidden"><code id='borrow.v'>fn <a href='https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow' class='fnname'>borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;</a>T</code><a class='srclink' href='https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#214-216' title='goto source code'>[src]</a></h4><div class='docblock hidden'><p>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></p>
</div></div><h3 id='impl-BorrowMut%3CT%3E' class='impl'><code class='in-band'>impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></code><a href='#impl-BorrowMut%3CT%3E' class='anchor'></a><a class='srclink' href='https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#220-224' title='goto source code'>[src]</a></h3><div class='impl-items'><h4 id='method.borrow_mut' class="method hidden"><code id='borrow_mut.v'>fn <a href='https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut' class='fnname'>borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut </a>T</code><a class='srclink' href='https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#221-223' title='goto source code'>[src]</a></h4><div class='docblock hidden'><p>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></p>
</div></div><h3 id='impl-From%3CT%3E' class='impl'><code class='in-band'>impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for T</code><a href='#impl-From%3CT%3E' class='anchor'></a><a class='srclink' href='https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#564-568' title='goto source code'>[src]</a></h3><div class='impl-items'><h4 id='method.from' class="method hidden"><code id='from.v'>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(t: T) -&gt; T</code><a class='srclink' href='https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#565-567' title='goto source code'>[src]</a></h4><div class='docblock hidden'><p>Performs the conversion.</p>
</div></div><h3 id='impl-Into%3CU%3E' class='impl'><code class='in-band'>impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;U&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,&nbsp;</span></code><a href='#impl-Into%3CU%3E' class='anchor'></a><a class='srclink' href='https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#553-560' title='goto source code'>[src]</a></h3><div class='impl-items'><h4 id='method.into' class="method hidden"><code id='into.v'>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into' class='fnname'>into</a>(self) -&gt; U</code><a class='srclink' href='https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#557-559' title='goto source code'>[src]</a></h4><div class='docblock hidden'><p>Performs the conversion.</p>
</div></div><h3 id='impl-TryFrom%3CU%3E' class='impl'><code class='in-band'>impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,&nbsp;</span></code><a href='#impl-TryFrom%3CU%3E' class='anchor'></a><a class='srclink' href='https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#601-610' title='goto source code'>[src]</a></h3><div class='impl-items'><h4 id='associatedtype.Error' class="type"><code id='Error.t'>type <a href='https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error' class="type">Error</a> = <a class="enum" href="https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html" title="enum core::convert::Infallible">Infallible</a></code></h4><div class='docblock'><p>The type returned in the event of a conversion error.</p>
</div><h4 id='method.try_from' class="method hidden"><code id='try_from.v'>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from' class='fnname'>try_from</a>(value: U) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;T, &lt;T as <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt;&gt;::<a class="type" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</code><a class='srclink' href='https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#607-609' title='goto source code'>[src]</a></h4><div class='docblock hidden'><p>Performs the conversion.</p>
</div></div><h3 id='impl-TryInto%3CU%3E' class='impl'><code class='in-band'>impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a>&lt;U&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,&nbsp;</span></code><a href='#impl-TryInto%3CU%3E' class='anchor'></a><a class='srclink' href='https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#587-596' title='goto source code'>[src]</a></h3><div class='impl-items'><h4 id='associatedtype.Error-1' class="type"><code id='Error.t-1'>type <a href='https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error' class="type">Error</a> = &lt;U as <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="type" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a></code></h4><div class='docblock'><p>The type returned in the event of a conversion error.</p>
</div><h4 id='method.try_into' class="method hidden"><code id='try_into.v'>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into' class='fnname'>try_into</a>(self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;U, &lt;U as <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="type" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</code><a class='srclink' href='https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#593-595' title='goto source code'>[src]</a></h4><div class='docblock hidden'><p>Performs the conversion.</p>
</div></div></div></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "encoding_rs";</script><script src="../aliases.js"></script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html>