* Add `on_failed_upgrade` callback to `WebSocket`
Previously if upgrading a connection to a WebSocket connection failed
the background task would panic. There was no way to customize that so
users that might wanna report the error was out of luck.
Panicking also wasn't great because users might abort on panics which
would bring down the server.
* changelog
* Apply suggestions from code review
Co-authored-by: Jonas Platte <[email protected]>
Co-authored-by: Jonas Platte <[email protected]>
Previously
```rust
handler.layer(RequestBodyLimitLayer::new(...)).with_state(...)
```
didn't work because we required the same request body all the way
through.
* Don't allow extracting `MatchedPath` for nested paths
* misc clean up
* Update docs
* changelog
* Apply suggestions from code review
Co-authored-by: Jonas Platte <[email protected]>
* Add test for nested handler service
* change to `debug_assert`
* apply suggestions from review
Co-authored-by: Jonas Platte <[email protected]>
* Change `FailedToDeserializeQueryString` rejection for `Form`
Its now called `FailedToDeserializeForm`.
* changelog
* Make dedicate rejection type for axum-extra's `Form`
* update trybuild test
* Make dedicate rejection type for axum-extra's `Query`
* add example of static-file-seriver using serve dit with handler as service
* update handle return type in example
Co-authored-by: David Pedersen <[email protected]>
* cargo fmt fix
* change error mapping
Co-authored-by: David Pedersen <[email protected]>
* Add example for `Router::inherit_state`
* clarification
* Update axum/src/routing/mod.rs
Co-authored-by: Jonas Platte <[email protected]>
Co-authored-by: Jonas Platte <[email protected]>
* Add RawForm extractor
* Change RawForm(String) to RawForm(Option<String>)
* Fix tests
* Use Bytes instead of Option<String> and add tests
* Add test for empty body
* Update CHANGELOG
* small docs tweaks
* changelog nit
Co-authored-by: David Pedersen <[email protected]>
* add `#[derive(FromRef)]`
* tests
* don't support skipping fields
probably wouldn't work at all since the whole state likely needs `Clone`
* UI tests
* changelog
* changelog link
* revert hello-world example, used for testing
* Re-export `#[derive(FromRef)]`
* Don't need to return `Result`
* use `collect` instead of quoting the iterator
* Mention it in axum's changelog
* Add a dedicated error message for state type inference issues
* Generate valid code even if state type can't be inferred
* Also error on state type inference for debug_handler
* Move RequestExt and RequestPartsExt into axum-core
* Add RequestExt::into_limited_body
… and use it for Bytes extraction.
* Add RequestExt::with_limited_body
… and use it for Multipart extraction.
Co-authored-by: David Pedersen <[email protected]>