* Refactor initializing tracing-subscriber
* Revert "Refactor initializing tracing-subscriber"
This reverts commit 0876260bf9 in favor of tracing_subscriber::registry.
* Use EnvFilter::try_from_default_env in chat example
* Use EnvFilter::try_from_default_env in examples
Previously
```rust
handler.layer(RequestBodyLimitLayer::new(...)).with_state(...)
```
didn't work because we required the same request body all the way
through.
* add example of static-file-seriver using serve dit with handler as service
* update handle return type in example
Co-authored-by: David Pedersen <david.pdrsn@gmail.com>
* cargo fmt fix
* change error mapping
Co-authored-by: David Pedersen <david.pdrsn@gmail.com>
* add server feature and make tokio and hyper/server and tcp optional
* address review comments
* don't mention any specific runtimes in the example
* sort deps
* add `tokio` feature when adding `ws`
* don't always pull in tower feature that pulls in tokio io stuff
* remove usage of `tokio_cr`
* changelog
* depend on tokio version that supports wasm
* don't make it sound like tokio doesn't support wasm
* call out new default feature
Co-authored-by: Fisher Darling <fdarlingco@gmail.com>
Co-authored-by: David Pedersen <david.pdrsn@gmail.com>
* Rename Fallback::Custom to Fallback::Service
* Allow Routers to inherit state
* Rename Router::{nest => nest_service} and add new nest method for Routers
* Fix lints
* Add basic tests for state inheritance
* Changelog
* Add example for parsing body based on `Content-Type`
* format
* Update examples/parse-body-based-on-content-type/src/main.rs
Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
* fix copy/paste errors
* rename type params
Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
* Only allow last extractor to mutate the request
* Change `FromRequest` and add `FromRequestParts` trait (#1275)
* Add `Once`/`Mut` type parameter for `FromRequest` and `RequestParts`
* 🪄
* split traits
* `FromRequest` for tuples
* Remove `BodyAlreadyExtracted`
* don't need fully qualified path
* don't export `Once` and `Mut`
* remove temp tests
* depend on axum again
Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
* Port `Handler` and most extractors (#1277)
* Port `Handler` and most extractors
* Put `M` inside `Handler` impls, not trait itself
* comment out tuples for now
* fix lints
* Reorder arguments to `Handler` (#1281)
I think `Request<B>, Arc<S>` is better since its consistent with
`FromRequest` and `FromRequestParts`.
* Port most things in axum-extra (#1282)
* Port `#[derive(TypedPath)]` and `#[debug_handler]` (#1283)
* port #[derive(TypedPath)]
* wip: #[debug_handler]
* fix #[debug_handler]
* don't need itertools
* also require `Send`
* update expected error
* support fully qualified `self`
* Implement FromRequest[Parts] for tuples (#1286)
* Port docs for axum and axum-core (#1285)
* Port axum-extra (#1287)
* Port axum-extra
* Update axum-core/Cargo.toml
Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
* remove `impl FromRequest for Either*`
Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
* New FromRequest[Parts] trait cleanup (#1288)
* Make private module truly private again
* Simplify tuple FromRequest implementation
* Port `#[derive(FromRequest)]` (#1289)
* fix tests
* fix docs
* revert examples
* fix docs link
* fix intra docs links
* Port examples (#1291)
* Document wrapping other extractors (#1292)
* axum-extra doesn't need to depend on axum-core (#1294)
Missed this in https://github.com/tokio-rs/axum/pull/1287
* Add `FromRequest` changes to changelogs (#1293)
* Update changelog
* Remove default type for `S` in `Handler`
* Clarify which types have default types for `S`
* Apply suggestions from code review
Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
* remove unused import
* Rename `Mut` and `Once` (#1296)
* fix trybuild expected output
Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
* begin threading the state through
* Pass state to extractors
* make state extractor work
* make sure nesting with different states work
* impl Service for MethodRouter<()>
* Fix some of axum-macro's tests
* Implement more traits for `State`
* Update examples to use `State`
* consistent naming of request body param
* swap type params
* Default the state param to ()
* fix docs references
* Docs and handler state refactoring
* docs clean ups
* more consistent naming
* when does MethodRouter implement Service?
* add missing docs
* use `Router`'s default state type param
* changelog
* don't use default type param for FromRequest and RequestParts
probably safer for library authors so you don't accidentally forget
* fix examples
* minor docs tweaks
* clarify how to convert handlers into services
* group methods in one impl block
* make sure merged `MethodRouter`s can access state
* fix docs link
* test merge with same state type
* Document how to access state from middleware
* Port cookie extractors to use state to extract keys (#1250)
* Updates ECOSYSTEM with a new sample project (#1252)
* Avoid unhelpful compiler suggestion (#1251)
* fix docs typo
* document how library authors should access state
* Add `RequestParts::with_state`
* fix example
* apply suggestions from review
* add relevant changes to axum-extra and axum-core changelogs
* Add `route_service_with_tsr`
* fix trybuild expectations
* make sure `SpaRouter` works with routers that have state
* Change order of type params on FromRequest and RequestParts
* reverse order of `RequestParts::with_state` args to match type params
* Add `FromRef` trait (#1268)
* Add `FromRef` trait
* Remove unnecessary type params
* format
* fix docs link
* format examples
* Avoid unnecessary `MethodRouter`
* apply suggestions from review
Co-authored-by: Dani Pardo <dani.pardo@inmensys.com>
Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
* Replace async-graphql with link to async-graphql's own examples
* exclude async-graphql directory
* does this fix it?
* apparently this needs to be sorted as well
* Update .github/workflows/CI.yml
Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
* Use version 2 of Cargo's feature resolver
* Increase minimum version of tungstenite
Tungstenite 0.17.1 has a higher MSRV, and there should be no reason to
use it over 0.17.2.
* Clean up and fix MSRV CI job
* Fix some intra-doc links not resolving correctly on docs.rs
* Bump minimum version of tower
… to avoid dependencies with a broken minimum-versions chain.
* More robust asset paths in examples
* Update examples/low-level-rustls/src/main.rs
Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
* format
Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
* Fix status codes for `JsonRejection` rejections
Fixes#865
* Apply suggestions from code review
Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
Co-authored-by: Jonas Platte <jplatte+git@posteo.de>
* Add `IntoResponseParts`
* docs
* Add test
* don't allow overriding body or response
* macroify impls
* re-order things a bit
* Fix tests
* Also allow overriding version
* Move things into separate modules
* docs
* clean up
* fix trybuild test
* remove churn
* simplify buliding response
* fixup test
* fix docs typo
* Use `HeaderValue::from_static`, might be faster
* Bring back `impl IntoResponse` in example
* Remove blanket impl to improve error message
* don't need to set `content-type`
* Apply suggestions from code review
Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>
* changelog
Co-authored-by: Jonas Platte <jplatte@users.noreply.github.com>
* Add sqlx example with migrations
Simple use case for sqlx based on tokio postgres example.
Sqlite database is created on execution in ./target directory
and migrations are then run against it.
* sqlx example uses postgres instead of sqlite3
Also removed migrations and database creation code.
* Change `HeaderMap` extractor to clone the headers
* fix docs
* changelog
* inline variable
* also add changelog item to axum
* don't list types from axum in axum-core's changelog
* document that `HeaderMap::from_request` clones the headers
* fix typo
* a few more typos
* Use 308 status instead of 301 when redirecting
For redirects resulting from requests to paths with a trailing slash,
use 308 instead of 301 to prevent non-GET requests (POST, PUT, etc) from
being changed to GET.
For example, (assuming a route for /path is defined)...
- Old behavior results in:
POST /path/ -> GET /path
- New behavior results in:
POST /path/ -> POST /path
Fixes#681
* Add deprecation notice to found()
Deprecates found() due to its use of HTTP 302
* rustfmt
* Use dedicated redirect method
Use Redirect::permanent instead of re-implementing its functionality
* Remove deprecated method from example
Replace usages of Redirect:found with Redirect::to and Redirect::temporary as appropriate
* Fix panic in oauth example
Previously the example would panic if a request was made without the
`Cookie` header. Now the user is redirected to the login page as
expected.
* Update CHANGELOG
* Revert pub TypedheaderRejection fields
* Fix clippy lint
* cargo fmt
* Fix CHANGELOG link
* Adhere to implicit line length limit
* Simplify json content-type check
* Import HeaderMap from http instead of from headers
The headers crate is an optional dependency and its HeaderMap re-export
is `#[doc(hidden)]`.
* Use headers re-export in axum in examples
* 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
* 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
* Move `axum-handle-error-extract` into axum
With 0.4 underway we can now nuke `axum-handle-error-extract` and move
its code directly into axum.
So this replaces the old `HandleErrorLayer` with one that supports async
functions and extractors.
* changelog
* fix CI
* Empty crate
* basic setup
* Support `HEAD`
* Add remaining methods
* Impl Debug
* Add `MethodRouter::merge`
* WIP
* Support same route with different methods in different calls
* Update changelog
* Bring back `any` and `any_service`
* Address review feedback