tag:github.com,2008:https://github.com/http-rs/http-types/releasesRelease notes from http-types2021-08-10T17:21:21Ztag:github.com,2008:Repository/219632755/v2.12.02021-08-10T17:23:42Zv2.12.0<h2>Additions:</h2>
<ul>
<li><code>AsRef<anyhow::Error> for http_types::Error</code></li>
<li><code>From<Vec<HeaderValue>> for HeaderValues</code></li>
<li>More <code>TryFrom<></code> conversions for the <code>"hyperium_http"</code> feature.</li>
</ul>
<h2>Fixes:</h2>
<ul>
<li>Addressed three bugs in forwarded header parsing. <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="957010445" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/375" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/375/hovercard" href="https://github.com/http-rs/http-types/pull/375">#375</a></li>
</ul>
<h2>Dependencies:</h2>
<ul>
<li>Update serde_qs to 0.8.3</li>
</ul>Fishrock123tag:github.com,2008:Repository/219632755/v2.11.12021-05-03T18:40:05Zv2.11.1<p><em><code>http-types</code> provides shared types for HTTP operations. It combines a performant, streaming interface with convenient methods for creating headers, urls, and other standard HTTP types. This is part of the <code>http-rs</code> project and powers the <code>tide</code> framework and <code>surf</code> client. Check out <a href="https://docs.rs/http-types" rel="nofollow">the docs</a> or <a href="https://http-rs.zulipchat.com/join/5phy5kfzfh6quhnlvtdspzrm/" rel="nofollow">join us on Zulip</a>.</em></p>
<h2>Highlights</h2>
<p>This release fixes an unconditional panic in the <code>hyperium_http</code> compatibility feature.</p>
<p>The <code>http-types</code> 3.0 merge window remains open, and you can see the nominated items for the next major version <a href="https://github.com/http-rs/http-types/labels/semver-major">as part of the <code>Semver-Major</code> issue on GitHub</a>.</p>
<h2>Fixed</h2>
<ul>
<li><code>hyperium_http</code>: Avoids unconditional panic when translating headers from hyperium. <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="868331888" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/359" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/359/hovercard" href="https://github.com/http-rs/http-types/pull/359">#359</a></li>
</ul>Fishrock123tag:github.com,2008:Repository/219632755/v2.11.02021-04-15T23:13:16Zv2.11.0<p><em><code>http-types</code> provides shared types for HTTP operations. It combines a performant, streaming interface with convenient methods for creating headers, urls, and other standard HTTP types. This is part of the <code>http-rs</code> project and powers the <code>tide</code> framework and <code>surf</code> client. Check out <a href="https://docs.rs/http-types" rel="nofollow">the docs</a> or <a href="https://http-rs.zulipchat.com/join/5phy5kfzfh6quhnlvtdspzrm/" rel="nofollow">join us on Zulip</a>.</em></p>
<h2>Highlights</h2>
<p>This release represents continued support of the <code>http-types</code> 2.x release line due to delays in the development of <code>http-types</code> 3.0.0. This release comes with several convenience features, listed below.</p>
<p>The <code>http-types</code> 3.0 merge window remains open, and you can see the nominated items for the next major version <a href="https://github.com/http-rs/http-types/labels/semver-major">as part of the <code>Semver-Major</code> issue on GitHub</a>.</p>
<h2>Changed</h2>
<ul>
<li>Allowed <code>Request.query()</code> to deserialize into a borrowed <code>Deserialize<'de></code> rather than just <code>DeserializeOwned</code>. <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="806713305" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/333" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/333/hovercard" href="https://github.com/http-rs/http-types/pull/333">#333</a>
<ul>
<li>This is a looser restriction and is not a breaking change. See <a href="https://serde.rs/lifetimes.html" rel="nofollow">serde's documentation on the subject</a>.</li>
</ul>
</li>
</ul>
<h2>Added</h2>
<ul>
<li>More HTTP Methods from <a href="https://www.iana.org/assignments/http-methods/http-methods.xhtml" rel="nofollow">the IANA registry</a>. <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="802708140" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/332" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/332/hovercard" href="https://github.com/http-rs/http-types/pull/332">#332</a></li>
<li><code>Body::chain()</code> for merge multiple <code>Body</code> instances. <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="815979852" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/342" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/342/hovercard" href="https://github.com/http-rs/http-types/pull/342">#342</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="822519686" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/346" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/346/hovercard" href="https://github.com/http-rs/http-types/pull/346">#346</a></li>
<li><code>AsRef<str> for Version</code>, returning <code>'static str</code>. <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="848838254" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/351" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/351/hovercard" href="https://github.com/http-rs/http-types/pull/351">#351</a></li>
<li><code>Error::from_debug()</code>, a helper for converting from <code>std::error::Error</code>s. <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="821545269" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/345" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/345/hovercard" href="https://github.com/http-rs/http-types/pull/345">#345</a></li>
<li><code>Error::from_display</code>, a helper for converting from <code>std::error::Error</code>s. <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="821545269" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/345" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/345/hovercard" href="https://github.com/http-rs/http-types/pull/345">#345</a></li>
</ul>
<h2>Fixed</h2>
<ul>
<li>Corrected error messages for <code>Content-Encoding</code> and <code>Transfer-Encoding</code>. <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="854154185" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/354" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/354/hovercard" href="https://github.com/http-rs/http-types/pull/354">#354</a></li>
</ul>
<h2>Docs</h2>
<ul>
<li>Improved request examples with the <code>url</code>'s crate new <code>TryFrom<&str></code>. <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="792574500" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/324" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/324/hovercard" href="https://github.com/http-rs/http-types/pull/324">#324</a></li>
<li>4xx status codes now have the right descriptions. <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="815882997" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/341" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/341/hovercard" href="https://github.com/http-rs/http-types/pull/341">#341</a></li>
<li>Fixed for <code>Content-Encoding</code> and <code>Transfer-Encoding</code> docs. <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="854154185" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/354" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/354/hovercard" href="https://github.com/http-rs/http-types/pull/354">#354</a></li>
</ul>Fishrock123tag:github.com,2008:Repository/219632755/v2.10.02021-01-22T18:50:02Zv2.10.0<p><em><code>http-types</code> provides shared types for HTTP operations. It combines a performant, streaming interface with convenient methods for creating headers, urls, and other standard HTTP types. This is part of the <code>http-rs</code> project and powers the <code>tide</code> and <code>surf</code> frameworks. Check out <a href="https://docs.rs/http-types" rel="nofollow">the docs</a> or <a href="https://http-rs.zulipchat.com/join/5phy5kfzfh6quhnlvtdspzrm/" rel="nofollow">join us on Zulip</a>.</em></p>
<h2>Highlights</h2>
<p>This release introduces several new typed headers:</p>
<ul>
<li><code>transfer::TransferEncoding</code>: The form of encoding used to safely transfer the payload body to the user.</li>
<li><code>transfer::TE</code>: Client header advertising the transfer encodings the user agent is willing to accept.</li>
<li><code>other::RetryAfter</code>: Indicate how long the user agent should wait before making a follow-up request.</li>
<li><code>other::Referer</code>: Contains the address of the page making the request.</li>
<li><code>content::Accept</code>: Client header advertising which media types the client is able to understand.</li>
<li><code>content::ContentType</code>: Indicate the media type of a resource's content.</li>
</ul>
<p>Most notably is probably the <code>RetryAfter</code> header, which can be used to enable load-shedding on the client. An example of such a middleware <a href="https://github.com/http-rs/tide/pull/770" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/tide/pull/770/hovercard">has been authored for <code>Tide</code></a>.</p>
<h2>http-types 3.0 merge window opened</h2>
<p>This marks the final release of the 2.x release line of <code>http-types</code>. It's been almost a year since our last major release, and we've decided to open up the merge window for <code>http-types</code> 3.0 now that <code>2.10.0</code> has shipped. You can see the nominated items for the next major version <a href="https://github.com/http-rs/http-types/labels/semver-major">as part of the <code>Semver-Major</code> issue on GitHub</a>.</p>
<p>Because this is the first major release of <code>http-types</code> we're doing since we moved to our monthly release cadence, we're not entirely sure yet how we'll manage this. Perhaps next month's release may be a beta release. Or we may delay doing a release at all until all items have been merged. We'll have to see, but once 3.0 is out we'll resume the monthly release cadence.</p>
<h2>Added</h2>
<ul>
<li>Add the <code>Retry-After</code> type header <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="774913774" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/314" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/314/hovercard" href="https://github.com/http-rs/http-types/pull/314">#314</a></li>
<li>Allow omitting cookie support, with a new <code>"cookies"</code> feature <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="771357271" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/306" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/306/hovercard" href="https://github.com/http-rs/http-types/pull/306">#306</a></li>
<li>Add <code>Transfer-Encoding</code> and <code>TE</code> headers <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="771184992" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/301" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/301/hovercard" href="https://github.com/http-rs/http-types/pull/301">#301</a></li>
<li>Add <code>other::SourceMap</code> header <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="737328905" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/278" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/278/hovercard" href="https://github.com/http-rs/http-types/pull/278">#278</a></li>
<li>Add <code>other::Referer</code> header <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="737325543" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/277" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/277/hovercard" href="https://github.com/http-rs/http-types/pull/277">#277</a></li>
<li>Add <code>content::{Accept, ContentType}</code> headers <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="735649879" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/270" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/270/hovercard" href="https://github.com/http-rs/http-types/pull/270">#270</a></li>
</ul>
<h2>Changed</h2>
<ul>
<li>Update examples to use <code>TryFrom<str></code> for Url implementation <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="757540249" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/294" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/294/hovercard" href="https://github.com/http-rs/http-types/pull/294">#294</a></li>
</ul>
<h2>Internal</h2>
<ul>
<li>Fix clippy lints <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="788462089" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/321" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/321/hovercard" href="https://github.com/http-rs/http-types/pull/321">#321</a></li>
<li>Delete .travis.yml <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="774901162" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/312" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/312/hovercard" href="https://github.com/http-rs/http-types/pull/312">#312</a></li>
<li>Refactor media type internals <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="774521237" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/310" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/310/hovercard" href="https://github.com/http-rs/http-types/pull/310">#310</a></li>
<li>Make MIME tests conditional on the "fs" feature <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="771357372" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/307" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/307/hovercard" href="https://github.com/http-rs/http-types/pull/307">#307</a></li>
<li>Upgrade pin-project-lite to 0.2.0 <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="770692840" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/299" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/299/hovercard" href="https://github.com/http-rs/http-types/pull/299">#299</a></li>
</ul>yoshuawuytstag:github.com,2008:Repository/219632755/v2.9.02020-12-04T23:38:31Zv2.9.0<h1>Features:</h1>
<ul>
<li>Stabilize support for protocol upgrades on Response <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="752253541" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/291" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/291/hovercard" href="https://github.com/http-rs/http-types/pull/291">#291</a></li>
<li>Adds <a href="https://docs.rs/http-types/2.9.0/http_types/auth/struct.BasicAuth.html#method.from_credentials" rel="nofollow">BasicAuth::from_credentials</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="749832142" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/284" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/284/hovercard" href="https://github.com/http-rs/http-types/pull/284">#284</a></li>
<li>Adds <a href="https://docs.rs/http-types/2.9.0/http_types/other/struct.Expect.html" rel="nofollow">other::Expect</a> header <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="734094179" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/266" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/266/hovercard" href="https://github.com/http-rs/http-types/pull/266">#266</a></li>
<li>Provides a uniform interface for <a href="https://docs.rs/http-types/2.9.0/http_types/struct.Error.html#method.backtrace" rel="nofollow">retrieving an optional backtrace</a> from http_types::Error whether or not backtraces are available <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="717676055" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/258" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/258/hovercard" href="https://github.com/http-rs/http-types/pull/258">#258</a></li>
<li>Adds a <a href="https://docs.rs/http-types/2.9.0/http_types/headers/constant.PROXY_CONNECTION.html" rel="nofollow">proxy-connection</a> header const <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="749188498" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/283" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/283/hovercard" href="https://github.com/http-rs/http-types/pull/283">#283</a></li>
<li>Adds <a href="https://docs.rs/http-types/2.9.0/http_types/struct.Error.html#method.into_inner" rel="nofollow">Error::into_inner</a> to retrieve an anyhow Error from a http_types::Error <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="722583179" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/259" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/259/hovercard" href="https://github.com/http-rs/http-types/pull/259">#259</a></li>
</ul>
<h1>Internal:</h1>
<ul>
<li>Body Read implementation now will not read beyond the content-length, if one is provided. Previously this logic existed in async-h1, but now is the responsibility of Body <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="743161301" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/282" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/282/hovercard" href="https://github.com/http-rs/http-types/pull/282">#282</a></li>
</ul>jbrtag:github.com,2008:Repository/219632755/v2.8.02020-11-13T14:51:30Zv2.8.0<p>This patch adds support for <code>cache::ClearSiteData</code>, <code>content::ContentLocation</code> and implements <code>ToHeaderValues</code> for more string types. This continues our progress on implementing typed headers. We're currently at 50/70 implemented, and expect to be finishing up in the near future. At which point we can start to integrate these into higher-level crates such as <code>tide</code> and <code>surf</code>.</p>
<h2>Added</h2>
<ul>
<li>Implement <code>ToHeaderValues</code> for more string types <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="738457679" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/279" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/279/hovercard" href="https://github.com/http-rs/http-types/pull/279">#279</a></li>
<li>Add <code>cache::ClearSiteData</code> header <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="734090515" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/265" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/265/hovercard" href="https://github.com/http-rs/http-types/pull/265">#265</a></li>
<li>Add <code>content::ContentLocation</code> header <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="717427562" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/256" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/256/hovercard" href="https://github.com/http-rs/http-types/pull/256">#256</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="737312696" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/276" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/276/hovercard" href="https://github.com/http-rs/http-types/pull/276">#276</a></li>
</ul>
<h2>Internal</h2>
<ul>
<li>CI improvements <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="737172673" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/275" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/275/hovercard" href="https://github.com/http-rs/http-types/pull/275">#275</a></li>
</ul>yoshuawuytstag:github.com,2008:Repository/219632755/v2.7.02020-10-30T10:52:20Zv2.7.0<p>This patch adds support for <code>auth</code> typed headers, enables our enums to be serialized and deserialized through <code>serde</code>, and fixes a bug in our <code>Method</code> string parser.</p>
<h2>Auth</h2>
<p>This patch introduces type-safe headers for authentication. The core headers are <code>auth::{Authorization, AuthenticationScheme, WwwAuthenticate}</code> which enable a server to request a client to authenticate, and for the client to construct authentication. However for convenience we've added support for the <code>BasicAuth</code> authentication scheme, making it straight forward to add some authentication to your application.</p>
<p>The plan for typed headers is to enable higher-level middleware to be written for them. As you can see in the example below, while application authors no longer need to deal with correctly parsing and encoding headers it's not exactly convenient yet. We're currently <a href="https://github.com/http-rs/http-types/issues/99" data-hovercard-type="issue" data-hovercard-url="/http-rs/http-types/issues/99/hovercard">about halfway through</a> implementing encoders and parsers for all known typed headers. And once that's complete it'll enable us to iterate on convenient features and middleware in the <code>tide</code> and <code>surf</code> frameworks.</p>
<p>However for now, here's a simplified example of how to use the new <code>BasicAuth</code> typed headers with the <a href="https://docs.rs/tide/0.14.0/tide/" rel="nofollow"><code>tide</code></a> server:</p>
<div class="highlight highlight-source-rust notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="use tide::http::auth::{AuthenticationScheme, BasicAuth, WwwAuthenticate};
use tide::http::ensure_eq;
use tide::sessions::{MemoryStore, SessionMiddleware};
use tide::{Request, Response};
// Global variables for the example; don't do this in a production setting
const SECRET: &[u8] = b"shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh";
const USERNAME: &str = "nori";
const PASSWORD: &str = "ilovefish";
const USER_ID: &str = "12";
// Setup a Tide app with a single endpoint that requires authentication
#[async_std::main]
async fn main() -> Result<(), std::io::Error> {
tide::log::start();
let mut app = tide::new();
app.with(SessionMiddleware::new(MemoryStore::new(), SECRET));
app.at("/").get(login);
app.listen("127.0.0.1:8080").await?;
Ok(())
}
// An endpoint that validates the credentials on a request
// and marks a session as authenticated if they pass
async fn login(mut req: Request<()>) -> tide::Result {
let session = req.session();
// Check if we're already logged in
if let Some(_) = session.get::<String>("user_id") {
return Ok("Already logged in!".into());
}
// Check if credentials are passed; if not request them.
let auth = match BasicAuth::from_headers(&req)? {
Some(auth) => auth,
None => {
let schema = AuthenticationScheme::Basic;
let realm = "access the tuna mainframe";
let auth = WwwAuthenticate::new(schema, realm.into());
return Ok(Response::builder(401)
.header(auth.name(), auth.value())
.build());
}
};
// Validate the username and password. In a real application we'd
// validate the hashed password from a database. This is an example only.
ensure_eq!(auth.username(), USERNAME, "unknown username");
ensure_eq!(auth.password(), PASSWORD, "incorrect password");
// If validation succeeded, mark the session as validated.
let session = req.session_mut();
session.insert("user_id", USER_ID)?;
// Print a success message
Ok("Login successful!".into())
}"><pre><span class="pl-k">use</span> tide<span class="pl-kos">::</span>http<span class="pl-kos">::</span>auth<span class="pl-kos">::</span><span class="pl-kos">{</span><span class="pl-v">AuthenticationScheme</span><span class="pl-kos">,</span> <span class="pl-v">BasicAuth</span><span class="pl-kos">,</span> <span class="pl-v">WwwAuthenticate</span><span class="pl-kos">}</span><span class="pl-kos">;</span>
<span class="pl-k">use</span> tide<span class="pl-kos">::</span>http<span class="pl-kos">::</span>ensure_eq<span class="pl-kos">;</span>
<span class="pl-k">use</span> tide<span class="pl-kos">::</span>sessions<span class="pl-kos">::</span><span class="pl-kos">{</span><span class="pl-v">MemoryStore</span><span class="pl-kos">,</span> <span class="pl-v">SessionMiddleware</span><span class="pl-kos">}</span><span class="pl-kos">;</span>
<span class="pl-k">use</span> tide<span class="pl-kos">::</span><span class="pl-kos">{</span><span class="pl-v">Request</span><span class="pl-kos">,</span> <span class="pl-v">Response</span><span class="pl-kos">}</span><span class="pl-kos">;</span>
<span class="pl-c">// Global variables for the example; don't do this in a production setting</span>
<span class="pl-k">const</span> <span class="pl-v">SECRET</span><span class="pl-kos">:</span> <span class="pl-c1">&</span><span class="pl-kos">[</span><span class="pl-smi">u8</span><span class="pl-kos">]</span> = <span class="pl-s">b"shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"</span><span class="pl-kos">;</span>
<span class="pl-k">const</span> <span class="pl-v">USERNAME</span><span class="pl-kos">:</span> <span class="pl-c1">&</span><span class="pl-smi">str</span> = <span class="pl-s">"nori"</span><span class="pl-kos">;</span>
<span class="pl-k">const</span> <span class="pl-v">PASSWORD</span><span class="pl-kos">:</span> <span class="pl-c1">&</span><span class="pl-smi">str</span> = <span class="pl-s">"ilovefish"</span><span class="pl-kos">;</span>
<span class="pl-k">const</span> <span class="pl-v">USER_ID</span><span class="pl-kos">:</span> <span class="pl-c1">&</span><span class="pl-smi">str</span> = <span class="pl-s">"12"</span><span class="pl-kos">;</span>
<span class="pl-c">// Setup a Tide app with a single endpoint that requires authentication</span>
<span class="pl-c1">#<span class="pl-kos">[</span>async_std<span class="pl-kos">::</span>main<span class="pl-kos">]</span></span>
<span class="pl-k">async</span> <span class="pl-k">fn</span> <span class="pl-en">main</span><span class="pl-kos">(</span><span class="pl-kos">)</span> -> <span class="pl-smi">Result</span><span class="pl-kos"><</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">,</span> std<span class="pl-kos">::</span>io<span class="pl-kos">::</span><span class="pl-smi">Error</span><span class="pl-kos">></span> <span class="pl-kos">{</span>
tide<span class="pl-kos">::</span>log<span class="pl-kos">::</span><span class="pl-en">start</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-k">let</span> <span class="pl-k">mut</span> app = tide<span class="pl-kos">::</span><span class="pl-en">new</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
app<span class="pl-kos">.</span><span class="pl-en">with</span><span class="pl-kos">(</span><span class="pl-smi">SessionMiddleware</span><span class="pl-kos">::</span><span class="pl-en">new</span><span class="pl-kos">(</span><span class="pl-smi">MemoryStore</span><span class="pl-kos">::</span><span class="pl-en">new</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-v">SECRET</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
app<span class="pl-kos">.</span><span class="pl-en">at</span><span class="pl-kos">(</span><span class="pl-s">"/"</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">get</span><span class="pl-kos">(</span>login<span class="pl-kos">)</span><span class="pl-kos">;</span>
app<span class="pl-kos">.</span><span class="pl-en">listen</span><span class="pl-kos">(</span><span class="pl-s">"127.0.0.1:8080"</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-k">await</span>?<span class="pl-kos">;</span>
<span class="pl-en">Ok</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span>
<span class="pl-kos">}</span>
<span class="pl-c">// An endpoint that validates the credentials on a request</span>
<span class="pl-c">// and marks a session as authenticated if they pass</span>
<span class="pl-k">async</span> <span class="pl-k">fn</span> <span class="pl-en">login</span><span class="pl-kos">(</span><span class="pl-k">mut</span> <span class="pl-s1">req</span><span class="pl-kos">:</span> <span class="pl-smi">Request</span><span class="pl-kos"><</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">></span><span class="pl-kos">)</span> -> tide<span class="pl-kos">::</span><span class="pl-smi">Result</span> <span class="pl-kos">{</span>
<span class="pl-k">let</span> session = req<span class="pl-kos">.</span><span class="pl-en">session</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-c">// Check if we're already logged in</span>
<span class="pl-k">if</span> <span class="pl-k">let</span> <span class="pl-v">Some</span><span class="pl-kos">(</span>_<span class="pl-kos">)</span> = session<span class="pl-kos">.</span><span class="pl-en">get</span><span class="pl-kos">::</span><span class="pl-kos"><</span><span class="pl-smi">String</span><span class="pl-kos">></span><span class="pl-kos">(</span><span class="pl-s">"user_id"</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
<span class="pl-k">return</span> <span class="pl-en">Ok</span><span class="pl-kos">(</span><span class="pl-s">"Already logged in!"</span><span class="pl-kos">.</span><span class="pl-en">into</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span>
<span class="pl-c">// Check if credentials are passed; if not request them.</span>
<span class="pl-k">let</span> auth = <span class="pl-k">match</span> <span class="pl-smi">BasicAuth</span><span class="pl-kos">::</span><span class="pl-en">from_headers</span><span class="pl-kos">(</span><span class="pl-c1">&</span>req<span class="pl-kos">)</span>? <span class="pl-kos">{</span>
<span class="pl-v">Some</span><span class="pl-kos">(</span>auth<span class="pl-kos">)</span> => auth<span class="pl-kos">,</span>
<span class="pl-v">None</span> => <span class="pl-kos">{</span>
<span class="pl-k">let</span> schema = <span class="pl-smi">AuthenticationScheme</span><span class="pl-kos">::</span><span class="pl-v">Basic</span><span class="pl-kos">;</span>
<span class="pl-k">let</span> realm = <span class="pl-s">"access the tuna mainframe"</span><span class="pl-kos">;</span>
<span class="pl-k">let</span> auth = <span class="pl-smi">WwwAuthenticate</span><span class="pl-kos">::</span><span class="pl-en">new</span><span class="pl-kos">(</span>schema<span class="pl-kos">,</span> realm<span class="pl-kos">.</span><span class="pl-en">into</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-k">return</span> <span class="pl-en">Ok</span><span class="pl-kos">(</span><span class="pl-smi">Response</span><span class="pl-kos">::</span><span class="pl-en">builder</span><span class="pl-kos">(</span><span class="pl-c1">401</span><span class="pl-kos">)</span>
<span class="pl-kos">.</span><span class="pl-en">header</span><span class="pl-kos">(</span>auth<span class="pl-kos">.</span><span class="pl-en">name</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">,</span> auth<span class="pl-kos">.</span><span class="pl-en">value</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span>
<span class="pl-kos">.</span><span class="pl-en">build</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span>
<span class="pl-c">// Validate the username and password. In a real application we'd</span>
<span class="pl-c">// validate the hashed password from a database. This is an example only.</span>
<span class="pl-en">ensure_eq</span><span class="pl-en">!</span><span class="pl-kos">(</span>auth<span class="pl-kos">.</span>username<span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-v">USERNAME</span><span class="pl-kos">,</span> <span class="pl-s">"unknown username"</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-en">ensure_eq</span><span class="pl-en">!</span><span class="pl-kos">(</span>auth<span class="pl-kos">.</span>password<span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-v">PASSWORD</span><span class="pl-kos">,</span> <span class="pl-s">"incorrect password"</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-c">// If validation succeeded, mark the session as validated.</span>
<span class="pl-k">let</span> session = req<span class="pl-kos">.</span><span class="pl-en">session_mut</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
session<span class="pl-kos">.</span><span class="pl-en">insert</span><span class="pl-kos">(</span><span class="pl-s">"user_id"</span><span class="pl-kos">,</span> <span class="pl-v">USER_ID</span><span class="pl-kos">)</span>?<span class="pl-kos">;</span>
<span class="pl-c">// Print a success message</span>
<span class="pl-en">Ok</span><span class="pl-kos">(</span><span class="pl-s">"Login successful!"</span><span class="pl-kos">.</span><span class="pl-en">into</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span>
<span class="pl-kos">}</span></pre></div>
<h2>Added</h2>
<ul>
<li>Add <code>serde::Deserialize</code> and <code>serde::Serialize</code> impls for <code>Version</code>, <code>StatusCode</code> and <code>Method</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="730488914" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/262" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/262/hovercard" href="https://github.com/http-rs/http-types/pull/262">#262</a></li>
<li>Add <code>auth::Authorization</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="712926655" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/252" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/252/hovercard" href="https://github.com/http-rs/http-types/pull/252">#252</a></li>
<li>Add <code>auth::AuthenticationScheme</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="712926655" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/252" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/252/hovercard" href="https://github.com/http-rs/http-types/pull/252">#252</a></li>
<li>Add <code>auth::BasicAuth</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="712926655" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/252" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/252/hovercard" href="https://github.com/http-rs/http-types/pull/252">#252</a></li>
<li>Add <code>auth::WwwAuthenticate</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="712926655" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/252" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/252/hovercard" href="https://github.com/http-rs/http-types/pull/252">#252</a></li>
<li>Add <code>auth::ProxyAuthorization</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="712926655" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/252" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/252/hovercard" href="https://github.com/http-rs/http-types/pull/252">#252</a></li>
<li>Add <code>auth::ProxyAuthenticate</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="712926655" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/252" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/252/hovercard" href="https://github.com/http-rs/http-types/pull/252">#252</a></li>
</ul>
<h2>Fixed</h2>
<ul>
<li>Make <code>Method::parse</code> case insensitive <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="729135367" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/261" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/261/hovercard" href="https://github.com/http-rs/http-types/pull/261">#261</a></li>
</ul>yoshuawuytstag:github.com,2008:Repository/219632755/v2.6.02020-10-17T15:52:43Zv2.6.0<p>This patch introduces various new typed headers, and a feature flag to disable the <code>async-std</code> dependency.</p>
<h2>Added</h2>
<ul>
<li>Add <code>other::Date</code> header <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="716096616" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/255" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/255/hovercard" href="https://github.com/http-rs/http-types/pull/255">#255</a></li>
<li>Add <code>server::Allow</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="716074814" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/254" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/254/hovercard" href="https://github.com/http-rs/http-types/pull/254">#254</a></li>
<li>Add <code>content::ContentLength</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="716022393" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/253" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/253/hovercard" href="https://github.com/http-rs/http-types/pull/253">#253</a></li>
<li>Add a feature flag for <code>async-std</code> to enable people to disable the dependency <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="705009264" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/246" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/246/hovercard" href="https://github.com/http-rs/http-types/pull/246">#246</a></li>
</ul>yoshuawuytstag:github.com,2008:Repository/219632755/v2.5.02020-09-29T07:01:31Zv2.5.0<p>This patch introduces various typed headers for content-negotiation, proxying, and makes it easier to work with statuscodes in errors.</p>
<h2>Added</h2>
<ul>
<li>Add <code>contains</code> to <code>HeaderValues</code>. <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="702997572" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/240" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/240/hovercard" href="https://github.com/http-rs/http-types/pull/240">#240</a></li>
<li>impl Display for Version <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="694589082" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/238" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/238/hovercard" href="https://github.com/http-rs/http-types/pull/238">#238</a></li>
<li>Add <code>content::AcceptEncoding</code>. <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="684239793" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/232" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/232/hovercard" href="https://github.com/http-rs/http-types/pull/232">#232</a></li>
<li>Add <code>conditional::Vary</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="675575946" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/225" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/225/hovercard" href="https://github.com/http-rs/http-types/pull/225">#225</a></li>
<li>Add <code>conditional::{IfMatch, IfNoneMatch}</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="675537488" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/224" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/224/hovercard" href="https://github.com/http-rs/http-types/pull/224">#224</a></li>
<li>Add <code>conditional::{IfModifiedSince, IfUnmodifiedSince, LastModified}</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="675523348" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/222" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/222/hovercard" href="https://github.com/http-rs/http-types/pull/222">#222</a></li>
<li>Add <code>proxies::Forwarded</code> header <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="675365462" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/221" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/221/hovercard" href="https://github.com/http-rs/http-types/pull/221">#221</a></li>
<li>Add <code>cache::Expires</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="675256834" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/220" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/220/hovercard" href="https://github.com/http-rs/http-types/pull/220">#220</a></li>
<li>Add <code>cache::Age</code> header <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="675108966" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/219" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/219/hovercard" href="https://github.com/http-rs/http-types/pull/219">#219</a></li>
<li>Added <code>Error::type_name</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="673713041" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/213" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/213/hovercard" href="https://github.com/http-rs/http-types/pull/213">#213</a></li>
</ul>
<h2>Changed</h2>
<ul>
<li>Allow <code>Error::set_status</code> to take <code>TryInto<StatusCode></code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="709711363" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/249" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/249/hovercard" href="https://github.com/http-rs/http-types/pull/249">#249</a></li>
<li>Enabled <code>Error::new</code> to take <code>TryInto<StatusCode></code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="674846930" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/216" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/216/hovercard" href="https://github.com/http-rs/http-types/pull/216">#216</a></li>
<li>Tweak main lib docs <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="684919587" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/235" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/235/hovercard" href="https://github.com/http-rs/http-types/pull/235">#235</a></li>
<li>Update headers copy <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="675524758" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/223" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/223/hovercard" href="https://github.com/http-rs/http-types/pull/223">#223</a></li>
</ul>
<h2>Removed</h2>
<ul>
<li>Removed "unstable" Client and Server traits <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="675091640" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/218" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/218/hovercard" href="https://github.com/http-rs/http-types/pull/218">#218</a></li>
</ul>
<h2>Fixed</h2>
<ul>
<li>Fix typo <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="704905911" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/243" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/243/hovercard" href="https://github.com/http-rs/http-types/pull/243">#243</a></li>
<li>Fix error message <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="690357665" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/237" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/237/hovercard" href="https://github.com/http-rs/http-types/pull/237">#237</a></li>
<li>Headers: etag: reject invalid characters <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="684765316" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/233" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/233/hovercard" href="https://github.com/http-rs/http-types/pull/233">#233</a></li>
</ul>
<h2>Internal</h2>
<ul>
<li>Dont deny warnings during dev <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="705009223" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/245" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/245/hovercard" href="https://github.com/http-rs/http-types/pull/245">#245</a></li>
<li>Bump dependencies <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="704905536" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/242" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/242/hovercard" href="https://github.com/http-rs/http-types/pull/242">#242</a></li>
<li>CI: only run clippy as part of fmt <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="701494429" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/239" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/239/hovercard" href="https://github.com/http-rs/http-types/pull/239">#239</a></li>
<li>Upgrade to infer 0.2.3 <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="686171413" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/236" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/236/hovercard" href="https://github.com/http-rs/http-types/pull/236">#236</a></li>
<li>Fix clippy warnings <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="684847940" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/234" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/234/hovercard" href="https://github.com/http-rs/http-types/pull/234">#234</a></li>
<li>Fix clippy warning <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="709712878" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/250" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/250/hovercard" href="https://github.com/http-rs/http-types/pull/250">#250</a></li>
<li>Run ci on stable as well as nightly <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="678897286" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/229" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/229/hovercard" href="https://github.com/http-rs/http-types/pull/229">#229</a></li>
<li>Do not run ci for wasm — async-std 1.6.3 does not compile on wasm arch <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="678895644" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/228" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/228/hovercard" href="https://github.com/http-rs/http-types/pull/228">#228</a></li>
<li>Main branch renamed to <code>main</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="675696672" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/226" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/226/hovercard" href="https://github.com/http-rs/http-types/pull/226">#226</a></li>
<li>Move <code>TimingAllowOrigin</code> to security submodule <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="675090401" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/217" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/217/hovercard" href="https://github.com/http-rs/http-types/pull/217">#217</a></li>
</ul>yoshuawuytstag:github.com,2008:Repository/219632755/v2.4.02020-08-05T17:03:14Zv2.4.0<p>This patch introduces various unstable <code>trace</code> typed headers, adds a <code>From<&str></code> impl for <code>Mime</code>, and includes a minor performance improvement.</p>
<h2>Added</h2>
<ul>
<li>Add <code>trace::ServerTiming</code> as "unstable" <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="663893314" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/203" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/203/hovercard" href="https://github.com/http-rs/http-types/pull/203">#203</a></li>
<li>Add <code>From<&str> for Mime</code> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="635646413" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/179" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/179/hovercard" href="https://github.com/http-rs/http-types/pull/179">#179</a></li>
<li>Add <code>trace::AllowOrigin</code> as "unstable" <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="669213971" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/209" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/209/hovercard" href="https://github.com/http-rs/http-types/pull/209">#209</a></li>
</ul>
<h2>Changed</h2>
<ul>
<li>Normalize the trace submodule <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="664482818" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/204" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/204/hovercard" href="https://github.com/http-rs/http-types/pull/204">#204</a></li>
</ul>
<h2>Internal</h2>
<ul>
<li>Remove an unnecessary String allocation <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="656613201" data-permission-text="Title is private" data-url="https://github.com/http-rs/http-types/issues/200" data-hovercard-type="pull_request" data-hovercard-url="/http-rs/http-types/pull/200/hovercard" href="https://github.com/http-rs/http-types/pull/200">#200</a></li>
</ul>yoshuawuyts