mentat/tokio_core/net/trait.UdpCodec.html
2018-08-22 17:04:13 +00:00

176 lines
No EOL
11 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 `UdpCodec` trait in crate `tokio_core`.">
<meta name="keywords" content="rust, rustlang, rust-lang, UdpCodec">
<title>tokio_core::net::UdpCodec - 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="../../main.css" id="themeStyle">
<script src="../../storage.js"></script>
</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>
<p class='location'>Trait UdpCodec</p><div class="sidebar-elems"><div class="block items"><a class="sidebar-title" href="#associated-types">Associated Types</a><div class="sidebar-links"><a href="#associatedtype.In">In</a><a href="#associatedtype.Out">Out</a></div><a class="sidebar-title" href="#required-methods">Required Methods</a><div class="sidebar-links"><a href="#tymethod.decode">decode</a><a href="#tymethod.encode">encode</a></div><a class="sidebar-title" href="#implementors">Implementors</a></div><p class='location'><a href='../index.html'>tokio_core</a>::<wbr><a href='index.html'>net</a></p><script>window.sidebarCurrent = {name: 'UdpCodec', 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">
</div>
</form>
</nav>
<section id='main' class="content">
<h1 class='fqn'><span class='in-band'>Trait <a href='../index.html'>tokio_core</a>::<wbr><a href='index.html'>net</a>::<wbr><a class="trait" href=''>UdpCodec</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/tokio_core/net/udp/frame.rs.html#22-51' title='goto source code'>[src]</a></span></h1>
<pre class='rust trait'>pub trait UdpCodec {
type <a href='#associatedtype.In' class="type">In</a>;
type <a href='#associatedtype.Out' class="type">Out</a>;
fn <a href='#tymethod.decode' class='fnname'>decode</a>(&amp;mut self, src: &amp;<a class="enum" href="https://doc.rust-lang.org/nightly/std/net/addr/enum.SocketAddr.html" title="enum std::net::addr::SocketAddr">SocketAddr</a>, buf: <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="type" href="https://doc.rust-lang.org/nightly/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;Self::<a class="type" href="../../tokio_core/net/trait.UdpCodec.html#associatedtype.In" title="type tokio_core::net::UdpCodec::In">In</a>&gt;;
<div class='item-spacer'></div> fn <a href='#tymethod.encode' class='fnname'>encode</a>(&amp;mut self, msg: Self::<a class="type" href="../../tokio_core/net/trait.UdpCodec.html#associatedtype.Out" title="type tokio_core::net::UdpCodec::Out">Out</a>, 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/std/net/addr/enum.SocketAddr.html" title="enum std::net::addr::SocketAddr">SocketAddr</a>;
}</pre><div class='docblock'><p>Encoding of frames via buffers.</p>
<p>This trait is used when constructing an instance of <code>UdpFramed</code> and provides
the <code>In</code> and <code>Out</code> types which are decoded and encoded from the socket,
respectively.</p>
<p>Because UDP is a connectionless protocol, the <code>decode</code> method receives the
address where data came from and the <code>encode</code> method is also responsible for
determining the remote host to which the datagram should be sent</p>
<p>The trait itself is implemented on a type that can track state for decoding
or encoding, which is particularly useful for streaming parsers. In many
cases, though, this type will simply be a unit struct (e.g. <code>struct HttpCodec</code>).</p>
</div>
<h2 id='associated-types' class='small-section-header'>
Associated Types<a href='#associated-types' class='anchor'></a>
</h2>
<div class='methods'>
<h3 id='associatedtype.In' class='method'><span id='In.t' class='invisible'><code>type <a href='#associatedtype.In' class="type">In</a></code></span></h3><div class='docblock'><p>The type of decoded frames.</p>
</div><h3 id='associatedtype.Out' class='method'><span id='Out.t' class='invisible'><code>type <a href='#associatedtype.Out' class="type">Out</a></code></span></h3><div class='docblock'><p>The type of frames to be encoded.</p>
</div></div>
<h2 id='required-methods' class='small-section-header'>
Required Methods<a href='#required-methods' class='anchor'></a>
</h2>
<div class='methods'>
<h3 id='tymethod.decode' class='method'><span id='decode.v' class='invisible'><code>fn <a href='#tymethod.decode' class='fnname'>decode</a>(&amp;mut self, src: &amp;<a class="enum" href="https://doc.rust-lang.org/nightly/std/net/addr/enum.SocketAddr.html" title="enum std::net::addr::SocketAddr">SocketAddr</a>, buf: <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="type" href="https://doc.rust-lang.org/nightly/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;Self::<a class="type" href="../../tokio_core/net/trait.UdpCodec.html#associatedtype.In" title="type tokio_core::net::UdpCodec::In">In</a>&gt;</code></span></h3><div class='docblock'><p>Attempts to decode a frame from the provided buffer of bytes.</p>
<p>This method is called by <code>UdpFramed</code> on a single datagram which has been
read from a socket. The <code>buf</code> argument contains the data that was
received from the remote address, and <code>src</code> is the address the data came
from. Note that typically this method should require the entire contents
of <code>buf</code> to be valid or otherwise return an error with trailing data.</p>
<p>Finally, if the bytes in the buffer are malformed then an error is
returned indicating why. This informs <code>Framed</code> that the stream is now
corrupt and should be terminated.</p>
</div><h3 id='tymethod.encode' class='method'><span id='encode.v' class='invisible'><code>fn <a href='#tymethod.encode' class='fnname'>encode</a>(&amp;mut self, msg: Self::<a class="type" href="../../tokio_core/net/trait.UdpCodec.html#associatedtype.Out" title="type tokio_core::net::UdpCodec::Out">Out</a>, 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/std/net/addr/enum.SocketAddr.html" title="enum std::net::addr::SocketAddr">SocketAddr</a></code></span></h3><div class='docblock'><p>Encodes a frame into the buffer provided.</p>
<p>This method will encode <code>msg</code> into the byte buffer provided by <code>buf</code>.
The <code>buf</code> provided is an internal buffer of the <code>Framed</code> instance and
will be written out when possible.</p>
<p>The encode method also determines the destination to which the buffer
should be directed, which will be returned as a <code>SocketAddr</code>.</p>
</div></div>
<h2 id='implementors' class='small-section-header'>
Implementors<a href='#implementors' class='anchor'></a>
</h2>
<ul class='item-list' id='implementors-list'>
</ul><script type="text/javascript" async
src="../../implementors/tokio_core/net/trait.UdpCodec.js">
</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>
</div>
</div>
</aside>
<script>
window.rootPath = "../../";
window.currentCrate = "tokio_core";
</script>
<script src="../../main.js"></script>
<script defer src="../../search-index.js"></script>
</body>
</html>