Commit graph

100 commits

Author SHA1 Message Date
David Pedersen
1e51ea9423
Fix rejection status codes (#751) 2022-02-09 10:19:31 +00:00
Ibraheem Ahmed
2eab37280c
update matchit to 0.4.6 (#736) 2022-01-31 19:06:24 +00:00
Eray Karatay
720b2ba0c4
fix crates.io links (#735) 2022-01-31 17:09:55 +01:00
David Pedersen
515495d957
Set content-length for responses to HEAD requests (#734)
* Set `content-length` internally in `Router`

* changelog

* require `B: HttpBody` at the `impl`

* add changelog refs
2022-01-31 13:48:51 +01:00
David Pedersen
84df7eaa38 MethodRouter::fallback docs follow up
https://github.com/tokio-rs/axum/pull/733#discussion_r795244092
2022-01-31 09:37:29 +01:00
David Pedersen
513766b9e7
Set Allow header when returning 405 Method Not Allowed (#733) 2022-01-30 21:41:34 +01:00
David Pedersen
a04fc42d75
Rework middleware docs (#732)
* rework middleware docs

* Apply suggestions from code review

Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>

Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>
2022-01-30 20:09:18 +01:00
David Pedersen
f6fc5ed80c
Move axum-debug into axum-macros (#724)
* Move axum-debug into axum-macros

* fix ref to axum-macros in changelog

* Apply suggestions from code review

Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>

Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>
2022-01-26 23:27:22 +01:00
Alex
b1283e9708
Fix year for the 0.4.4 release (#727) 2022-01-26 08:17:39 +01:00
David Pedersen
9004a14302
Move middleware::from_fn into axum (#719)
* Move `middleware::from_fn` into axum

* changelog

* fix feature

* Rephrase changelog a bit
2022-01-25 10:19:06 +01:00
David Pedersen
4f6e86f026 Fixup changelogs 2022-01-25 09:46:26 +01:00
David Pedersen
d4849820ce Move Headers into axum 2022-01-23 20:25:12 +01:00
Jonas Platte
bf83f34617 Add trait IntoResponseHeaders (#649)
* Introduce IntoResponseHeaders trait

* Implement IntoResponseHeaders for HeaderMap

* Add impl IntoResponse for impl IntoResponseHeaders

… and update IntoResponse impls that use HeaderMap to be generic instead.

* Add impl IntoResponseHeaders for Headers

… and remove IntoResponse impls that use it.

* axum-debug: Fix grammar in docs

* Explain confusing error message in docs
2022-01-23 18:01:52 +01:00
David Pedersen
b1ef0be1a7 Remove RequestParts::take_extensions (#699)
* Remove `RequestParts::take_extensions`

* fix out of date docs

* Remove RequestAlreadyExtracted and replace it with BodyAlreadyExtracted

* fix docs

* fix test

* Update axum-core/src/extract/mod.rs

Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>

* Remove macro only used once

Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>
2022-01-23 18:01:52 +01:00
David Pedersen
184ea656c0 Change HeaderMap extractor to clone the headers (#698)
* Change `HeaderMap` extractor to clone the headers

* fix docs

* changelog

* inline variable

* also add changelog item to axum

* don't list types from axum in axum-core's changelog

* document that `HeaderMap::from_request` clones the headers

* fix typo

* a few more typos
2022-01-23 18:01:52 +01:00
Sabrina Jewson
d5694f0d0d Make sse::Event build event as a BytesMut (#647)
Co-authored-by: David Pedersen <david.pdrsn@gmail.com>
2022-01-23 18:01:52 +01:00
Jonas Platte
e0a463b463 Optional extractor extensions (#685)
* Fix inconsistent indentation in axum/Cargo.toml

* Make MatchedPath and OriginalUri extractors and logic for them optional

… they add some runtime cost to handling any request that goes through
a Router, which only makes sense if they actually get used.

Enable both features by default for convenience.
2022-01-23 18:01:52 +01:00
David Pedersen
d97f2aeae6 Make TypedHeaderRejectionReason #[non_exhaustive] (#665)
* Make `TypedHeaderRejectionReason` `#[non_exhaustive]`

Fixes https://github.com/tokio-rs/axum/issues/660

* add changelog pr link
2022-01-23 18:01:52 +01:00
David Pedersen
5d79c638f4 Require Output = () on WebSocketStream::on_upgrade (#646)
Fixes https://github.com/tokio-rs/axum/issues/636
2022-01-23 18:01:52 +01:00
Nick Ashley
9b4232b786 Replace public use of mime crate with &str (#642)
Replaces `Field::content_type`'s return type with `&str`.
This is a breaking change.

Closes #637
2022-01-23 18:01:52 +01:00
David Pedersen
830bfdbe3c
Change TestClient to not follow redirects (#715)
Makes it more obvious what actually goes on
2022-01-21 17:32:12 +01:00
Aaron Erhardt
50f42d8071
Fix path route in extractor docs (#711) 2022-01-18 13:22:54 +00:00
David Pedersen
5fe981a1da
axum: Version 0.4.4 (#706)
- **fixed:** Fix using incorrect path prefix when nesting `Router`s at `/` ([#691])
- **fixed:** Make `nest("", service)` work and mean the same as `nest("/", service)` ([#691])
- **fixed:** Replace response code `301` with `308` for trailing slash redirects. Also deprecates
  `Redirect::found` (`302`) in favor of `Redirect::temporary` (`307`) or `Redirect::to` (`303`).
  This is to prevent clients from changing non-`GET` requests to `GET` requests ([#682])

[#691]: https://github.com/tokio-rs/axum/pull/691
[#682]: https://github.com/tokio-rs/axum/pull/682
2022-01-13 10:37:33 +01:00
Nick Ashley
007a0e85f2
Use 308 instead of 301 for trailing slash redirects (#682)
* Use 308 status instead of 301 when redirecting

For redirects resulting from requests to paths with a trailing slash,
use 308 instead of 301 to prevent non-GET requests (POST, PUT, etc) from
being changed to GET.

For example, (assuming a route for /path is defined)...
  - Old behavior results in:
  POST /path/ -> GET /path

  - New behavior results in:
  POST /path/ -> POST /path

Fixes #681

* Add deprecation notice to found()

Deprecates found() due to its use of HTTP 302

* rustfmt

* Use dedicated redirect method

Use Redirect::permanent instead of re-implementing its functionality

* Remove deprecated method from example

Replace usages of Redirect:found with Redirect::to and Redirect::temporary as appropriate

* Fix panic in oauth example

Previously the example would panic if a request was made without the
`Cookie` header. Now the user is redirected to the login page as
expected.

* Update CHANGELOG

* Revert pub TypedheaderRejection fields

* Fix clippy lint

* cargo fmt

* Fix CHANGELOG link

* Adhere to implicit line length limit
2022-01-12 15:14:06 +01:00
Dr. David A. Kunz
5512ebcd23
chore: Fix typo in middleware.md (#700) 2022-01-11 22:56:33 +00:00
David Pedersen
d181867355
Fix nesting Router at / leading to double slash in the path (#691)
* Fix nesting router at `/`

Fixes https://github.com/tokio-rs/axum/issues/690

* Allow nesting at `""`

* changelog

* remove outdated test
2022-01-06 12:12:24 +01:00
David Pedersen
d6ce99190b
Document extracting OriginalUri directly via request extensions (#688)
* Document extracting `OriginalUri` directly via request extensions

Fixes https://github.com/tokio-rs/axum/issues/684

* fix example

* Update axum/src/extract/request_parts.rs

Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>

Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>
2022-01-06 10:35:11 +00:00
David Pedersen
6d24a8695f
Add SSE tests (#652)
* Add SSE tests

* Simplify keep alive test a bit

* More robust keep-alive tests

* rename a bit
2022-01-03 18:48:50 +01:00
David Pedersen
86331613f4
Add some debug assertions (#686)
* Add some debug assertions

As discussed in Discord its probably worth having debug assertions for
these two cases, should we accidentally break them in the future.

* remove assertion in `OriginalUri`
2022-01-03 15:32:35 +00:00
David Pedersen
8cd9c478fe
Document passing state to handlers via closure captures (#683) 2022-01-03 15:37:40 +01:00
Patrick
e0082a3f87
Fix the link to "Routing to services and backpressure" (#680)
In `Router::route`, the link to the "Routing to services and
backpressure" section on the crate documentation page directed to
<https://docs.rs/#routing-to-services-and-backpressure>. This change
makes it direct to the main crate documentation page.
2021-12-31 22:32:55 +01:00
Nylonicious
8411b78736
Document calling extractors in FromRequest impl (#679)
* Document calling extractors in FromRequest impl

* Fix typo

* Apply suggested changes
2021-12-31 16:16:33 +01:00
David Pedersen
044d35d193 Link to another benchmark 2021-12-29 23:03:01 +01:00
David Pedersen
1020d0144b
Improve middleware examples using auth (#668)
* Make `middleware::from_fn` examples less secure

* Also improve `extractor_middleware` example
2021-12-27 23:34:37 +01:00
David Pedersen
9d62b5c060
Mention middleware::from_fn in axum’s docs (#670)
Fixes https://github.com/tokio-rs/axum/issues/667
2021-12-27 23:30:08 +01:00
Jonas Platte
a3e19465ac
Move header name validity checks to compile time (#661) 2021-12-27 18:25:47 +01:00
Jonas Platte
0a399ed0fa
A few small refactorings (#655)
* Simplify json content-type check

* Import HeaderMap from http instead of from headers

The headers crate is an optional dependency and its HeaderMap re-export
is `#[doc(hidden)]`.

* Use headers re-export in axum in examples
2021-12-27 14:02:38 +01:00
David Pedersen
4c48efc861
axum: Version 0.4.3 (#650) 2021-12-21 15:41:03 +01:00
Jonas Platte
ce6ad399ef
Fix a typo (#635) 2021-12-17 13:15:07 +01:00
Jonas Platte
f7049054bf
Re-export the headers crate when the headers feature is active (#630) 2021-12-15 15:14:03 +01:00
lz1998
dea36db400
Use HttpBody type alias internally (#624)
* use 'crate::body::HttpBody' instead of 'http_body::Body'

* use 'crate::body::Bytes' instead of 'bytes::Bytes'

* rustfmt

* fix warning

* Update axum/src/routing/method_routing.rs

Co-authored-by: David Pedersen <david.pdrsn@gmail.com>

* Update axum/src/routing/method_routing.rs

Co-authored-by: David Pedersen <david.pdrsn@gmail.com>

Co-authored-by: David Pedersen <david.pdrsn@gmail.com>
2021-12-14 12:58:45 +01:00
David Pedersen
c50b55384c
Add ExtensionsAlreadyExtracted to PathRejection (#619)
* Add `ExtensionsAlreadyExtracted` to `PathRejection`

* format imports

* changelog
2021-12-12 23:51:18 +01:00
David Pedersen
ecf3359980
Fix misc warnings from CI (#620) 2021-12-12 17:21:29 +01:00
Kai Jewson
d9bf100216
Don't drop leading spaces in SSE responses (#600)
* Don't drop leading spaces in SSE responses

* Mention leading space fix in changelog

Co-authored-by: David Pedersen <david.pdrsn@gmail.com>
2021-12-12 16:11:15 +00:00
Kai Jewson
980a0a466e
Simplify Websocket implementation (#615)
* Remove `WebSocketUpgradeResponse`

* Move protocol selection to `WebSocketUpgrade::protocols`
2021-12-12 17:05:28 +01:00
Kai Jewson
6feea82d61
Enforce stronger validation of SSE values (#599)
* Enforce stronger validation of SSE values

* Mention `sse::Event` strictness in changelog

Co-authored-by: David Pedersen <david.pdrsn@gmail.com>
2021-12-12 16:03:20 +00:00
Kai Jewson
9344d27cfa
Improve documentation of sse::Event (#601) 2021-12-12 16:56:07 +01:00
Kai Jewson
9ed18d92cf
Use AtomicU32 in RouteId (#616) 2021-12-12 14:19:30 +00:00
Kai Jewson
b7cc3d4645
Clarify that servers shouldn't implement Websocket ping/pong (#617) 2021-12-12 15:08:00 +01:00
Jonas Platte
b1623ce7f2
Add AddExtension::layer (#607) 2021-12-10 22:56:56 +01:00