292 lines
63 KiB
HTML
292 lines
63 KiB
HTML
<!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 `FromRequest` trait in crate `actix_web`."><meta name="keywords" content="rust, rustlang, rust-lang, FromRequest"><title>actix_web::FromRequest - 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 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">☰</div><a href='../actix_web/index.html'><div class='logo-container'><img src='../rust-logo.png' alt='logo'></div></a><p class='location'>Trait FromRequest</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.Error">Error</a><a href="#associatedtype.Future">Future</a><a href="#associatedtype.Config">Config</a></div><a class="sidebar-title" href="#required-methods">Required Methods</a><div class="sidebar-links"><a href="#tymethod.from_request">from_request</a></div><a class="sidebar-title" href="#provided-methods">Provided Methods</a><div class="sidebar-links"><a href="#method.configure">configure</a><a href="#method.extract">extract</a></div><a class="sidebar-title" href="#foreign-impls">Implementations on Foreign Types</a><div class="sidebar-links"><a href="#impl-FromRequest-for-Option%3CT%3E">Option<T></a><a href="#impl-FromRequest-for-Result%3CT%2C%20T%3A%3AError%3E">Result<T, T::Error></a><a href="#impl-FromRequest-for-String">String</a></div><a class="sidebar-title" href="#implementors">Implementors</a></div><p class='location'><a href='index.html'>actix_web</a></p><script>window.sidebarCurrent = {name: 'FromRequest', 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"><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'>−</span>]</a></span><a class='srclink' href='../src/actix_web/extract.rs.html#13-40' title='goto source code'>[src]</a></span><span class='in-band'>Trait <a href='index.html'>actix_web</a>::<wbr><a class="trait" href=''>FromRequest</a></span></h1><div class="docblock type-decl hidden-by-usual-hider"><pre class='rust trait'>pub trait FromRequest: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> {
|
||
type <a href='#associatedtype.Error' class="type">Error</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><<a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a>>;
|
||
type <a href='#associatedtype.Future' class="type">Future</a>: <a class="trait" href="../futures/future/trait.IntoFuture.html" title="trait futures::future::IntoFuture">IntoFuture</a><Item = Self, Error = Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Error" title="type actix_web::FromRequest::Error">Error</a>>;
|
||
type <a href='#associatedtype.Config' class="type">Config</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + 'static;
|
||
fn <a href='#tymethod.from_request' class='fnname'>from_request</a>(req: &<a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a>, payload: &mut <a class="enum" href="../actix_web/dev/enum.Payload.html" title="enum actix_web::dev::Payload">Payload</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a>;
|
||
|
||
fn <a href='#method.extract' class='fnname'>extract</a>(req: &<a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a> { ... }
|
||
<div class='item-spacer'></div> fn <a href='#method.configure' class='fnname'>configure</a><F>(f: F) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Config" title="type actix_web::FromRequest::Config">Config</a><br> <span class="where">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Config" title="type actix_web::FromRequest::Config">Config</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Config" title="type actix_web::FromRequest::Config">Config</a></span>,
|
||
{ ... }
|
||
}</pre></div><div class='docblock'><p>Trait implemented by types that can be extracted from request.</p>
|
||
<p>Types that implement this trait can be used with <code>Route</code> handlers.</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.Error' class='method'><code id='Error.t'>type <a href='#associatedtype.Error' class="type">Error</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><<a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a>></code></h3><div class='docblock'><p>The associated error which can be returned.</p>
|
||
</div><h3 id='associatedtype.Future' class='method'><code id='Future.t'>type <a href='#associatedtype.Future' class="type">Future</a>: <a class="trait" href="../futures/future/trait.IntoFuture.html" title="trait futures::future::IntoFuture">IntoFuture</a><Item = Self, Error = Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Error" title="type actix_web::FromRequest::Error">Error</a>></code></h3><div class='docblock'><p>Future that resolves to a Self</p>
|
||
</div><h3 id='associatedtype.Config' class='method'><code id='Config.t'>type <a href='#associatedtype.Config' class="type">Config</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> + 'static</code></h3><div class='docblock'><p>Configuration for this extractor</p>
|
||
</div></div><span class='loading-content'>Loading content...</span>
|
||
<h2 id='required-methods' class='small-section-header'>Required methods<a href='#required-methods' class='anchor'></a></h2><div class='methods'><h3 id='tymethod.from_request' class='method'><code id='from_request.v'>fn <a href='#tymethod.from_request' class='fnname'>from_request</a>(req: &<a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a>, payload: &mut <a class="enum" href="../actix_web/dev/enum.Payload.html" title="enum actix_web::dev::Payload">Payload</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a></code></h3><div class='docblock'><p>Convert request to a Self</p>
|
||
</div></div><span class='loading-content'>Loading content...</span>
|
||
<h2 id='provided-methods' class='small-section-header'>Provided methods<a href='#provided-methods' class='anchor'></a></h2><div class='methods'><h3 id='method.extract' class='method'><code id='extract.v'>fn <a href='#method.extract' class='fnname'>extract</a>(req: &<a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a></code></h3><div class='docblock'><p>Convert request to a Self</p>
|
||
<p>This method uses <code>Payload::None</code> as payload stream.</p>
|
||
</div><h3 id='method.configure' class='method'><code id='configure.v'>fn <a href='#method.configure' class='fnname'>configure</a><F>(f: F) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Config" title="type actix_web::FromRequest::Config">Config</a> <span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Config" title="type actix_web::FromRequest::Config">Config</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Config" title="type actix_web::FromRequest::Config">Config</a>, </span></code></h3><div class='docblock'><p>Create and configure config instance.</p>
|
||
</div></div><span class='loading-content'>Loading content...</span>
|
||
<h2 id='foreign-impls' class='small-section-header'>Implementations on Foreign Types<a href='#foreign-impls' class='anchor'></a></h2><h3 id='impl-FromRequest-for-Option%3CT%3E' class='impl'><code class='in-band'>impl<T: 'static> <a class="trait" href="../actix_web/trait.FromRequest.html" title="trait actix_web::FromRequest">FromRequest</a> for <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><T> <span class="where fmt-newline">where<br> T: <a class="trait" href="../actix_web/trait.FromRequest.html" title="trait actix_web::FromRequest">FromRequest</a>,<br> T::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a>: 'static, </span></code><a href='#impl-FromRequest-for-Option%3CT%3E' class='anchor'></a><a class='srclink' href='../src/actix_web/extract.rs.html#90-113' title='goto source code'>[src]</a></h3><div class='docblock'><p>Optionally extract a field from the request</p>
|
||
<p>If the FromRequest for T fails, return None rather than returning an error response</p>
|
||
<h2 id="example" class="section-header"><a href="#example">Example</a></h2>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">dev</span>, <span class="ident">App</span>, <span class="ident">Error</span>, <span class="ident">HttpRequest</span>, <span class="ident">FromRequest</span>};
|
||
<span class="kw">use</span> <span class="ident">actix_web</span>::<span class="ident">error</span>::<span class="ident">ErrorBadRequest</span>;
|
||
<span class="kw">use</span> <span class="ident">serde_derive</span>::<span class="ident">Deserialize</span>;
|
||
<span class="kw">use</span> <span class="ident">rand</span>;
|
||
|
||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">Deserialize</span>)]</span>
|
||
<span class="kw">struct</span> <span class="ident">Thing</span> {
|
||
<span class="ident">name</span>: <span class="ident">String</span>
|
||
}
|
||
|
||
<span class="kw">impl</span> <span class="ident">FromRequest</span> <span class="kw">for</span> <span class="ident">Thing</span> {
|
||
<span class="kw">type</span> <span class="ident">Error</span> <span class="op">=</span> <span class="ident">Error</span>;
|
||
<span class="kw">type</span> <span class="ident">Future</span> <span class="op">=</span> <span class="prelude-ty">Result</span><span class="op"><</span><span class="self">Self</span>, <span class="self">Self</span>::<span class="ident">Error</span><span class="op">></span>;
|
||
<span class="kw">type</span> <span class="ident">Config</span> <span class="op">=</span> ();
|
||
|
||
<span class="kw">fn</span> <span class="ident">from_request</span>(<span class="ident">req</span>: <span class="kw-2">&</span><span class="ident">HttpRequest</span>, <span class="ident">payload</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">dev</span>::<span class="ident">Payload</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span>::<span class="ident">Future</span> {
|
||
<span class="kw">if</span> <span class="ident">rand</span>::<span class="ident">random</span>() {
|
||
<span class="prelude-val">Ok</span>(<span class="ident">Thing</span> { <span class="ident">name</span>: <span class="string">"thingy"</span>.<span class="ident">into</span>() })
|
||
} <span class="kw">else</span> {
|
||
<span class="prelude-val">Err</span>(<span class="ident">ErrorBadRequest</span>(<span class="string">"no luck"</span>))
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
<span class="doccomment">/// extract `Thing` from request</span>
|
||
<span class="kw">fn</span> <span class="ident">index</span>(<span class="ident">supplied_thing</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">Thing</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||
<span class="kw">match</span> <span class="ident">supplied_thing</span> {
|
||
<span class="comment">// Puns not intended</span>
|
||
<span class="prelude-val">Some</span>(<span class="ident">thing</span>) <span class="op">=</span><span class="op">></span> <span class="macro">format</span><span class="macro">!</span>(<span class="string">"Got something: {:?}"</span>, <span class="ident">thing</span>),
|
||
<span class="prelude-val">None</span> <span class="op">=</span><span class="op">></span> <span class="macro">format</span><span class="macro">!</span>(<span class="string">"No thing!"</span>)
|
||
}
|
||
}
|
||
|
||
<span class="kw">fn</span> <span class="ident">main</span>() {
|
||
<span class="kw">let</span> <span class="ident">app</span> <span class="op">=</span> <span class="ident">App</span>::<span class="ident">new</span>().<span class="ident">service</span>(
|
||
<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/users/:first"</span>).<span class="ident">route</span>(
|
||
<span class="ident">web</span>::<span class="ident">post</span>().<span class="ident">to</span>(<span class="ident">index</span>))
|
||
);
|
||
}</pre></div>
|
||
</div><div class='impl-items'><h4 id='associatedtype.Config-1' class="type"><code id='Config.t-1'>type <a href='#associatedtype.Config' class="type">Config</a> = T::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Config" title="type actix_web::FromRequest::Config">Config</a></code></h4><h4 id='associatedtype.Error-1' class="type"><code id='Error.t-1'>type <a href='#associatedtype.Error' class="type">Error</a> = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a></code></h4><h4 id='associatedtype.Future-1' class="type"><code id='Future.t-1'>type <a href='#associatedtype.Future' class="type">Future</a> = <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Item = <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><T>, Error = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a>>></code></h4><h4 id='method.from_request' class="method hidden"><code id='from_request.v-1'>fn <a href='#method.from_request' class='fnname'>from_request</a>(req: &<a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a>, payload: &mut <a class="enum" href="../actix_web/dev/enum.Payload.html" title="enum actix_web::dev::Payload">Payload</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a></code><a class='srclink' href='../src/actix_web/extract.rs.html#100-112' title='goto source code'>[src]</a></h4></div><h3 id='impl-FromRequest-for-Result%3CT%2C%20T%3A%3AError%3E' class='impl'><code class='in-band'>impl<T: 'static> <a class="trait" href="../actix_web/trait.FromRequest.html" title="trait actix_web::FromRequest">FromRequest</a> for <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><T, T::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Error" title="type actix_web::FromRequest::Error">Error</a>> <span class="where fmt-newline">where<br> T: <a class="trait" href="../actix_web/trait.FromRequest.html" title="trait actix_web::FromRequest">FromRequest</a>,<br> T::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a>: 'static,<br> T::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Error" title="type actix_web::FromRequest::Error">Error</a>: 'static, </span></code><a href='#impl-FromRequest-for-Result%3CT%2C%20T%3A%3AError%3E' class='anchor'></a><a class='srclink' href='../src/actix_web/extract.rs.html#160-181' title='goto source code'>[src]</a></h3><div class='docblock'><p>Optionally extract a field from the request or extract the Error if unsuccessful</p>
|
||
<p>If the <code>FromRequest</code> for T fails, inject Err into handler rather than returning an error response</p>
|
||
<h2 id="example-1" class="section-header"><a href="#example-1">Example</a></h2>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">dev</span>, <span class="ident">App</span>, <span class="prelude-ty">Result</span>, <span class="ident">Error</span>, <span class="ident">HttpRequest</span>, <span class="ident">FromRequest</span>};
|
||
<span class="kw">use</span> <span class="ident">actix_web</span>::<span class="ident">error</span>::<span class="ident">ErrorBadRequest</span>;
|
||
<span class="kw">use</span> <span class="ident">serde_derive</span>::<span class="ident">Deserialize</span>;
|
||
<span class="kw">use</span> <span class="ident">rand</span>;
|
||
|
||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">Deserialize</span>)]</span>
|
||
<span class="kw">struct</span> <span class="ident">Thing</span> {
|
||
<span class="ident">name</span>: <span class="ident">String</span>
|
||
}
|
||
|
||
<span class="kw">impl</span> <span class="ident">FromRequest</span> <span class="kw">for</span> <span class="ident">Thing</span> {
|
||
<span class="kw">type</span> <span class="ident">Error</span> <span class="op">=</span> <span class="ident">Error</span>;
|
||
<span class="kw">type</span> <span class="ident">Future</span> <span class="op">=</span> <span class="prelude-ty">Result</span><span class="op"><</span><span class="ident">Thing</span>, <span class="ident">Error</span><span class="op">></span>;
|
||
<span class="kw">type</span> <span class="ident">Config</span> <span class="op">=</span> ();
|
||
|
||
<span class="kw">fn</span> <span class="ident">from_request</span>(<span class="ident">req</span>: <span class="kw-2">&</span><span class="ident">HttpRequest</span>, <span class="ident">payload</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">dev</span>::<span class="ident">Payload</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span>::<span class="ident">Future</span> {
|
||
<span class="kw">if</span> <span class="ident">rand</span>::<span class="ident">random</span>() {
|
||
<span class="prelude-val">Ok</span>(<span class="ident">Thing</span> { <span class="ident">name</span>: <span class="string">"thingy"</span>.<span class="ident">into</span>() })
|
||
} <span class="kw">else</span> {
|
||
<span class="prelude-val">Err</span>(<span class="ident">ErrorBadRequest</span>(<span class="string">"no luck"</span>))
|
||
}
|
||
}
|
||
}
|
||
|
||
<span class="doccomment">/// extract `Thing` from request</span>
|
||
<span class="kw">fn</span> <span class="ident">index</span>(<span class="ident">supplied_thing</span>: <span class="prelude-ty">Result</span><span class="op"><</span><span class="ident">Thing</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||
<span class="kw">match</span> <span class="ident">supplied_thing</span> {
|
||
<span class="prelude-val">Ok</span>(<span class="ident">thing</span>) <span class="op">=</span><span class="op">></span> <span class="macro">format</span><span class="macro">!</span>(<span class="string">"Got thing: {:?}"</span>, <span class="ident">thing</span>),
|
||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span><span class="op">></span> <span class="macro">format</span><span class="macro">!</span>(<span class="string">"Error extracting thing: {}"</span>, <span class="ident">e</span>)
|
||
}
|
||
}
|
||
|
||
<span class="kw">fn</span> <span class="ident">main</span>() {
|
||
<span class="kw">let</span> <span class="ident">app</span> <span class="op">=</span> <span class="ident">App</span>::<span class="ident">new</span>().<span class="ident">service</span>(
|
||
<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/users/:first"</span>).<span class="ident">route</span>(<span class="ident">web</span>::<span class="ident">post</span>().<span class="ident">to</span>(<span class="ident">index</span>))
|
||
);
|
||
}</pre></div>
|
||
</div><div class='impl-items'><h4 id='associatedtype.Config-2' class="type"><code id='Config.t-2'>type <a href='#associatedtype.Config' class="type">Config</a> = T::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Config" title="type actix_web::FromRequest::Config">Config</a></code></h4><h4 id='associatedtype.Error-2' class="type"><code id='Error.t-2'>type <a href='#associatedtype.Error' class="type">Error</a> = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a></code></h4><h4 id='associatedtype.Future-2' class="type"><code id='Future.t-2'>type <a href='#associatedtype.Future' class="type">Future</a> = <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Item = <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><T, T::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Error" title="type actix_web::FromRequest::Error">Error</a>>, Error = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a>>></code></h4><h4 id='method.from_request-1' class="method hidden"><code id='from_request.v-2'>fn <a href='#method.from_request' class='fnname'>from_request</a>(req: &<a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a>, payload: &mut <a class="enum" href="../actix_web/dev/enum.Payload.html" title="enum actix_web::dev::Payload">Payload</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a></code><a class='srclink' href='../src/actix_web/extract.rs.html#171-180' title='goto source code'>[src]</a></h4></div><h3 id='impl-FromRequest-for-String' class='impl'><code class='in-band'>impl <a class="trait" href="../actix_web/trait.FromRequest.html" title="trait actix_web::FromRequest">FromRequest</a> for <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a></code><a href='#impl-FromRequest-for-String' class='anchor'></a><a class='srclink' href='../src/actix_web/types/payload.rs.html#184-232' title='goto source code'>[src]</a></h3><div class='docblock'><p>Extract text information from a request's body.</p>
|
||
<p>Text extractor automatically decode body according to the request's charset.</p>
|
||
<p><a href="struct.PayloadConfig.html"><strong>PayloadConfig</strong></a> allows to configure
|
||
extraction process.</p>
|
||
<h2 id="example-2" class="section-header"><a href="#example-2">Example</a></h2>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">App</span>, <span class="ident">FromRequest</span>};
|
||
|
||
<span class="doccomment">/// extract text data from request</span>
|
||
<span class="kw">fn</span> <span class="ident">index</span>(<span class="ident">text</span>: <span class="ident">String</span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||
<span class="macro">format</span><span class="macro">!</span>(<span class="string">"Body {}!"</span>, <span class="ident">text</span>)
|
||
}
|
||
|
||
<span class="kw">fn</span> <span class="ident">main</span>() {
|
||
<span class="kw">let</span> <span class="ident">app</span> <span class="op">=</span> <span class="ident">App</span>::<span class="ident">new</span>().<span class="ident">service</span>(
|
||
<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/index.html"</span>)
|
||
.<span class="ident">data</span>(<span class="ident">String</span>::<span class="ident">configure</span>(<span class="op">|</span><span class="ident">cfg</span><span class="op">|</span> { <span class="comment">// <- limit size of the payload</span>
|
||
<span class="ident">cfg</span>.<span class="ident">limit</span>(<span class="number">4096</span>)
|
||
}))
|
||
.<span class="ident">route</span>(<span class="ident">web</span>::<span class="ident">get</span>().<span class="ident">to</span>(<span class="ident">index</span>)) <span class="comment">// <- register handler with extractor params</span>
|
||
);
|
||
}</pre></div>
|
||
</div><div class='impl-items'><h4 id='associatedtype.Config-3' class="type"><code id='Config.t-3'>type <a href='#associatedtype.Config' class="type">Config</a> = <a class="struct" href="../actix_web/web/struct.PayloadConfig.html" title="struct actix_web::web::PayloadConfig">PayloadConfig</a></code></h4><h4 id='associatedtype.Error-3' class="type"><code id='Error.t-3'>type <a href='#associatedtype.Error' class="type">Error</a> = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a></code></h4><h4 id='associatedtype.Future-3' class="type"><code id='Future.t-3'>type <a href='#associatedtype.Future' class="type">Future</a> = <a class="enum" href="../futures/future/either/enum.Either.html" title="enum futures::future::either::Either">Either</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Item = <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, Error = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a>>>, <a class="struct" href="../futures/future/result_/struct.FutureResult.html" title="struct futures::future::result_::FutureResult">FutureResult</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a>>></code></h4><h4 id='method.from_request-2' class="method hidden"><code id='from_request.v-3'>fn <a href='#method.from_request' class='fnname'>from_request</a>(req: &<a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a>, payload: &mut <a class="enum" href="../actix_web/dev/enum.Payload.html" title="enum actix_web::dev::Payload">Payload</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a></code><a class='srclink' href='../src/actix_web/types/payload.rs.html#193-231' title='goto source code'>[src]</a></h4></div><span class='loading-content'>Loading content...</span>
|
||
<h2 id='implementors' class='small-section-header'>Implementors<a href='#implementors' class='anchor'></a></h2><div class='item-list' id='implementors-list'><h3 id='impl-FromRequest' class='impl'><code class='in-band'>impl FromRequest for <a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a></code><a href='#impl-FromRequest' class='anchor'></a><a class='srclink' href='../src/actix_web/request.rs.html#289-298' title='goto source code'>[src]</a></h3><div class='docblock'><p>It is possible to get <code>HttpRequest</code> as an extractor handler parameter</p>
|
||
<h2 id="example-3" class="section-header"><a href="#example-3">Example</a></h2>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">App</span>, <span class="ident">HttpRequest</span>};
|
||
<span class="kw">use</span> <span class="ident">serde_derive</span>::<span class="ident">Deserialize</span>;
|
||
|
||
<span class="doccomment">/// extract `Thing` from request</span>
|
||
<span class="kw">fn</span> <span class="ident">index</span>(<span class="ident">req</span>: <span class="ident">HttpRequest</span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||
<span class="macro">format</span><span class="macro">!</span>(<span class="string">"Got thing: {:?}"</span>, <span class="ident">req</span>)
|
||
}
|
||
|
||
<span class="kw">fn</span> <span class="ident">main</span>() {
|
||
<span class="kw">let</span> <span class="ident">app</span> <span class="op">=</span> <span class="ident">App</span>::<span class="ident">new</span>().<span class="ident">service</span>(
|
||
<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/users/{first}"</span>).<span class="ident">route</span>(
|
||
<span class="ident">web</span>::<span class="ident">get</span>().<span class="ident">to</span>(<span class="ident">index</span>))
|
||
);
|
||
}</pre></div>
|
||
</div><div class='impl-items'><h4 id='associatedtype.Config-4' class="type"><code id='Config.t-4'>type <a href='#associatedtype.Config-4' class="type">Config</a> = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a></code></h4><h4 id='associatedtype.Error-4' class="type"><code id='Error.t-4'>type <a href='#associatedtype.Error-4' class="type">Error</a> = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a></code></h4><h4 id='associatedtype.Future-4' class="type"><code id='Future.t-4'>type <a href='#associatedtype.Future-4' class="type">Future</a> = <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><Self, <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a>></code></h4><h4 id='method.from_request-3' class="method hidden"><code id='from_request.v-4'>fn <a href='#method.from_request-3' class='fnname'>from_request</a>(req: &<a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a>, _: &mut <a class="enum" href="../actix_web/dev/enum.Payload.html" title="enum actix_web::dev::Payload">Payload</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a></code><a class='srclink' href='../src/actix_web/request.rs.html#295-297' title='goto source code'>[src]</a></h4></div><h3 id='impl-FromRequest-1' class='impl'><code class='in-band'>impl FromRequest for <a class="struct" href="../actix_web/web/struct.Bytes.html" title="struct actix_web::web::Bytes">Bytes</a></code><a href='#impl-FromRequest-1' class='anchor'></a><a class='srclink' href='../src/actix_web/types/payload.rs.html#130-155' title='goto source code'>[src]</a></h3><div class='docblock'><p>Request binary data from a request's payload.</p>
|
||
<p>Loads request's payload and construct Bytes instance.</p>
|
||
<p><a href="struct.PayloadConfig.html"><strong>PayloadConfig</strong></a> allows to configure
|
||
extraction process.</p>
|
||
<h2 id="example-4" class="section-header"><a href="#example-4">Example</a></h2>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">bytes</span>::<span class="ident">Bytes</span>;
|
||
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">App</span>};
|
||
|
||
<span class="doccomment">/// extract binary data from request</span>
|
||
<span class="kw">fn</span> <span class="ident">index</span>(<span class="ident">body</span>: <span class="ident">Bytes</span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||
<span class="macro">format</span><span class="macro">!</span>(<span class="string">"Body {:?}!"</span>, <span class="ident">body</span>)
|
||
}
|
||
|
||
<span class="kw">fn</span> <span class="ident">main</span>() {
|
||
<span class="kw">let</span> <span class="ident">app</span> <span class="op">=</span> <span class="ident">App</span>::<span class="ident">new</span>().<span class="ident">service</span>(
|
||
<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/index.html"</span>).<span class="ident">route</span>(
|
||
<span class="ident">web</span>::<span class="ident">get</span>().<span class="ident">to</span>(<span class="ident">index</span>))
|
||
);
|
||
}</pre></div>
|
||
</div><div class='impl-items'><h4 id='associatedtype.Config-5' class="type"><code id='Config.t-5'>type <a href='#associatedtype.Config-5' class="type">Config</a> = <a class="struct" href="../actix_web/web/struct.PayloadConfig.html" title="struct actix_web::web::PayloadConfig">PayloadConfig</a></code></h4><h4 id='associatedtype.Error-5' class="type"><code id='Error.t-5'>type <a href='#associatedtype.Error-5' class="type">Error</a> = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a></code></h4><h4 id='associatedtype.Future-5' class="type"><code id='Future.t-5'>type <a href='#associatedtype.Future-5' class="type">Future</a> = <a class="enum" href="../futures/future/either/enum.Either.html" title="enum futures::future::either::Either">Either</a><<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Item = <a class="struct" href="../actix_web/web/struct.Bytes.html" title="struct actix_web::web::Bytes">Bytes</a>, Error = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a>>>, <a class="struct" href="../futures/future/result_/struct.FutureResult.html" title="struct futures::future::result_::FutureResult">FutureResult</a><<a class="struct" href="../actix_web/web/struct.Bytes.html" title="struct actix_web::web::Bytes">Bytes</a>, <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a>>></code></h4><h4 id='method.from_request-4' class="method hidden"><code id='from_request.v-5'>fn <a href='#method.from_request-4' class='fnname'>from_request</a>(req: &<a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a>, payload: &mut <a class="enum" href="../actix_web/dev/enum.Payload.html" title="enum actix_web::dev::Payload">Payload</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a></code><a class='srclink' href='../src/actix_web/types/payload.rs.html#137-154' title='goto source code'>[src]</a></h4></div><h3 id='impl-FromRequest-2' class='impl'><code class='in-band'>impl FromRequest for <a class="struct" href="../actix_web/web/struct.Payload.html" title="struct actix_web::web::Payload">Payload</a></code><a href='#impl-FromRequest-2' class='anchor'></a><a class='srclink' href='../src/actix_web/types/payload.rs.html#94-103' title='goto source code'>[src]</a></h3><div class='docblock'><p>Get request's payload stream</p>
|
||
<h2 id="example-5" class="section-header"><a href="#example-5">Example</a></h2>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">futures</span>::{<span class="ident">Future</span>, <span class="ident">Stream</span>};
|
||
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">error</span>, <span class="ident">App</span>, <span class="ident">Error</span>, <span class="ident">HttpResponse</span>};
|
||
|
||
<span class="doccomment">/// extract binary data from request</span>
|
||
<span class="kw">fn</span> <span class="ident">index</span>(<span class="ident">body</span>: <span class="ident">web</span>::<span class="ident">Payload</span>) <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">Future</span><span class="op"><</span><span class="ident">Item</span> <span class="op">=</span> <span class="ident">HttpResponse</span>, <span class="ident">Error</span> <span class="op">=</span> <span class="ident">Error</span><span class="op">></span>
|
||
{
|
||
<span class="ident">body</span>.<span class="ident">map_err</span>(<span class="ident">Error</span>::<span class="ident">from</span>)
|
||
.<span class="ident">fold</span>(<span class="ident">web</span>::<span class="ident">BytesMut</span>::<span class="ident">new</span>(), <span class="kw">move</span> <span class="op">|</span><span class="kw-2">mut</span> <span class="ident">body</span>, <span class="ident">chunk</span><span class="op">|</span> {
|
||
<span class="ident">body</span>.<span class="ident">extend_from_slice</span>(<span class="kw-2">&</span><span class="ident">chunk</span>);
|
||
<span class="prelude-val">Ok</span>::<span class="op"><</span><span class="kw">_</span>, <span class="ident">Error</span><span class="op">></span>(<span class="ident">body</span>)
|
||
})
|
||
.<span class="ident">and_then</span>(<span class="op">|</span><span class="ident">body</span><span class="op">|</span> {
|
||
<span class="macro">format</span><span class="macro">!</span>(<span class="string">"Body {:?}!"</span>, <span class="ident">body</span>);
|
||
<span class="prelude-val">Ok</span>(<span class="ident">HttpResponse</span>::<span class="prelude-val">Ok</span>().<span class="ident">finish</span>())
|
||
})
|
||
}
|
||
|
||
<span class="kw">fn</span> <span class="ident">main</span>() {
|
||
<span class="kw">let</span> <span class="ident">app</span> <span class="op">=</span> <span class="ident">App</span>::<span class="ident">new</span>().<span class="ident">service</span>(
|
||
<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/index.html"</span>).<span class="ident">route</span>(
|
||
<span class="ident">web</span>::<span class="ident">get</span>().<span class="ident">to_async</span>(<span class="ident">index</span>))
|
||
);
|
||
}</pre></div>
|
||
</div><div class='impl-items'><h4 id='associatedtype.Config-6' class="type"><code id='Config.t-6'>type <a href='#associatedtype.Config-6' class="type">Config</a> = <a class="struct" href="../actix_web/web/struct.PayloadConfig.html" title="struct actix_web::web::PayloadConfig">PayloadConfig</a></code></h4><h4 id='associatedtype.Error-6' class="type"><code id='Error.t-6'>type <a href='#associatedtype.Error-6' class="type">Error</a> = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a></code></h4><h4 id='associatedtype.Future-6' class="type"><code id='Future.t-6'>type <a href='#associatedtype.Future-6' class="type">Future</a> = <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="struct" href="../actix_web/web/struct.Payload.html" title="struct actix_web::web::Payload">Payload</a>, <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a>></code></h4><h4 id='method.from_request-5' class="method hidden"><code id='from_request.v-6'>fn <a href='#method.from_request-5' class='fnname'>from_request</a>(_: &<a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a>, payload: &mut <a class="enum" href="../actix_web/dev/enum.Payload.html" title="enum actix_web::dev::Payload">Payload</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a></code><a class='srclink' href='../src/actix_web/types/payload.rs.html#100-102' title='goto source code'>[src]</a></h4></div><h3 id='impl-FromRequest-3' class='impl'><code class='in-band'>impl<T> FromRequest for <a class="struct" href="../actix_web/web/struct.Form.html" title="struct actix_web::web::Form">Form</a><T> <span class="where fmt-newline">where<br> T: <a class="trait" href="../serde/de/trait.DeserializeOwned.html" title="trait serde::de::DeserializeOwned">DeserializeOwned</a> + 'static, </span></code><a href='#impl-FromRequest-3' class='anchor'></a><a class='srclink' href='../src/actix_web/types/form.rs.html#107-136' title='goto source code'>[src]</a></h3><div class='impl-items'><h4 id='associatedtype.Config-7' class="type"><code id='Config.t-7'>type <a href='#associatedtype.Config-7' class="type">Config</a> = <a class="struct" href="../actix_web/web/struct.FormConfig.html" title="struct actix_web::web::FormConfig">FormConfig</a></code></h4><h4 id='associatedtype.Error-7' class="type"><code id='Error.t-7'>type <a href='#associatedtype.Error-7' class="type">Error</a> = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a></code></h4><h4 id='associatedtype.Future-7' class="type"><code id='Future.t-7'>type <a href='#associatedtype.Future-7' class="type">Future</a> = <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Item = Self, Error = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a>>></code></h4><h4 id='method.from_request-6' class="method hidden"><code id='from_request.v-7'>fn <a href='#method.from_request-6' class='fnname'>from_request</a>(req: &<a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a>, payload: &mut <a class="enum" href="../actix_web/dev/enum.Payload.html" title="enum actix_web::dev::Payload">Payload</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a></code><a class='srclink' href='../src/actix_web/types/form.rs.html#116-135' title='goto source code'>[src]</a></h4></div><h3 id='impl-FromRequest-4' class='impl'><code class='in-band'>impl<T> FromRequest for <a class="struct" href="../actix_web/web/struct.Json.html" title="struct actix_web::web::Json">Json</a><T> <span class="where fmt-newline">where<br> T: <a class="trait" href="../serde/de/trait.DeserializeOwned.html" title="trait serde::de::DeserializeOwned">DeserializeOwned</a> + 'static, </span></code><a href='#impl-FromRequest-4' class='anchor'></a><a class='srclink' href='../src/actix_web/types/json.rs.html#167-201' title='goto source code'>[src]</a></h3><div class='docblock'><p>Json extractor. Allow to extract typed information from request's
|
||
payload.</p>
|
||
<p>To extract typed information from request's body, the type <code>T</code> must
|
||
implement the <code>Deserialize</code> trait from <em>serde</em>.</p>
|
||
<p><a href="struct.JsonConfig.html"><strong>JsonConfig</strong></a> allows to configure extraction
|
||
process.</p>
|
||
<h2 id="example-6" class="section-header"><a href="#example-6">Example</a></h2>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">App</span>};
|
||
<span class="kw">use</span> <span class="ident">serde_derive</span>::<span class="ident">Deserialize</span>;
|
||
|
||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Deserialize</span>)]</span>
|
||
<span class="kw">struct</span> <span class="ident">Info</span> {
|
||
<span class="ident">username</span>: <span class="ident">String</span>,
|
||
}
|
||
|
||
<span class="doccomment">/// deserialize `Info` from request's body</span>
|
||
<span class="kw">fn</span> <span class="ident">index</span>(<span class="ident">info</span>: <span class="ident">web</span>::<span class="ident">Json</span><span class="op"><</span><span class="ident">Info</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||
<span class="macro">format</span><span class="macro">!</span>(<span class="string">"Welcome {}!"</span>, <span class="ident">info</span>.<span class="ident">username</span>)
|
||
}
|
||
|
||
<span class="kw">fn</span> <span class="ident">main</span>() {
|
||
<span class="kw">let</span> <span class="ident">app</span> <span class="op">=</span> <span class="ident">App</span>::<span class="ident">new</span>().<span class="ident">service</span>(
|
||
<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/index.html"</span>).<span class="ident">route</span>(
|
||
<span class="ident">web</span>::<span class="ident">post</span>().<span class="ident">to</span>(<span class="ident">index</span>))
|
||
);
|
||
}</pre></div>
|
||
</div><div class='impl-items'><h4 id='associatedtype.Error-8' class="type"><code id='Error.t-8'>type <a href='#associatedtype.Error-8' class="type">Error</a> = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a></code></h4><h4 id='associatedtype.Future-8' class="type"><code id='Future.t-8'>type <a href='#associatedtype.Future-8' class="type">Future</a> = <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="../futures/future/trait.Future.html" title="trait futures::future::Future">Future</a><Item = Self, Error = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a>>></code></h4><h4 id='associatedtype.Config-8' class="type"><code id='Config.t-8'>type <a href='#associatedtype.Config-8' class="type">Config</a> = <a class="struct" href="../actix_web/web/struct.JsonConfig.html" title="struct actix_web::web::JsonConfig">JsonConfig</a></code></h4><h4 id='method.from_request-7' class="method hidden"><code id='from_request.v-8'>fn <a href='#method.from_request-7' class='fnname'>from_request</a>(req: &<a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a>, payload: &mut <a class="enum" href="../actix_web/dev/enum.Payload.html" title="enum actix_web::dev::Payload">Payload</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a></code><a class='srclink' href='../src/actix_web/types/json.rs.html#176-200' title='goto source code'>[src]</a></h4></div><h3 id='impl-FromRequest-5' class='impl'><code class='in-band'>impl<T> FromRequest for <a class="struct" href="../actix_web/web/struct.Path.html" title="struct actix_web::web::Path">Path</a><T> <span class="where fmt-newline">where<br> T: <a class="trait" href="../serde/de/trait.DeserializeOwned.html" title="trait serde::de::DeserializeOwned">DeserializeOwned</a>, </span></code><a href='#impl-FromRequest-5' class='anchor'></a><a class='srclink' href='../src/actix_web/types/path.rs.html#157-188' title='goto source code'>[src]</a></h3><div class='docblock'><p>Extract typed information from the request's path.</p>
|
||
<h2 id="example-7" class="section-header"><a href="#example-7">Example</a></h2>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">App</span>};
|
||
|
||
<span class="doccomment">/// extract path info from "/{username}/{count}/index.html" url</span>
|
||
<span class="doccomment">/// {username} - deserializes to a String</span>
|
||
<span class="doccomment">/// {count} - - deserializes to a u32</span>
|
||
<span class="kw">fn</span> <span class="ident">index</span>(<span class="ident">info</span>: <span class="ident">web</span>::<span class="ident">Path</span><span class="op"><</span>(<span class="ident">String</span>, <span class="ident">u32</span>)<span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||
<span class="macro">format</span><span class="macro">!</span>(<span class="string">"Welcome {}! {}"</span>, <span class="ident">info</span>.<span class="number">0</span>, <span class="ident">info</span>.<span class="number">1</span>)
|
||
}
|
||
|
||
<span class="kw">fn</span> <span class="ident">main</span>() {
|
||
<span class="kw">let</span> <span class="ident">app</span> <span class="op">=</span> <span class="ident">App</span>::<span class="ident">new</span>().<span class="ident">service</span>(
|
||
<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/{username}/{count}/index.html"</span>) <span class="comment">// <- define path parameters</span>
|
||
.<span class="ident">route</span>(<span class="ident">web</span>::<span class="ident">get</span>().<span class="ident">to</span>(<span class="ident">index</span>)) <span class="comment">// <- register handler with `Path` extractor</span>
|
||
);
|
||
}</pre></div>
|
||
<p>It is possible to extract path information to a specific type that
|
||
implements <code>Deserialize</code> trait from <em>serde</em>.</p>
|
||
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">App</span>, <span class="ident">Error</span>};
|
||
<span class="kw">use</span> <span class="ident">serde_derive</span>::<span class="ident">Deserialize</span>;
|
||
|
||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Deserialize</span>)]</span>
|
||
<span class="kw">struct</span> <span class="ident">Info</span> {
|
||
<span class="ident">username</span>: <span class="ident">String</span>,
|
||
}
|
||
|
||
<span class="doccomment">/// extract `Info` from a path using serde</span>
|
||
<span class="kw">fn</span> <span class="ident">index</span>(<span class="ident">info</span>: <span class="ident">web</span>::<span class="ident">Path</span><span class="op"><</span><span class="ident">Info</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Result</span><span class="op"><</span><span class="ident">String</span>, <span class="ident">Error</span><span class="op">></span> {
|
||
<span class="prelude-val">Ok</span>(<span class="macro">format</span><span class="macro">!</span>(<span class="string">"Welcome {}!"</span>, <span class="ident">info</span>.<span class="ident">username</span>))
|
||
}
|
||
|
||
<span class="kw">fn</span> <span class="ident">main</span>() {
|
||
<span class="kw">let</span> <span class="ident">app</span> <span class="op">=</span> <span class="ident">App</span>::<span class="ident">new</span>().<span class="ident">service</span>(
|
||
<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/{username}/index.html"</span>) <span class="comment">// <- define path parameters</span>
|
||
.<span class="ident">route</span>(<span class="ident">web</span>::<span class="ident">get</span>().<span class="ident">to</span>(<span class="ident">index</span>)) <span class="comment">// <- use handler with Path` extractor</span>
|
||
);
|
||
}</pre></div>
|
||
</div><div class='impl-items'><h4 id='associatedtype.Error-9' class="type"><code id='Error.t-9'>type <a href='#associatedtype.Error-9' class="type">Error</a> = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a></code></h4><h4 id='associatedtype.Future-9' class="type"><code id='Future.t-9'>type <a href='#associatedtype.Future-9' class="type">Future</a> = <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><Self, <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a>></code></h4><h4 id='associatedtype.Config-9' class="type"><code id='Config.t-9'>type <a href='#associatedtype.Config-9' class="type">Config</a> = <a class="struct" href="../actix_web/web/struct.PathConfig.html" title="struct actix_web::web::PathConfig">PathConfig</a></code></h4><h4 id='method.from_request-8' class="method hidden"><code id='from_request.v-9'>fn <a href='#method.from_request-8' class='fnname'>from_request</a>(req: &<a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a>, _: &mut <a class="enum" href="../actix_web/dev/enum.Payload.html" title="enum actix_web::dev::Payload">Payload</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a></code><a class='srclink' href='../src/actix_web/types/path.rs.html#166-187' title='goto source code'>[src]</a></h4></div><h3 id='impl-FromRequest-6' class='impl'><code class='in-band'>impl<T> FromRequest for <a class="struct" href="../actix_web/web/struct.Query.html" title="struct actix_web::web::Query">Query</a><T> <span class="where fmt-newline">where<br> T: <a class="trait" href="../serde/de/trait.DeserializeOwned.html" title="trait serde::de::DeserializeOwned">DeserializeOwned</a>, </span></code><a href='#impl-FromRequest-6' class='anchor'></a><a class='srclink' href='../src/actix_web/types/query.rs.html#130-165' title='goto source code'>[src]</a></h3><div class='docblock'><p>Extract typed information from the request's query.</p>
|
||
<h2 id="example-8" class="section-header"><a href="#example-8">Example</a></h2>
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">App</span>};
|
||
<span class="kw">use</span> <span class="ident">serde_derive</span>::<span class="ident">Deserialize</span>;
|
||
|
||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">Deserialize</span>)]</span>
|
||
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">ResponseType</span> {
|
||
<span class="ident">Token</span>,
|
||
<span class="ident">Code</span>
|
||
}
|
||
|
||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Deserialize</span>)]</span>
|
||
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">AuthRequest</span> {
|
||
<span class="ident">id</span>: <span class="ident">u64</span>,
|
||
<span class="ident">response_type</span>: <span class="ident">ResponseType</span>,
|
||
}
|
||
|
||
<span class="comment">// Use `Query` extractor for query information.</span>
|
||
<span class="comment">// This handler get called only if request's query contains `username` field</span>
|
||
<span class="comment">// The correct request for this handler would be `/index.html?id=64&response_type=Code"`</span>
|
||
<span class="kw">fn</span> <span class="ident">index</span>(<span class="ident">info</span>: <span class="ident">web</span>::<span class="ident">Query</span><span class="op"><</span><span class="ident">AuthRequest</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||
<span class="macro">format</span><span class="macro">!</span>(<span class="string">"Authorization request for client with id={} and type={:?}!"</span>, <span class="ident">info</span>.<span class="ident">id</span>, <span class="ident">info</span>.<span class="ident">response_type</span>)
|
||
}
|
||
|
||
<span class="kw">fn</span> <span class="ident">main</span>() {
|
||
<span class="kw">let</span> <span class="ident">app</span> <span class="op">=</span> <span class="ident">App</span>::<span class="ident">new</span>().<span class="ident">service</span>(
|
||
<span class="ident">web</span>::<span class="ident">resource</span>(<span class="string">"/index.html"</span>)
|
||
.<span class="ident">route</span>(<span class="ident">web</span>::<span class="ident">get</span>().<span class="ident">to</span>(<span class="ident">index</span>))); <span class="comment">// <- use `Query` extractor</span>
|
||
}</pre></div>
|
||
</div><div class='impl-items'><h4 id='associatedtype.Error-10' class="type"><code id='Error.t-10'>type <a href='#associatedtype.Error-10' class="type">Error</a> = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a></code></h4><h4 id='associatedtype.Future-10' class="type"><code id='Future.t-10'>type <a href='#associatedtype.Future-10' class="type">Future</a> = <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><Self, <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a>></code></h4><h4 id='associatedtype.Config-10' class="type"><code id='Config.t-10'>type <a href='#associatedtype.Config-10' class="type">Config</a> = <a class="struct" href="../actix_web/web/struct.QueryConfig.html" title="struct actix_web::web::QueryConfig">QueryConfig</a></code></h4><h4 id='method.from_request-9' class="method hidden"><code id='from_request.v-10'>fn <a href='#method.from_request-9' class='fnname'>from_request</a>(req: &<a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a>, _: &mut <a class="enum" href="../actix_web/dev/enum.Payload.html" title="enum actix_web::dev::Payload">Payload</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a></code><a class='srclink' href='../src/actix_web/types/query.rs.html#139-164' title='goto source code'>[src]</a></h4></div><h3 id='impl-FromRequest-7' class='impl'><code class='in-band'>impl<T: 'static> FromRequest for <a class="struct" href="../actix_web/web/struct.Data.html" title="struct actix_web::web::Data">Data</a><T></code><a href='#impl-FromRequest-7' class='anchor'></a><a class='srclink' href='../src/actix_web/data.rs.html#101-121' title='goto source code'>[src]</a></h3><div class='impl-items'><h4 id='associatedtype.Config-11' class="type"><code id='Config.t-11'>type <a href='#associatedtype.Config-11' class="type">Config</a> = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a></code></h4><h4 id='associatedtype.Error-11' class="type"><code id='Error.t-11'>type <a href='#associatedtype.Error-11' class="type">Error</a> = <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a></code></h4><h4 id='associatedtype.Future-11' class="type"><code id='Future.t-11'>type <a href='#associatedtype.Future-11' class="type">Future</a> = <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><Self, <a class="struct" href="../actix_web/error/struct.Error.html" title="struct actix_web::error::Error">Error</a>></code></h4><h4 id='method.from_request-10' class="method hidden"><code id='from_request.v-11'>fn <a href='#method.from_request-10' class='fnname'>from_request</a>(req: &<a class="struct" href="../actix_web/struct.HttpRequest.html" title="struct actix_web::HttpRequest">HttpRequest</a>, _: &mut <a class="enum" href="../actix_web/dev/enum.Payload.html" title="enum actix_web::dev::Payload">Payload</a>) -> Self::<a class="type" href="../actix_web/trait.FromRequest.html#associatedtype.Future" title="type actix_web::FromRequest::Future">Future</a></code><a class='srclink' href='../src/actix_web/data.rs.html#107-120' title='goto source code'>[src]</a></h4></div></div><span class='loading-content'>Loading content...</span><script type="text/javascript" src="../implementors/actix_web/trait.FromRequest.js" async></script></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../";window.currentCrate = "actix_web";</script><script src="../aliases.js"></script><script src="../main.js"></script><script defer src="../search-index.js"></script></body></html> |