* initial working impl
* support `#[from_request(via(...))]`
* support extracting the whole thing at once
* rely on type inference
* fix footgun
* fix typo
* generate rejection enums
* move tests to trybuild
* minor clean up
* docs
* Support multiple generic extractors with same "via" type
* support `Result` as well
* Update axum-macros/src/from_request.rs
Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>
* Add `#[automatically_derived]`
* remove needless `#[derive(Debug)]` on macro types
* Fix error messages that different for some reason
* Update axum-macros/src/lib.rs
Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>
* add more `#[automatically_derived]`
* support same types in tuple structs
* update docs
* prep axum-macros for release
* address review feedback
* Update axum-macros/src/lib.rs
Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>
* Update axum-macros/src/lib.rs
Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>
* Update known limitation
Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>
* 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
* 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>
* 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
* 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.
- **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
* 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
* 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`
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.
* 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
* Add `middleware::from_fn` for creating middleware from async fns
* More trait impls for `Next`
* Make `Next::run` consume `self`
* Use `.router_layer` in example, since middleware returns early
* Actually `Next` probably shouldn't impl `Clone` and `Service`
Has implications for backpressure and stuff
* Simplify `print-request-response` example
* Address review feedback
* add changelog link