mirror of
https://github.com/tokio-rs/axum.git
synced 2026-08-24 00:00:16 +02:00
Previously, on `main`, this wouldn't compile:
```rust
let app = route("/", get(handler))
.layer(
ServiceBuilder::new()
.timeout(Duration::from_secs(10))
.into_inner(),
)
.handle_error(...)
.route(...); // <-- doesn't work
```
That is because `handle_error` would be
`axum::service::ServiceExt::handle_error` which returns `HandleError<_,
_, _, HandleErrorFromService>` which does _not_ implement `RoutingDsl`.
So you couldn't call `route`. This was caused by
https://github.com/tokio-rs/axum/pull/120.
Basically `handle_error` when called on a `RoutingDsl`, the resulting
service should also implement `RoutingDsl`, but if called on another
random service it should _not_ implement `RoutingDsl`.
I don't think thats possible by having `handle_error` on `ServiceExt`
which is implemented for any service, since all axum routers are also
services by design.
This resolves the issue by removing `ServiceExt` and moving its methods
to `RoutingDsl`. Then we have more tight control over what has a
`handle_error` method.
`service::OnMethod` now also has a `handle_error` so you can still
handle errors from random services, by doing
`service::any(svc).handle_error(...)`.
6.1 KiB
6.1 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
- Make
FromRequestdefault to being generic overbody::Body(#146) - Implement
std::error::Errorfor all rejections (#153) - Add
RoutingDsl::orfor combining routes (#108) - Add
handle_errortoservice::OnMethod(#160)
Breaking changes
- Add associated
BodyandBodyErrortypes toIntoResponse. This is required for returning responses with bodies other thanhyper::Bodyfrom handlers. See the docs for advice on how to implementIntoResponse(#86) - Replace
body::BoxStdErrorwithError, which supports downcasting (#150) - Change WebSocket API to use an extractor (#121)
- Make WebSocket
Messagean enum (#116) WebSocketnow usesErroras its error type (#150)- Ensure a
HandleErrorservice created fromServiceExt::handle_errordoes not implementRoutingDslas that could lead to confusing routing behavior (#120) - Fix
Uriextractor not being the full URI if usingnest(#156) - Implement
routing::MethodFilterviabitflags - Removed
extract::UrlParamsandextract::UrlParamsMap. Useextract::Pathinstead EmptyRouternow requires the response body to implementSend + Sync + 'static'(#108)ServiceExthas been removed and its methods have been moved toRoutingDsl(#160)- These future types have been moved
extract::extractor_middleware::ExtractorMiddlewareResponseFuturemoved toextract::extractor_middleware::future::ResponseFuture(#133)routing::BoxRouteFuturemoved torouting::future::BoxRouteFuture(#133)routing::EmptyRouterFuturemoved torouting::future::EmptyRouterFuture(#133)routing::RouteFuturemoved torouting::future::RouteFuture(#133)service::BoxResponseBodyFuturemoved toservice::future::BoxResponseBodyFuture(#133)
- The following types no longer implement
Copy(#132)EmptyRouterExtractorMiddlewareExtractorMiddlewareLayerQueryStringMissing
RequestPartschanges (#153)methodnew returns an&http::Methodmethod_mutnew returns an&mut http::Methodtake_methodhas been removedurinew returns an&http::Uriuri_mutnew returns an&mut http::Uritake_urihas been removed
- These rejections have been removed as they're no longer used
- The following services have new response future types:
service::OnMethodhandler::OnMethodrouting::Nested
0.1.3 (06. August, 2021)
- Fix stripping prefix when nesting services at
/(#91) - Add support for WebSocket protocol negotiation (#83)
- Use
pin-project-liteinstead ofpin-project(#95) - Re-export
httpcrate andhyper::Server(#110) - Fix
QueryandFormextractors giving bad request error when query string is empty. (#117) - Add
Pathextractor. (#124) - Fixed the implementation of
IntoResponseof(HeaderMap, T)and(StatusCode, HeaderMap, T)would ignore headers fromT(#137) - Deprecate
extract::UrlParamsandextract::UrlParamsMap. Useextract::Pathinstead (#138)
0.1.2 (01. August, 2021)
- Implement
StreamforWebSocket(#52) - Implement
SinkforWebSocket(#52) - Implement
Derefmost extractors (#56) - Return
405 Method Not Allowedfor unsupported method for route (#63) - Add extractor for remote connection info (#55)
- Improve error message of
MissingExtensionrejections (#72) - Improve documentation for routing (#71)
- Clarify required response body type when routing to
tower::Services (#69) - Add
axum::body::box_bodyto converting anhttp_body::Bodytoaxum::body::BoxBody(#69) - Add
axum::ssefor Server-Sent Events (#75) - Mention required dependencies in docs (#77)
- Fix WebSockets failing on Firefox (#76)
0.1.1 (30. July, 2021)
- Misc readme fixes.
0.1.0 (30. July, 2021)
- Initial release.