Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(deps): update rust crate axum to 0.7.0 #2

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Jan 16, 2022

This PR contains the following updates:

Package Type Update Change
axum dependencies minor 0.4.3 -> 0.7.0

Release Notes

tokio-rs/axum (axum)

v0.7.7: axum v0.7.7

Compare Source

  • change: Remove manual tables of content from the documentation, since
    rustdoc now generates tables of content in the sidebar (#​2921)

v0.7.6: axum - v0.7.6

Compare Source

  • change: Avoid cloning Arc during deserialization of Path
  • added: axum::serve::Serve::tcp_nodelay and axum::serve::WithGracefulShutdown::tcp_nodelay (#​2653)
  • added: Router::has_routes function (#​2790)
  • change: Update tokio-tungstenite to 0.23 (#​2841)
  • added: Serve::local_addr and WithGracefulShutdown::local_addr functions (#​2881)

v0.7.5: axum - v0.7.5

Compare Source

  • fixed: Fixed layers being cloned when calling axum::serve directly with
    a Router or MethodRouter (#​2586)
  • fixed: h2 is no longer pulled as a dependency unless the http2 feature
    is enabled (#​2605)

v0.7.4: axum - v0.7.4

Compare Source

  • fixed: Fix performance regression present since axum 0.7.0 (#​2483)
  • fixed: Improve debug_handler on tuple response types (#​2201)
  • added: Add must_use attribute to Serve and WithGracefulShutdown (#​2484)
  • added: Re-export axum_core::body::BodyDataStream from axum

v0.7.3: axum - v0.7.3

Compare Source

  • added: Body implements From<()> now (#​2411)
  • change: Update version of multer used internally for multipart (#​2433)
  • change: Update tokio-tungstenite to 0.21 (#​2435)
  • added: Enable tracing feature by default (#​2460)
  • added: Support graceful shutdown on serve (#​2398)
  • added: RouterIntoService implements Clone (#​2456)

v0.7.2: axum - v0.7.2

Compare Source

  • added: Add axum::body::to_bytes (#​2373)
  • fixed: Gracefully handle accept errors in serve (#​2400)

v0.7.1: axum - v0.7.1

Compare Source

  • fix: Fix readme.

v0.7.0: axum - v0.7.0

Compare Source

  • breaking: Update public dependencies. axum now requires
  • breaking: axum now requires tower-http 0.5
  • breaking: Remove deprecated WebSocketUpgrade::max_send_queue
  • breaking: The following types/traits are no longer generic over the request body
    (i.e. the B type param has been removed) (#​1751 and #​1789):
    • FromRequestParts
    • FromRequest
    • HandlerService
    • HandlerWithoutStateExt
    • Handler
    • LayeredFuture
    • Layered
    • MethodRouter
    • Next
    • RequestExt
    • RouteFuture
    • Route
    • Router
  • breaking: axum no longer re-exports hyper::Body as that type is removed
    in hyper 1.0. Instead axum has its own body type at axum::body::Body (#​1751)
  • breaking: extract::BodyStream has been removed as body::Body
    implements Stream and FromRequest directly (#​1751)
  • breaking: Change sse::Event::json_data to use axum_core::Error as its error type (#​1762)
  • breaking: Rename DefaultOnFailedUpdgrade to DefaultOnFailedUpgrade (#​1664)
  • breaking: Rename OnFailedUpdgrade to OnFailedUpgrade (#​1664)
  • breaking: TypedHeader has been move to axum-extra (#​1850)
  • breaking: Removed re-exports of Empty and Full. Use
    axum::body::Body::empty and axum::body::Body::from respectively (#​1789)
  • breaking: The response returned by IntoResponse::into_response must use
    axum::body::Body as the body type. axum::response::Response does this
    (#​1789)
  • breaking: Removed the BoxBody type alias and its box_body
    constructor. Use axum::body::Body::new instead (#​1789)
  • breaking: Remove RawBody extractor. axum::body::Body implements FromRequest directly (#​1789)
  • breaking: The following types from http-body no longer implement IntoResponse:
    • Full, use Body::from instead
    • Empty, use Body::empty instead
    • BoxBody, use Body::new instead
    • UnsyncBoxBody, use Body::new instead
    • MapData, use Body::new instead
    • MapErr, use Body::new instead
  • added: Add axum::extract::Request type alias where the body is axum::body::Body (#​1789)
  • added: Add Router::as_service and Router::into_service to workaround
    type inference issues when calling ServiceExt methods on a Router (#​1835)
  • breaking: Removed axum::Server as it was removed in hyper 1.0. Instead
    use axum::serve(listener, service) or hyper/hyper-util for more configuration options (#​1868)
  • breaking: Only inherit fallbacks for routers nested with Router::nest.
    Routers nested with Router::nest_service will no longer inherit fallbacks (#​1956)
  • fixed: Don't remove the Sec-WebSocket-Key header in WebSocketUpgrade (#​1972)
  • added: Add axum::extract::Query::try_from_uri (#​2058)
  • added: Implement IntoResponse for Box<str> and Box<[u8]> ([#​2035])
  • breaking: Simplify MethodFilter. It no longer uses bitflags (#​2073)
  • fixed: Fix bugs around merging routers with nested fallbacks (#​2096)
  • fixed: Fix .source() of composite rejections (#​2030)
  • fixed: Allow unreachable code in #[debug_handler] (#​2014)
  • change: axum's MSRV is now 1.66 (#​1882)
  • added: Implement IntoResponse for (R,) where R: IntoResponse (#​2143)
  • changed: For SSE, add space between field and value for compatibility (#​2149)
  • added: Add NestedPath extractor (#​1924)
  • added: Add handle_error function to existing ServiceExt trait (#​2235)
  • breaking: impl<T> IntoResponse(Parts) for Extension<T> now requires
    T: Clone, as that is required by the http crate (#​1882)
  • added: Add axum::Json::from_bytes (#​2244)
  • added: Implement FromRequestParts for http::request::Parts (#​2328)
  • added: Implement FromRequestParts for http::Extensions (#​2328)
  • fixed: Clearly document applying DefaultBodyLimit to individual routes (#​2157)

v0.6.20: axum - v0.6.20

Compare Source

  • added: WebSocketUpgrade::write_buffer_size and WebSocketUpgrade::max_write_buffer_size
  • changed: Deprecate WebSocketUpgrade::max_send_queue
  • change: Update tokio-tungstenite to 0.20
  • added: Implement Handler for T: IntoResponse (#​2140)

v0.6.19: axum - v0.6.19

Compare Source

  • added: Add axum::extract::Query::try_from_uri (#​2058)
  • added: Implement IntoResponse for Box<str> and Box<[u8]> (#​2035)
  • fixed: Fix bugs around merging routers with nested fallbacks (#​2096)
  • fixed: Fix .source() of composite rejections (#​2030)
  • fixed: Allow unreachable code in #[debug_handler] (#​2014)
  • change: Update tokio-tungstenite to 0.19 (#​2021)
  • change: axum's MSRV is now 1.63 (#​2021)

v0.6.18: axum - v0.6.18

Compare Source

  • fixed: Don't remove the Sec-WebSocket-Key header in WebSocketUpgrade (#​1972)

v0.6.17: axum - v0.6.17

Compare Source

  • fixed: Fix fallbacks causing a panic on CONNECT requests (#​1958)

v0.6.16: axum - v0.6.16

Compare Source

  • fixed: Don't allow extracting MatchedPath in fallbacks (#​1934)
  • fixed: Fix panic if Router with something nested at / was used as a fallback (#​1934)
  • added: Document that Router::new().fallback(...) isn't optimal (#​1940)

v0.6.15: axum - v0.6.15

Compare Source

  • fixed: Removed additional leftover debug messages (#​1927)

v0.6.14: axum - v0.6.14

Compare Source

  • fixed: Removed leftover "path_router hit" debug message (#​1925)

v0.6.13: axum - v0.6.13

Compare Source

  • added: Log rejections from built-in extractors with the
    axum::rejection=trace target (#​1890)
  • fixed: Fixed performance regression with Router::nest introduced in
    0.6.0. nest now flattens the routes which performs better (#​1711)
  • fixed: Extracting MatchedPath in nested handlers now gives the full
    matched path, including the nested path (#​1711)
  • added: Implement Deref and DerefMut for built-in extractors (#​1922)

v0.6.12: axum - v0.6.12

Compare Source

  • added: Implement IntoResponse for MultipartError (#​1861)
  • fixed: More clearly document what wildcards matches (#​1873)

v0.6.11: axum - v0.6.11

Compare Source

  • fixed: Don't require S: Debug for impl Debug for Router<S> (#​1836)
  • fixed: Clone state a bit less when handling requests (#​1837)
  • fixed: Unpin itoa dependency (#​1815)

v0.6.10: axum - v0.6.10

Compare Source

  • fixed: Add #[must_use] attributes to types that do nothing unless used (#​1809)
  • fixed: Gracefully handle missing headers in the TypedHeader extractor (#​1810)
  • fixed: Fix routing issues when loading a Router via a dynamic library (#​1806)

v0.6.9: axum - v0.6.9

Compare Source

  • changed: Update to tower-http 0.4. axum is still compatible with tower-http 0.3 (#​1783)

v0.6.8: axum - v0.6.8

Compare Source

  • fixed: Fix Allow missing from routers with middleware (#​1773)
  • added: Add KeepAlive::event for customizing the event sent for SSE keep alive (#​1729)

v0.6.7: axum - v0.6.7

Compare Source

  • added: Add FormRejection::FailedToDeserializeFormBody which is returned
    if the request body couldn't be deserialized into the target type, as opposed
    to FailedToDeserializeForm which is only for query parameters (#​1683)
  • added: Add MockConnectInfo for setting ConnectInfo during tests (#​1767)

v0.6.6: axum - v0.6.6

Compare Source

  • fixed: Enable passing MethodRouter to Router::fallback (#​1730)

v0.6.5: axum - v0.6.5

Compare Source

  • fixed: Fix #[debug_handler] sometimes giving wrong borrow related suggestions (#​1710)
  • Document gotchas related to using impl IntoResponse as the return type from handler functions (#​1736)

v0.6.4: axum - v0.6.4

Compare Source

  • Depend on axum-macros 0.3.2

v0.6.3: axum - v0.6.3

Compare Source

  • added: Implement IntoResponse for &'static [u8; N] and [u8; N] (#​1690)
  • fixed: Make Path support types using serde::Deserializer::deserialize_any (#​1693)
  • added: Add RawPathParams (#​1713)
  • added: Implement Clone and Service for axum::middleware::Next (#​1712)
  • fixed: Document required tokio features to run "Hello, World!" example (#​1715)

v0.6.2: axum - v0.6.2

Compare Source

  • added: Add body_text and status methods to built-in rejections (#​1612)
  • added: Enable the runtime feature of hyper when using tokio (#​1671)

v0.6.1: axum - v0.6.1

Compare Source

  • added: Expand the docs for Router::with_state (#​1580)

v0.6.0: axum - v0.6.0

Compare Source

Routing

  • fixed: Nested routers are now allowed to have fallbacks (#​1521):

    let api_router = Router::new()
        .route("/users", get(|| { ... }))
        .fallback(api_fallback);
    
    let app = Router::new()
        // this would panic in 0.5 but in 0.6 it just works
        //
        // requests starting with `/api` but not handled by `api_router`
        // will go to `/api_fallback`
        .nest("/api", api_router);

    The outer router's fallback will still apply if a nested router doesn't have
    its own fallback:

    // this time without a fallback
    let api_router = Router::new().route("/users", get(|| { ... }));
    
    let app = Router::new()
        .nest("/api", api_router)
        // `api_fallback` will inherit this fallback
        .fallback(app_fallback);
  • breaking: The request /foo/ no longer matches /foo/*rest. If you want
    to match /foo/ you have to add a route specifically for that (#​1086)

    For example:

    use axum::{Router, routing::get, extract::Path};
    
    let app = Router::new()
        // this will match `/foo/bar/baz`
        .route("/foo/*rest", get(handler))
        // this will match `/foo/`
        .route("/foo/", get(handler))
        // if you want `/foo` to match you must also add an explicit route for it
        .route("/foo", get(handler));
    
    async fn handler(
        // use an `Option` because `/foo/` and `/foo` don't have any path params
        params: Option<Path<String>>,
    ) {}
  • breaking: Path params for wildcard routes no longer include the prefix
    /. e.g. /foo.js will match /*filepath with a value of foo.js, not
    /foo.js (#​1086)

    For example:

    use axum::{Router, routing::get, extract::Path};
    
    let app = Router::new().route("/foo/*rest", get(handler));
    
    async fn handler(
        Path(params): Path<String>,
    ) {
        // for the request `/foo/bar/baz` the value of `params` will be `bar/baz`
        //
        // on 0.5 it would be `/bar/baz`
    }
  • fixed: Routes like /foo and /*rest are no longer considered
    overlapping. /foo will take priority (#​1086)

    For example:

    use axum::{Router, routing::get};
    
    let app = Router::new()
        // this used to not be allowed but now just works
        .route("/foo/*rest", get(foo))
        .route("/foo/bar", get(bar));
    
    async fn foo() {}
    
    async fn bar() {}
  • breaking: Automatic trailing slash redirects have been removed.
    Previously if you added a route for /foo, axum would redirect calls to
    /foo/ to /foo (or vice versa for /foo/):

    use axum::{Router, routing::get};
    
    let app = Router::new()
        // a request to `GET /foo/` will now get `404 Not Found`
        // whereas in 0.5 axum would redirect to `/foo`
        //
        // same goes the other way if you had the route `/foo/`
        // axum will no longer redirect from `/foo` to `/foo/`
        .route("/foo", get(handler));
    
    async fn handler() {}

    Either explicitly add routes for /foo and /foo/ or use
    axum_extra::routing::RouterExt::route_with_tsr if you want the old behavior
    (#​1119)

  • breaking: Router::fallback now only accepts Handlers (similarly to
    what get, post, etc. accept). Use the new Router::fallback_service for
    setting any Service as the fallback (#​1155)

    This fallback on 0.5:

    use axum::{Router, handler::Handler};
    
    let app = Router::new().fallback(fallback.into_service());
    
    async fn fallback() {}

    Becomes this in 0.6

    use axum::Router;
    
    let app = Router::new().fallback(fallback);
    
    async fn fallback() {}
  • changed: Router::nest now only accepts Routers, the general-purpose
    Service nesting method has been renamed to nest_service (#​1368)

  • breaking: Allow Error: Into<Infallible> for Route::{layer, route_layer} (#​924)

  • breaking: MethodRouter now panics on overlapping routes (#​1102)

  • breaking: Router::route now only accepts MethodRouters created with
    get, post, etc. Use the new Router::route_service for routing to
    any Services (#​1155)

  • breaking: Adding a .route_layer onto a Router or MethodRouter
    without any routes will now result in a panic. Previously, this just did
    nothing. #​1327

  • breaking: RouterService has been removed since Router now implements
    Service when the state is (). Use Router::with_state to provide the
    state and get a Router<()>. Note that RouterService only existed in the
    pre-releases, not 0.5 (#​1552)

Extractors

  • added: Added new type safe State extractor. This can be used with
    Router::with_state and gives compile errors for missing states, whereas
    Extension would result in runtime errors (#​1155)

    We recommend migrating from Extension to State for sharing application state since that is more type
    safe and faster. That is done by using Router::with_state and State.

    This setup in 0.5

    use axum::{routing::get, Extension, Router};
    
    let app = Router::new()
        .route("/", get(handler))
        .layer(Extension(AppState {}));
    
    async fn handler(Extension(app_state): Extension<AppState>) {}
    
    #[derive(Clone)]
    struct AppState {}

    Becomes this in 0.6 using State:

    use axum::{routing::get, extract::State, Router};
    
    let app = Router::new()
        .route("/", get(handler))
        .with_state(AppState {});
    
    async fn handler(State(app_state): State<AppState>) {}
    
    #[derive(Clone)]
    struct AppState {}

    If you have multiple extensions, you can use fields on AppState and implement
    FromRef:

    use axum::{extract::{State, FromRef}, routing::get, Router};
    
    let state = AppState {
        client: HttpClient {},
        database: Database {},
    };
    
    let app = Router::new().route("/", get(handler)).with_state(state);
    
    async fn handler(
        State(client): State<HttpClient>,
        State(database): State<Database>,
    ) {}
    
    // the derive requires enabling the "macros" feature
    #[derive(Clone, FromRef)]
    struct AppState {
        client: HttpClient,
        database: Database,
    }
    
    #[derive(Clone)]
    struct HttpClient {}
    
    #[derive(Clone)]
    struct Database {}
  • breaking: It is now only possible for one extractor per handler to consume
    the request body. In 0.5 doing so would result in runtime errors but in 0.6 it
    is a compile error (#​1272)

    axum enforces this by only allowing the last extractor to consume the
    request.

    For example:

    use axum::{Json, http::HeaderMap};
    
    // This wont compile on 0.6 because both `Json` and `String` need to consume
    // the request body. You can use either `Json` or `String`, but not both.
    async fn handler_1(
        json: Json<serde_json::Value>,
        string: String,
    ) {}
    
    // This won't work either since `Json` is not the last extractor.
    async fn handler_2(
        json: Json<serde_json::Value>,
        headers: HeaderMap,
    ) {}
    
    // This works!
    async fn handler_3(
        headers: HeaderMap,
        json: Json<serde_json::Value>,
    ) {}

    This is done by reworking the FromRequest trait and introducing a new
    FromRequestParts trait.

    If your extractor needs to consume the request body then you should implement
    FromRequest, otherwise implement FromRequestParts.

    This extractor in 0.5:

    struct MyExtractor { /* ... */ }
    
    #[async_trait]
    impl<B> FromRequest<B> for MyExtractor
    where
        B: Send,
    {
        type Rejection = StatusCode;
    
        async fn from_request(req: &mut RequestParts<B>) -> Result<Self, Self::Rejection> {
            // ...
        }
    }

    Becomes this in 0.6:

    use axum::{
        extract::{FromRequest, FromRequestParts},
        http::{StatusCode, Request, request::Parts},
        async_trait,
    };
    
    struct MyExtractor { /* ... */ }
    
    // implement `FromRequestParts` if you don't need to consume the request body
    #[async_trait]
    impl<S> FromRequestParts<S> for MyExtractor
    where
        S: Send + Sync,
    {
        type Rejection = StatusCode;
    
        async fn from_request_parts(parts: &mut Parts, state: &S) -> Result<Self, Self::Rejection> {
            // ...
        }
    }
    
    // implement `FromRequest` if you do need to consume the request body
    #[async_trait]
    impl<S, B> FromRequest<S, B> for MyExtractor
    where
        S: Send + Sync,
        B: Send + 'static,
    {
        type Rejection = StatusCode;
    
        async fn from_request(req: Request<B>, state: &S) -> Result<Self, Self::Rejection> {
            // ...
        }
    }

    For an example of how to write an extractor that accepts different
    Content-Types see the [parse-body-based-on-content-type][parse-body-based-on-content-type] example.

  • added: FromRequest and FromRequestParts derive macro re-exports from
    axum-macros behind the macros feature (#​1352)

  • added: Add RequestExt and RequestPartsExt which adds convenience
    methods for running extractors to http::Request and http::request::Parts (#​1301)

  • added: JsonRejection now displays the path at which a deserialization
    error occurred (#​1371)

  • added: Add extract::RawForm for accessing raw urlencoded query bytes or request body (#​1487)

  • fixed: Used 400 Bad Request for FailedToDeserializeQueryString
    rejections, instead of 422 Unprocessable Entity (#​1387)

  • changed: The inner error of a JsonRejection is now
    serde_path_to_error::Error<serde_json::Error>. Previously it was
    serde_json::Error (#​1371)

  • changed: The default body limit now applies to the Multipart extractor (#​1420)

  • breaking: ContentLengthLimit has been removed. Use DefaultBodyLimit instead (#​1400)

  • breaking: RequestParts has been removed as part of the FromRequest
    rework (#​1272)

  • breaking: BodyAlreadyExtracted has been removed (#​1272)

  • breaking: The following types or traits have a new S type param
    which represents the state (#​1155):

    • Router, defaults to ()
    • MethodRouter, defaults to ()
    • FromRequest, no default
    • Handler, no default
  • breaking: MatchedPath can now no longer be extracted in middleware for
    nested routes. In previous versions it returned invalid data when extracted
    from a middleware applied to a nested router. MatchedPath can still be
    extracted from handlers and middleware that aren't on nested routers (#​1462)

  • breaking: Rename FormRejection::FailedToDeserializeQueryString to
    FormRejection::FailedToDeserializeForm (#​1496)

Middleware

  • added: Support running extractors on middleware::from_fn functions (#​1088)
  • added: Add middleware::from_fn_with_state to enable running extractors that require
    state (#​1342)
  • added: Add middleware::from_extractor_with_state (#​1396)
  • added: Add map_request, map_request_with_state for transforming the
    request with an async function (#​1408)
  • added: Add map_response, map_response_with_state for transforming the
    response with an async function (#​1414)
  • added: Support any middleware response that implements IntoResponse (#​1152)
  • breaking: Remove extractor_middleware which was previously deprecated.
    Use axum::middleware::from_extractor instead (#​1077)
  • breaking: Require middleware added with Handler::layer to have
    Infallible as the error type (#​1152)

Misc

  • added: Support compiling to WASM. See the simple-router-wasm example
    for more details (#​1382)
  • added: Add ServiceExt with methods for turning any Service into a
    MakeService similarly to Router::into_make_service (#​1302)
  • added: String and binary From impls have been added to extract::ws::Message
    to be more inline with tungstenite (#​1421)
  • added: Add #[derive(axum::extract::FromRef)] (#​1430)
  • added: Add accept_unmasked_frames setting in WebSocketUpgrade (#​1529)
  • added: Add WebSocketUpgrade::on_failed_upgrade to customize what to do
    when upgrading a connection fails (#​1539)
  • fixed: Annotate panicking functions with #[track_caller] so the error
    message points to where the user added the invalid route, rather than
    somewhere internally in axum (#​1248)
  • changed: axum's MSRV is now 1.60 (#​1239)
  • changed: For methods that accept some S: Service, the bounds have been
    relaxed so the response type must implement IntoResponse rather than being a
    literal Response
  • breaking: New tokio default feature needed for WASM support. If you
    don't need WASM support but have default_features = false for other reasons
    you likely need to re-enable the tokio feature (#​1382)
  • breaking: handler::{WithState, IntoService} are merged into one type,
    named HandlerService (#​1418)

v0.5.17: axum - v0.5.17

Compare Source

  • fixed: Annotate panicking functions with #[track_caller] so the error
    message points to where the user added the invalid router, rather than
    somewhere internally in axum (#​1248)
  • fixed: Make Multipart extractor work with RequestBodyLimit middleware (#​1379)
  • added: Add DefaultBodyLimit::max for changing the default body limit (#​1397)
  • added: Various documentation improvements

v0.5.16: axum - v0.5.16

Compare Source

Security

  • breaking: Added default limit to how much data Bytes::from_request will
    consume. Previously it would attempt to consume the entire request body
    without checking its length. This meant if a malicious peer sent an large (or
    infinite) request body your server might run out of memory and crash.

    The default limit is at 2 MB and can be disabled by adding the new
    DefaultBodyLimit::disable() middleware. See its documentation for more
    details.

    This also applies to these extractors which used Bytes::from_request
    internally:

    • Form
    • Json
    • String

    Thanks to Shachar Menashe for reporting this vulnerability.

    (#​1346)

v0.5.15: axum - v0.5.15

Compare Source

Note: This is a re-release of 0.5.14 that fixes an accidental breaking change.

  • fixed: Don't expose internal type names in QueryRejection response. (#​1171)
  • fixed: Improve performance of JSON serialization (#​1178)
  • fixed: Improve build times by generating less IR (#​1192)

v0.5.14: axum - v0.5.14

Compare Source

Yanked, as it contained an accidental breaking change.

v0.5.13: axum - v0.5.13

Compare Source

  • fixed: If WebSocketUpgrade cannot upgrade the connection it will return a
    WebSocketUpgradeRejection::ConnectionNotUpgradable rejection (#​1135)
  • changed: WebSocketUpgradeRejection has a new variant ConnectionNotUpgradable
    variant (#​1135)

v0.5.12: axum - v0.5.12

Compare Source

  • added: Added debug_handler which is an attribute macro that improves
    type errors when applied to handler function. It is re-exported from
    axum-macros (#​1144)

v0.5.11: axum - v0.5.11

Compare Source

  • added: Implement TryFrom<http:: Method> for MethodFilter and use new
    NoMatchingMethodFilter error in case of failure (#​1130)
  • added: Document how to run extractors from middleware (#​1140)

v0.5.10: axum - v0.5.10

Compare Source

  • fixed: Make Router cheaper to clone (#​1123)
  • fixed: Fix possible panic when doing trailing slash redirect (#​1124)

v0.5.9: axum - v0.5.9

Compare Source

  • fixed: Fix compile error when the headers is enabled and the form
    feature is disabled (#​1107)

v0.5.8: axum - v0.5.8

Compare Source

  • added: Support resolving host name via Forwarded header in Host
    extractor (#​1078)
  • added: Implement IntoResponse for Form (#​1095)
  • change: axum's MSRV is now 1.56 (#​1098)

v0.5.7: axum - v0.5.7

Compare Source

  • added: Implement Default for Extension (#​1043)
  • fixed: Support deserializing Vec<(String, String)> in extract::Path<_> to get vector of
    key/value pairs (#​1059)
  • added: Add extract::ws::close_code which contains constants for close codes (#​1067)
  • fixed: Use impl IntoResponse less in docs (#​1049)

v0.5.6: axum - v0.5.6

Compare Source

  • added: Add WebSocket::protocol to return the selected WebSocket subprotocol, if there is one. (#​1022)
  • fixed: Improve error message for PathRejection::WrongNumberOfParameters to hint at using
    Path<(String, String)> or Path<SomeStruct> (#​1023)
  • fixed: PathRejection::WrongNumberOfParameters now uses 500 Internal Server Error since
    it's a programmer error and not a client error (#​1023)
  • fixed: Fix InvalidFormContentType mentioning the wrong content type

v0.5.5: axum - v0.5.5

Compare Source

  • fixed: Correctly handle GET, HEAD, and OPTIONS requests in ContentLengthLimit.
    Request with these methods are now accepted if they do not have a Content-Length header, and
    the request body will not be checked. If they do have a Content-Length header they'll be
    rejected. This allows ContentLengthLimit to be used as middleware around several routes,
    including GET routes (#​989)
  • added: Add MethodRouter::{into_make_service, into_make_service_with_connect_info} (#​1010)

v0.5.4: axum - v0.5.4

Compare Source

  • added: Add response::ErrorResponse and response::Result for
    IntoResponse-based error handling (#​921)
  • added: Add middleware::from_extractor and deprecate extract::extractor_middleware (#​957)
  • changed: Update to tower-http 0.3 (#​965)

v0.5.3: axum - v0.5.3

Compare Source

  • added: Add AppendHeaders for appending headers to a response rather than overriding them (#​927)
  • added: Add axum::extract::multipart::Field::chunk method for streaming a single chunk from
    the field (#​901)
  • fixed: Fix trailing slash redirection with query parameters (#​936)

v0.5.2: axum - v0.5.2

Compare Source

Yanked, as it contained an accidental breaking change.

v0.5.1: axum - v0.5.1

Compare Source

  • added: Add RequestParts::extract which allows applying an extractor as a method call ([#​897)

v0.5.0: axum - v0.5.0

Compare Source

  • added: Document sharing state between handler and middleware (#​783)

  • added: Extension<_> can now be used in tuples for building responses, and will set an
    extension on the response (#​797)

  • added: extract::Host for extracting the hostname of a request (#​827)

  • added: Add IntoResponseParts trait which allows defining custom response
    types for adding headers or extensions to responses (#​797)

  • added: TypedHeader implements the new IntoResponseParts trait so they
    can be returned from handlers as parts of a response (#​797)

  • changed: Router::merge now accepts Into<Router> (#​819)

  • breaking: sse::Event now accepts types implementing AsRef<str> instead of Into<String>
    as field values.

  • breaking: sse::Event now panics if a setter method is called twice instead of silently
    overwriting old values.

  • breaking: Require Output = () on WebSocketStream::on_upgrade (#​644)

  • breaking: Make TypedHeaderRejectionReason #[non_exhaustive] (#​665)

  • breaking: Using HeaderMap as an extractor will no longer remove the headers and thus
    they'll still be accessible to other extractors, such as axum::extract::Json. Instead
    HeaderMap will clone the headers. You should prefer to use TypedHeader to extract only the
    headers you need (#​698)

    This includes these breaking changes:

    • RequestParts::take_headers has been removed.
    • RequestParts::headers returns &HeaderMap.
    • RequestParts::headers_mut returns &mut HeaderMap.
    • HeadersAlreadyExtracted has been removed.
    • The HeadersAlreadyExtracted variant has been removed from these rejections:
      • RequestAlreadyExtracted
      • RequestPartsAlreadyExtracted
      • JsonRejection
      • FormRejection
      • ContentLengthLimitRejection
      • WebSocketUpgradeRejection
    • <HeaderMap as FromRequest<_>>::Rejection has been changed to std::convert::Infallible.
  • breaking: axum::http::Extensions is no longer an extractor (ie it
    doesn't implement FromRequest). The axum::extract::Extension extractor is
    not impacted by this and works the same. This change makes it harder to
    accidentally remove all extensions which would result in confusing errors
    elsewhere (#​699)
    This includes these breaking changes:

    • RequestParts::take_extensions has been removed.
    • RequestParts::extensions returns &Extensions.
    • RequestParts::extensions_mut returns &mut Extensions.
    • RequestAlreadyExtracted has been removed.
    • <Request as FromRequest>::Rejection is now BodyAlreadyExtracted.
    • <http::request::Parts as FromRequest>::Rejection is now Infallible.
    • ExtensionsAlreadyExtracted has been removed.
    • The ExtensionsAlreadyExtracted removed variant has been removed from these rejections:
      • ExtensionRejection
      • PathRejection
      • MatchedPathRejection
      • WebSocketUpgradeRejection
  • breaking: Redirect::found has been removed (#​800)

  • breaking: AddExtensionLayer has been removed. Use Extension instead. It now implements
    tower::Layer (#​807)

  • breaking: AddExtension has been moved from the root module to middleware

  • breaking: .nest("/foo/", Router::new().route("/bar", _)) now does the right thing and
    results in a route at /foo/bar instead of /foo//bar (#​824)

  • breaking: Routes are now required to start with /. Previously routes such as :foo would
    be accepted but most likely result in bugs (#​823)

  • breaking: Headers has been removed. Arrays of tuples directly implement
    IntoResponseParts so ([("x-foo", "foo")], response) now works (#​797)

  • breaking: InvalidJsonBody has been replaced with JsonDataError to clearly signal that the
    request body was syntactically valid JSON but couldn't be deserialized into the target type

  • breaking: Handler is no longer an #[async_trait] but instead has an
    associated Future type. That allows users to build their own Handler types
    without paying the cost of #[async_trait] (#​879)

  • changed: New JsonSyntaxError variant added to JsonRejection. This is returned when the
    request body contains syntactically invalid JSON

  • fixed: Correctly set the Content-Length header for response to HEAD
    requests (#​734)

  • fixed: Fix wrong content-length for HEAD requests to endpoints that returns chunked
    responses (#​755)

  • fixed: Fixed several routing bugs related to nested "opaque" tower services (i.e.
    non-Router services) (#​841 and #​842)

  • changed: Update to tokio-tungstenite 0.17 (#​791)

  • breaking: Redirect::{to, temporary, permanent} now accept &str instead
    of Uri (#​889)

  • breaking: Remove second type parameter from Router::into_make_service_with_connect_info
    and Handler::into_make_service_with_connect_info to support MakeServices
    that accept multiple targets (#​892)

v0.4.8

Compare Source

v0.4.7: axum - v0.4.7

Compare Source

  • added: Implement tower::Layer for Extension (#​801)
  • changed: Deprecate AddExtensionLayer. Use Extension instead (#​805)

v0.4.6: axum - v0.4.6

Compare Source

  • added: middleware::from_fn for creating middleware from async functions.
    This previously lived in axum-extra but has been moved to axum (#​719)
  • fixed: Set Allow header when responding with 405 Method Not Allowed (#​733)

v0.4.5: v0.4.5

Compare Source

v0.4.4: v0.4.4

Compare Source

  • fixed: Fix using incorrect path prefix when nesting Routers 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)

Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.4.4 fix(deps): update rust crate axum to 0.4.5 Jan 31, 2022
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.4.5 fix(deps): update rust crate axum to 0.4.6 Feb 22, 2022
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.4.6 fix(deps): update rust crate axum to 0.4.7 Mar 1, 2022
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.4.7 fix(deps): update rust crate axum to 0.4.8 Mar 2, 2022
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.4.8 fix(deps): update rust crate axum to 0.5.3 Apr 25, 2022
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.5.3 fix(deps): update rust crate axum to 0.5.5 May 15, 2022
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.5.5 fix(deps): update rust crate axum to 0.5.8 Jun 18, 2022
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.5.8 fix(deps): update rust crate axum to 0.5.9 Jun 24, 2022
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.5.9 fix(deps): update rust crate axum to 0.5.16 Sep 25, 2022
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.5.16 fix(deps): update rust crate axum to 0.5.17 Nov 20, 2022
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.5.17 fix(deps): update rust crate axum to 0.6.11 Mar 16, 2023
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.6.11 fix(deps): update rust crate axum to 0.6.12 Mar 22, 2023
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.6.12 fix(deps): update rust crate axum to 0.6.18 May 30, 2023
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.6.18 fix(deps): update rust crate axum to 0.6.19 Jul 18, 2023
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.6.19 fix(deps): update rust crate axum to 0.6.20 Aug 4, 2023
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.6.20 fix(deps): update rust crate axum to 0.7.1 Nov 28, 2023
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.7.1 fix(deps): update rust crate axum to 0.7.2 Dec 4, 2023
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.7.2 fix(deps): update rust crate axum to 0.7.3 Dec 30, 2023
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.7.3 fix(deps): update rust crate axum to 0.7.4 Jan 13, 2024
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.7.4 fix(deps): update rust crate axum to 0.7.5 Mar 25, 2024
@renovate renovate bot changed the title fix(deps): update rust crate axum to 0.7.5 fix(deps): update rust crate axum to 0.7.0 May 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

0 participants