1
0
mirror of https://github.com/actix/actix-extras.git synced 2025-08-01 07:51:52 +02:00

Deploying to gh-pages from @ 8741cd32cc 🚀

This commit is contained in:
robjtede
2021-04-09 13:42:26 +00:00
parent c00153b487
commit 55e0870178
118 changed files with 1511 additions and 1511 deletions

View File

@@ -217,7 +217,7 @@
<span id="216">216</span>
<span id="217">217</span>
</pre><div class="example-wrap"><pre class="rust ">
<span class="kw">use</span> <span class="ident">std</span>::{<span class="ident">convert</span>::<span class="ident">TryInto</span>, <span class="ident">rc</span>::<span class="ident">Rc</span>};
<span class="kw">use</span> <span class="ident">std</span>::{<span class="ident">convert::TryInto</span>, <span class="ident">rc::Rc</span>};
<span class="kw">use</span> <span class="ident">actix_web</span>::{
<span class="ident">dev</span>::{<span class="ident">Service</span>, <span class="ident">ServiceRequest</span>, <span class="ident">ServiceResponse</span>},
@@ -228,10 +228,10 @@
},
<span class="ident">HttpResponse</span>,
};
<span class="kw">use</span> <span class="ident">futures_util</span>::<span class="ident">future</span>::{<span class="ident">ok</span>, <span class="ident">Either</span>, <span class="ident">FutureExt</span> <span class="kw">as</span> <span class="kw">_</span>, <span class="ident">LocalBoxFuture</span>, <span class="ident">Ready</span>};
<span class="kw">use</span> <span class="ident">log</span>::<span class="ident">debug</span>;
<span class="kw">use</span> <span class="ident">futures_util::future</span>::{<span class="ident">ok</span>, <span class="ident">Either</span>, <span class="ident">FutureExt</span> <span class="kw">as</span> <span class="kw">_</span>, <span class="ident">LocalBoxFuture</span>, <span class="ident">Ready</span>};
<span class="kw">use</span> <span class="ident">log::debug</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">Inner</span>;
<span class="kw">use</span> <span class="kw">crate</span><span class="ident">::Inner</span>;
<span class="doccomment">/// Service wrapper for Cross-Origin Resource Sharing support.</span>
<span class="doccomment">///</span>
@@ -254,37 +254,37 @@
<span class="kw">return</span> <span class="ident">req</span>.<span class="ident">error_response</span>(<span class="ident">err</span>);
}
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">res</span> <span class="op">=</span> <span class="ident">HttpResponse</span>::<span class="prelude-val">Ok</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">res</span> <span class="op">=</span> <span class="ident">HttpResponse::Ok</span>();
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">origin</span>) <span class="op">=</span> <span class="ident">inner</span>.<span class="ident">access_control_allow_origin</span>(<span class="ident">req</span>.<span class="ident">head</span>()) {
<span class="ident">res</span>.<span class="ident">insert_header</span>((<span class="ident">header</span>::<span class="ident">ACCESS_CONTROL_ALLOW_ORIGIN</span>, <span class="ident">origin</span>));
<span class="ident">res</span>.<span class="ident">insert_header</span>((<span class="ident">header::ACCESS_CONTROL_ALLOW_ORIGIN</span>, <span class="ident">origin</span>));
}
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="kw-2">ref</span> <span class="ident">allowed_methods</span>) <span class="op">=</span> <span class="ident">inner</span>.<span class="ident">allowed_methods_baked</span> {
<span class="ident">res</span>.<span class="ident">insert_header</span>((
<span class="ident">header</span>::<span class="ident">ACCESS_CONTROL_ALLOW_METHODS</span>,
<span class="ident">header::ACCESS_CONTROL_ALLOW_METHODS</span>,
<span class="ident">allowed_methods</span>.<span class="ident">clone</span>(),
));
}
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="kw-2">ref</span> <span class="ident">headers</span>) <span class="op">=</span> <span class="ident">inner</span>.<span class="ident">allowed_headers_baked</span> {
<span class="ident">res</span>.<span class="ident">insert_header</span>((<span class="ident">header</span>::<span class="ident">ACCESS_CONTROL_ALLOW_HEADERS</span>, <span class="ident">headers</span>.<span class="ident">clone</span>()));
<span class="ident">res</span>.<span class="ident">insert_header</span>((<span class="ident">header::ACCESS_CONTROL_ALLOW_HEADERS</span>, <span class="ident">headers</span>.<span class="ident">clone</span>()));
} <span class="kw">else</span> <span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">headers</span>) <span class="op">=</span>
<span class="ident">req</span>.<span class="ident">headers</span>().<span class="ident">get</span>(<span class="ident">header</span>::<span class="ident">ACCESS_CONTROL_REQUEST_HEADERS</span>)
<span class="ident">req</span>.<span class="ident">headers</span>().<span class="ident">get</span>(<span class="ident">header::ACCESS_CONTROL_REQUEST_HEADERS</span>)
{
<span class="comment">// all headers allowed, return</span>
<span class="ident">res</span>.<span class="ident">insert_header</span>((<span class="ident">header</span>::<span class="ident">ACCESS_CONTROL_ALLOW_HEADERS</span>, <span class="ident">headers</span>.<span class="ident">clone</span>()));
<span class="ident">res</span>.<span class="ident">insert_header</span>((<span class="ident">header::ACCESS_CONTROL_ALLOW_HEADERS</span>, <span class="ident">headers</span>.<span class="ident">clone</span>()));
}
<span class="kw">if</span> <span class="ident">inner</span>.<span class="ident">supports_credentials</span> {
<span class="ident">res</span>.<span class="ident">insert_header</span>((
<span class="ident">header</span>::<span class="ident">ACCESS_CONTROL_ALLOW_CREDENTIALS</span>,
<span class="ident">HeaderValue</span>::<span class="ident">from_static</span>(<span class="string">&quot;true&quot;</span>),
<span class="ident">header::ACCESS_CONTROL_ALLOW_CREDENTIALS</span>,
<span class="ident">HeaderValue::from_static</span>(<span class="string">&quot;true&quot;</span>),
));
}
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">max_age</span>) <span class="op">=</span> <span class="ident">inner</span>.<span class="ident">max_age</span> {
<span class="ident">res</span>.<span class="ident">insert_header</span>((<span class="ident">header</span>::<span class="ident">ACCESS_CONTROL_MAX_AGE</span>, <span class="ident">max_age</span>.<span class="ident">to_string</span>()));
<span class="ident">res</span>.<span class="ident">insert_header</span>((<span class="ident">header::ACCESS_CONTROL_MAX_AGE</span>, <span class="ident">max_age</span>.<span class="ident">to_string</span>()));
}
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="ident">res</span>.<span class="ident">finish</span>();
@@ -298,33 +298,33 @@
) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">ServiceResponse</span><span class="op">&lt;</span><span class="ident">B</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">origin</span>) <span class="op">=</span> <span class="ident">inner</span>.<span class="ident">access_control_allow_origin</span>(<span class="ident">res</span>.<span class="ident">request</span>().<span class="ident">head</span>()) {
<span class="ident">res</span>.<span class="ident">headers_mut</span>()
.<span class="ident">insert</span>(<span class="ident">header</span>::<span class="ident">ACCESS_CONTROL_ALLOW_ORIGIN</span>, <span class="ident">origin</span>);
.<span class="ident">insert</span>(<span class="ident">header::ACCESS_CONTROL_ALLOW_ORIGIN</span>, <span class="ident">origin</span>);
};
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="kw-2">ref</span> <span class="ident">expose</span>) <span class="op">=</span> <span class="ident">inner</span>.<span class="ident">expose_headers_baked</span> {
<span class="ident">res</span>.<span class="ident">headers_mut</span>()
.<span class="ident">insert</span>(<span class="ident">header</span>::<span class="ident">ACCESS_CONTROL_EXPOSE_HEADERS</span>, <span class="ident">expose</span>.<span class="ident">clone</span>());
.<span class="ident">insert</span>(<span class="ident">header::ACCESS_CONTROL_EXPOSE_HEADERS</span>, <span class="ident">expose</span>.<span class="ident">clone</span>());
}
<span class="kw">if</span> <span class="ident">inner</span>.<span class="ident">supports_credentials</span> {
<span class="ident">res</span>.<span class="ident">headers_mut</span>().<span class="ident">insert</span>(
<span class="ident">header</span>::<span class="ident">ACCESS_CONTROL_ALLOW_CREDENTIALS</span>,
<span class="ident">HeaderValue</span>::<span class="ident">from_static</span>(<span class="string">&quot;true&quot;</span>),
<span class="ident">header::ACCESS_CONTROL_ALLOW_CREDENTIALS</span>,
<span class="ident">HeaderValue::from_static</span>(<span class="string">&quot;true&quot;</span>),
);
}
<span class="kw">if</span> <span class="ident">inner</span>.<span class="ident">vary_header</span> {
<span class="kw">let</span> <span class="ident">value</span> <span class="op">=</span> <span class="kw">match</span> <span class="ident">res</span>.<span class="ident">headers_mut</span>().<span class="ident">get</span>(<span class="ident">header</span>::<span class="ident">VARY</span>) {
<span class="kw">let</span> <span class="ident">value</span> <span class="op">=</span> <span class="kw">match</span> <span class="ident">res</span>.<span class="ident">headers_mut</span>().<span class="ident">get</span>(<span class="ident">header::VARY</span>) {
<span class="prelude-val">Some</span>(<span class="ident">hdr</span>) <span class="op">=</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">val</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span> <span class="op">=</span> <span class="ident">Vec</span>::<span class="ident">with_capacity</span>(<span class="ident">hdr</span>.<span class="ident">len</span>() <span class="op">+</span> <span class="number">8</span>);
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">val</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span> <span class="op">=</span> <span class="ident">Vec::with_capacity</span>(<span class="ident">hdr</span>.<span class="ident">len</span>() <span class="op">+</span> <span class="number">8</span>);
<span class="ident">val</span>.<span class="ident">extend</span>(<span class="ident">hdr</span>.<span class="ident">as_bytes</span>());
<span class="ident">val</span>.<span class="ident">extend</span>(<span class="string">b&quot;, Origin&quot;</span>);
<span class="ident">val</span>.<span class="ident">try_into</span>().<span class="ident">unwrap</span>()
}
<span class="prelude-val">None</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">HeaderValue</span>::<span class="ident">from_static</span>(<span class="string">&quot;Origin&quot;</span>),
<span class="prelude-val">None</span> <span class="op">=</span><span class="op">&gt;</span> <span class="ident">HeaderValue::from_static</span>(<span class="string">&quot;Origin&quot;</span>),
};
<span class="ident">res</span>.<span class="ident">headers_mut</span>().<span class="ident">insert</span>(<span class="ident">header</span>::<span class="ident">VARY</span>, <span class="ident">value</span>);
<span class="ident">res</span>.<span class="ident">headers_mut</span>().<span class="ident">insert</span>(<span class="ident">header::VARY</span>, <span class="ident">value</span>);
}
<span class="ident">res</span>
@@ -339,32 +339,32 @@
<span class="kw">impl</span><span class="op">&lt;</span><span class="ident">S</span>, <span class="ident">B</span><span class="op">&gt;</span> <span class="ident">Service</span><span class="op">&lt;</span><span class="ident">ServiceRequest</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">CorsMiddleware</span><span class="op">&lt;</span><span class="ident">S</span><span class="op">&gt;</span>
<span class="kw">where</span>
<span class="ident">S</span>: <span class="ident">Service</span><span class="op">&lt;</span><span class="ident">ServiceRequest</span>, <span class="ident">Response</span> <span class="op">=</span> <span class="ident">ServiceResponse</span><span class="op">&lt;</span><span class="ident">B</span><span class="op">&gt;</span>, <span class="ident">Error</span> <span class="op">=</span> <span class="ident">Error</span><span class="op">&gt;</span>,
<span class="ident">S</span>::<span class="ident">Future</span>: <span class="lifetime">&#39;static</span>,
<span class="ident">S::Future</span>: <span class="lifetime">&#39;static</span>,
<span class="ident">B</span>: <span class="lifetime">&#39;static</span>,
{
<span class="kw">type</span> <span class="ident">Response</span> <span class="op">=</span> <span class="ident">ServiceResponse</span><span class="op">&lt;</span><span class="ident">B</span><span class="op">&gt;</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="ident">CorsMiddlewareServiceFuture</span><span class="op">&lt;</span><span class="ident">B</span><span class="op">&gt;</span>;
<span class="ident">actix_service</span>::<span class="macro">forward_ready</span><span class="macro">!</span>(<span class="ident">service</span>);
<span class="macro">actix_service::forward_ready!</span>(<span class="ident">service</span>);
<span class="kw">fn</span> <span class="ident">call</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">req</span>: <span class="ident">ServiceRequest</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="self">Self</span>::<span class="ident">Future</span> {
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">inner</span>.<span class="ident">preflight</span> <span class="op">&amp;&amp;</span> <span class="ident">req</span>.<span class="ident">method</span>() <span class="op">=</span><span class="op">=</span> <span class="ident">Method</span>::<span class="ident">OPTIONS</span> {
<span class="kw">let</span> <span class="ident">inner</span> <span class="op">=</span> <span class="ident">Rc</span>::<span class="ident">clone</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">inner</span>);
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="self">Self</span>::<span class="ident">handle_preflight</span>(<span class="kw-2">&amp;</span><span class="ident">inner</span>, <span class="ident">req</span>);
<span class="ident">Either</span>::<span class="ident">Left</span>(<span class="ident">ok</span>(<span class="ident">res</span>))
<span class="kw">fn</span> <span class="ident">call</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">req</span>: <span class="ident">ServiceRequest</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="self">Self</span><span class="ident">::Future</span> {
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">inner</span>.<span class="ident">preflight</span> <span class="op">&amp;&amp;</span> <span class="ident">req</span>.<span class="ident">method</span>() <span class="op">=</span><span class="op">=</span> <span class="ident">Method::OPTIONS</span> {
<span class="kw">let</span> <span class="ident">inner</span> <span class="op">=</span> <span class="ident">Rc::clone</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">inner</span>);
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="self">Self</span><span class="ident">::handle_preflight</span>(<span class="kw-2">&amp;</span><span class="ident">inner</span>, <span class="ident">req</span>);
<span class="ident">Either::Left</span>(<span class="ident">ok</span>(<span class="ident">res</span>))
} <span class="kw">else</span> {
<span class="kw">let</span> <span class="ident">origin</span> <span class="op">=</span> <span class="ident">req</span>.<span class="ident">headers</span>().<span class="ident">get</span>(<span class="ident">header</span>::<span class="ident">ORIGIN</span>).<span class="ident">cloned</span>();
<span class="kw">let</span> <span class="ident">origin</span> <span class="op">=</span> <span class="ident">req</span>.<span class="ident">headers</span>().<span class="ident">get</span>(<span class="ident">header::ORIGIN</span>).<span class="ident">cloned</span>();
<span class="kw">if</span> <span class="ident">origin</span>.<span class="ident">is_some</span>() {
<span class="comment">// Only check requests with a origin header.</span>
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Err</span>(<span class="ident">err</span>) <span class="op">=</span> <span class="self">self</span>.<span class="ident">inner</span>.<span class="ident">validate_origin</span>(<span class="ident">req</span>.<span class="ident">head</span>()) {
<span class="macro">debug</span><span class="macro">!</span>(<span class="string">&quot;origin validation failed; inner service is not called&quot;</span>);
<span class="kw">return</span> <span class="ident">Either</span>::<span class="ident">Left</span>(<span class="ident">ok</span>(<span class="ident">req</span>.<span class="ident">error_response</span>(<span class="ident">err</span>)));
<span class="macro">debug!</span>(<span class="string">&quot;origin validation failed; inner service is not called&quot;</span>);
<span class="kw">return</span> <span class="ident">Either::Left</span>(<span class="ident">ok</span>(<span class="ident">req</span>.<span class="ident">error_response</span>(<span class="ident">err</span>)));
}
}
<span class="kw">let</span> <span class="ident">inner</span> <span class="op">=</span> <span class="ident">Rc</span>::<span class="ident">clone</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">inner</span>);
<span class="kw">let</span> <span class="ident">inner</span> <span class="op">=</span> <span class="ident">Rc::clone</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">inner</span>);
<span class="kw">let</span> <span class="ident">fut</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">service</span>.<span class="ident">call</span>(<span class="ident">req</span>);
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="kw">async</span> <span class="kw">move</span> {
@@ -372,14 +372,14 @@
<span class="kw">if</span> <span class="ident">origin</span>.<span class="ident">is_some</span>() {
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="ident">res</span><span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(<span class="self">Self</span>::<span class="ident">augment_response</span>(<span class="kw-2">&amp;</span><span class="ident">inner</span>, <span class="ident">res</span>))
<span class="prelude-val">Ok</span>(<span class="self">Self</span><span class="ident">::augment_response</span>(<span class="kw-2">&amp;</span><span class="ident">inner</span>, <span class="ident">res</span>))
} <span class="kw">else</span> {
<span class="ident">res</span>
}
}
.<span class="ident">boxed_local</span>();
<span class="ident">Either</span>::<span class="ident">Right</span>(<span class="ident">res</span>)
<span class="ident">Either::Right</span>(<span class="ident">res</span>)
}
}
}
@@ -387,50 +387,50 @@
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">test</span>)]</span>
<span class="kw">mod</span> <span class="ident">tests</span> {
<span class="kw">use</span> <span class="ident">actix_web</span>::{
<span class="ident">dev</span>::<span class="ident">Transform</span>,
<span class="ident">dev::Transform</span>,
<span class="ident">test</span>::{<span class="self">self</span>, <span class="ident">TestRequest</span>},
};
<span class="kw">use</span> <span class="kw">super</span>::<span class="kw-2">*</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">Cors</span>;
<span class="kw">use</span> <span class="kw">crate</span><span class="ident">::Cors</span>;
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">test_options_no_origin</span>() {
<span class="comment">// Tests case where allowed_origins is All but there are validate functions to run incase.</span>
<span class="comment">// In this case, origins are only allowed when the DNT header is sent.</span>
<span class="kw">let</span> <span class="ident">cors</span> <span class="op">=</span> <span class="ident">Cors</span>::<span class="ident">default</span>()
<span class="kw">let</span> <span class="ident">cors</span> <span class="op">=</span> <span class="ident">Cors::default</span>()
.<span class="ident">allow_any_origin</span>()
.<span class="ident">allowed_origin_fn</span>(<span class="op">|</span><span class="ident">origin</span>, <span class="ident">req_head</span><span class="op">|</span> {
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="kw-2">&amp;</span><span class="ident">origin</span>, <span class="ident">req_head</span>.<span class="ident">headers</span>.<span class="ident">get</span>(<span class="ident">header</span>::<span class="ident">ORIGIN</span>).<span class="ident">unwrap</span>());
<span class="macro">assert_eq!</span>(<span class="kw-2">&amp;</span><span class="ident">origin</span>, <span class="ident">req_head</span>.<span class="ident">headers</span>.<span class="ident">get</span>(<span class="ident">header::ORIGIN</span>).<span class="ident">unwrap</span>());
<span class="ident">req_head</span>.<span class="ident">headers</span>().<span class="ident">contains_key</span>(<span class="ident">header</span>::<span class="ident">DNT</span>)
<span class="ident">req_head</span>.<span class="ident">headers</span>().<span class="ident">contains_key</span>(<span class="ident">header::DNT</span>)
})
.<span class="ident">new_transform</span>(<span class="ident">test</span>::<span class="ident">ok_service</span>())
.<span class="ident">new_transform</span>(<span class="ident">test::ok_service</span>())
.<span class="kw">await</span>
.<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">req</span> <span class="op">=</span> <span class="ident">TestRequest</span>::<span class="ident">get</span>()
.<span class="ident">insert_header</span>((<span class="ident">header</span>::<span class="ident">ORIGIN</span>, <span class="string">&quot;http://example.com&quot;</span>))
<span class="kw">let</span> <span class="ident">req</span> <span class="op">=</span> <span class="ident">TestRequest::get</span>()
.<span class="ident">insert_header</span>((<span class="ident">header::ORIGIN</span>, <span class="string">&quot;http://example.com&quot;</span>))
.<span class="ident">to_srv_request</span>();
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="ident">cors</span>.<span class="ident">call</span>(<span class="ident">req</span>).<span class="kw">await</span>.<span class="ident">unwrap</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(
<span class="macro">assert_eq!</span>(
<span class="prelude-val">None</span>,
<span class="ident">res</span>.<span class="ident">headers</span>()
.<span class="ident">get</span>(<span class="ident">header</span>::<span class="ident">ACCESS_CONTROL_ALLOW_ORIGIN</span>)
.<span class="ident">map</span>(<span class="ident">HeaderValue</span>::<span class="ident">as_bytes</span>)
.<span class="ident">get</span>(<span class="ident">header::ACCESS_CONTROL_ALLOW_ORIGIN</span>)
.<span class="ident">map</span>(<span class="ident">HeaderValue::as_bytes</span>)
);
<span class="kw">let</span> <span class="ident">req</span> <span class="op">=</span> <span class="ident">TestRequest</span>::<span class="ident">get</span>()
.<span class="ident">insert_header</span>((<span class="ident">header</span>::<span class="ident">ORIGIN</span>, <span class="string">&quot;http://example.com&quot;</span>))
.<span class="ident">insert_header</span>((<span class="ident">header</span>::<span class="ident">DNT</span>, <span class="string">&quot;1&quot;</span>))
<span class="kw">let</span> <span class="ident">req</span> <span class="op">=</span> <span class="ident">TestRequest::get</span>()
.<span class="ident">insert_header</span>((<span class="ident">header::ORIGIN</span>, <span class="string">&quot;http://example.com&quot;</span>))
.<span class="ident">insert_header</span>((<span class="ident">header::DNT</span>, <span class="string">&quot;1&quot;</span>))
.<span class="ident">to_srv_request</span>();
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="ident">cors</span>.<span class="ident">call</span>(<span class="ident">req</span>).<span class="kw">await</span>.<span class="ident">unwrap</span>();
<span class="macro">assert_eq</span><span class="macro">!</span>(
<span class="macro">assert_eq!</span>(
<span class="prelude-val">Some</span>(<span class="kw-2">&amp;</span><span class="string">b&quot;http://example.com&quot;</span>[..]),
<span class="ident">res</span>.<span class="ident">headers</span>()
.<span class="ident">get</span>(<span class="ident">header</span>::<span class="ident">ACCESS_CONTROL_ALLOW_ORIGIN</span>)
.<span class="ident">map</span>(<span class="ident">HeaderValue</span>::<span class="ident">as_bytes</span>)
.<span class="ident">get</span>(<span class="ident">header::ACCESS_CONTROL_ALLOW_ORIGIN</span>)
.<span class="ident">map</span>(<span class="ident">HeaderValue::as_bytes</span>)
);
}
}