Files
axum/CHANGELOG.md
T
David Pedersen 8013165908 Move methods from ServiceExt to RoutingDsl (#160)
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(...)`.
2021-08-08 14:30:51 +02:00

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 FromRequest default to being generic over body::Body (#146)
  • Implement std::error::Error for all rejections (#153)
  • Add RoutingDsl::or for combining routes (#108)
  • Add handle_error to service::OnMethod (#160)

Breaking changes

  • Add associated Body and BodyError types to IntoResponse. This is required for returning responses with bodies other than hyper::Body from handlers. See the docs for advice on how to implement IntoResponse (#86)
  • Replace body::BoxStdError with Error, which supports downcasting (#150)
  • Change WebSocket API to use an extractor (#121)
  • Make WebSocket Message an enum (#116)
  • WebSocket now uses Error as its error type (#150)
  • Ensure a HandleError service created from ServiceExt::handle_error does not implement RoutingDsl as that could lead to confusing routing behavior (#120)
  • Fix Uri extractor not being the full URI if using nest (#156)
  • Implement routing::MethodFilter via bitflags
  • Removed extract::UrlParams and extract::UrlParamsMap. Use extract::Path instead
  • EmptyRouter now requires the response body to implement Send + Sync + 'static' (#108)
  • ServiceExt has been removed and its methods have been moved to RoutingDsl (#160)
  • These future types have been moved
    • extract::extractor_middleware::ExtractorMiddlewareResponseFuture moved to extract::extractor_middleware::future::ResponseFuture (#133)
    • routing::BoxRouteFuture moved to routing::future::BoxRouteFuture (#133)
    • routing::EmptyRouterFuture moved to routing::future::EmptyRouterFuture (#133)
    • routing::RouteFuture moved to routing::future::RouteFuture (#133)
    • service::BoxResponseBodyFuture moved to service::future::BoxResponseBodyFuture (#133)
  • The following types no longer implement Copy (#132)
    • EmptyRouter
    • ExtractorMiddleware
    • ExtractorMiddlewareLayer
    • QueryStringMissing
  • RequestParts changes (#153)
    • method new returns an &http::Method
    • method_mut new returns an &mut http::Method
    • take_method has been removed
    • uri new returns an &http::Uri
    • uri_mut new returns an &mut http::Uri
    • take_uri has been removed
  • These rejections have been removed as they're no longer used
    • MethodAlreadyExtracted (#153)
    • UriAlreadyExtracted (#153)
    • VersionAlreadyExtracted (#153)
    • UrlParamsRejection
    • InvalidUrlParam
  • The following services have new response future types:
    • service::OnMethod
    • handler::OnMethod
    • routing::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-lite instead of pin-project (#95)
  • Re-export http crate and hyper::Server (#110)
  • Fix Query and Form extractors giving bad request error when query string is empty. (#117)
  • Add Path extractor. (#124)
  • Fixed the implementation of IntoResponse of (HeaderMap, T) and (StatusCode, HeaderMap, T) would ignore headers from T (#137)
  • Deprecate extract::UrlParams and extract::UrlParamsMap. Use extract::Path instead (#138)

0.1.2 (01. August, 2021)

  • Implement Stream for WebSocket (#52)
  • Implement Sink for WebSocket (#52)
  • Implement Deref most extractors (#56)
  • Return 405 Method Not Allowed for unsupported method for route (#63)
  • Add extractor for remote connection info (#55)
  • Improve error message of MissingExtension rejections (#72)
  • Improve documentation for routing (#71)
  • Clarify required response body type when routing to tower::Services (#69)
  • Add axum::body::box_body to converting an http_body::Body to axum::body::BoxBody (#69)
  • Add axum::sse for 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.