* 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
* 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>
- Support checking `FromRequest` bounds for extractors whose request body is something else than
`axum::body::Body`. Use `#[debug_handler(body = YourBodyType)]` to use a different request body
type ([#595])
[#595]: https://github.com/tokio-rs/axum/pull/595
* Provide more error in `Path` deserialization error
* Rename
* Add error kind for deserializing sequences
* Rename
* Fix wrong docs
* Rename `MissingRouteParams`
* Rename error to have more consistency
* Rename internal error
* Update changelog
* One last renaming, for now
* Add tests
* Tweak changelog a bit
* Move `IntoResponse` to axum-core
* Move `FromRequest` to axum-core
* some clean up
* Remove hyper dependency from axum-core
* Fix docs reference
* Use default
* Update changelog
* Remove mention of default type
* extra: Add `Cached` extractor
`Cached` wraps another extractor and caches its result in request
extensions.
* Use newtype to avoid overriding extensions of the same type
* Rename type param
* Fix `#[debug_handler]` for multiple extractors
It generated a function for each extractor to check the type but those
functions didn't have unique names.
Fixed by including all idents in the `arg: Extractor` token tree in the
name of the function generated. Not sure there is a simpler way to fix
it.
* just use a counter
* don't need visit feature anymore
* Make `axum-debug` handle more cases
* Only just trybuild tests on stable
* revert changes to hello-world example
* Remove a bit of duplication
* return error on generics
* address review feedback
* Support associated functions with receiver or returns `Self`
* fix indentation
Discovered while working on something else that we didn't properly
handle this:
```rust
let one = Router::new().route("/", get(|| async {}));
let two = Router::new().route("/", post(|| async {}));
let app = one.merge(two);
```
This introduces two new possible panics when constructing routers:
- If merging two routers that each have a fallback. Previously that left
side fallback would be silently discarded.
- If nesting a router that has a fallback. Previously it would be
silently discarded.
Overall this should make things more explicit and users shouldn't have
to worry "why isn't my fallback" working.
Fixes#488