Commit Graph
438 Commits
Author SHA1 Message Date
David Pedersen a16ea65031 Add axum-extra crate (#536)
* Add `axum-extra` crate

Empty for now but now we have a place to put stuff.

I'll make a PR for moving over https://github.com/davidpdrsn/axum-resource.

* remove `authors` field from `Cargo.toml`s
2021-11-17 20:00:32 +00:00
Jonas Platte 2bfd51372e Use named constants for static header values (#535)
Improves performance by moving some computation to compile time.
2021-11-17 19:53:07 +00:00
David Pedersen 9a410371a6 Move axum-handle-error-extract into axum (#534)
* 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
2021-11-17 19:09:58 +00:00
David Pedersen a317072467 Rename box_body to body (#533)
Probably would have been easier to merge this change directly into
`main` first and the backport it to `v0.3.x` but here we are :P

Fixes #528
2021-11-17 12:59:29 +00:00
David Pedersen 939995e80e Make the B type parameter in Handler default to axum::body::Body (#527)
* Swap type params in `Handler`

* Default `B` type param in `Handler`
2021-11-16 23:00:39 +01:00
David Pedersen 1dc49ae039 Remove unused file (#526)
This should have been removed as part of #521 but guess I missed it.
2021-11-16 20:27:21 +00:00
David Pedersen c4081ec40e Update tokio-tungstenite (#525) 2021-11-16 20:22:00 +00:00
David Pedersen 2bd0310463 New method router (#521)
* 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
2021-11-16 20:49:07 +01:00
david-perez 3cf8ee3b5e Drop Sync requirement on the handler function (#522)
Since it doesn't need to be called from different threads at the same
time.
2021-11-16 15:00:56 +01:00
Eray Karatay e2e9f1ff68 add axum-tutorial to ecosystem (#519) 2021-11-15 07:31:41 +00:00
David Pedersen 20fabd87e9 Add CORS example (#512) 2021-11-13 22:18:14 +01:00
David Pedersen e58336621d axum-debug: Version 0.2.0 (#511)
- **breaking:** Removed `debug_router` macro.
- **breaking:** Removed `check_service` function.
- **breaking:** Removed `debug_service` function.
axum-debug-v0.2.0
2021-11-13 20:44:13 +01:00
David Pedersen b9dfea6360 Version 0.3.3 (#510)
- Implement `FromRequest` for [`http::request::Parts`] so it can be used an
  extractor ([#489])
- Implement `IntoResponse` for `http::response::Parts` ([#490])

[#489]: https://github.com/tokio-rs/axum/pull/489
[#490]: https://github.com/tokio-rs/axum/pull/490
[`http::request::Parts`]: https://docs.rs/http/latest/http/request/struct.Parts.html
axum-v0.3.3 v0.3.3
2021-11-13 20:41:47 +01:00
David Pedersen 6372f93cc5 More clearly document accepting multiple methods (#503)
Seen a few users ask about this and could be documented more clearly.
2021-11-13 20:00:04 +01:00
Jonas Platte 89db85d202 axum-debug: Move axum dependency to dev-dependencies (#506) 2021-11-13 17:38:09 +01:00
David Pedersen c7b8813c47 Add trybuild tests for axum-debug (#501)
The things are also covered by the doc tests but this also gives us
assertions on the errors produced, which is the whole point of this
crate :)
2021-11-11 20:26:08 +00:00
David Pedersen 26faf0d7a6 Add axum-debug to list of community projects 2021-11-11 19:24:57 +01:00
David Pedersen 34942f3d70 Improve error message for nest("/", _) (#500) 2021-11-11 19:22:25 +01:00
David Pedersen fb8156f17c axum-debug readme fixes (#499)
* Fix build status badge in axum-debug

* fix links

* fix one more link
2021-11-11 16:53:07 +00:00
David Pedersen 5da3f34b3e Clean up axum-debug crate (#498)
* Clean up axum-debug crate

Mostly just brings the crate more in line with the rest of the crates in
the workspace.

I've also removed the axum-debug-macros crate since axum-debug only
contained one re-export from axum-debug-macros. So we didn't need two
crates. Can always bring the "backend" crate back if we need things in
axum-debug that aren't proc-macros.

* Just testing: This should make CI fail

* Misc CI clean up

* fix intentional breakage

* fix changelog

* Remove rustfmt config for now as it gives warnings on stable

* Fix paths
2021-11-11 17:33:33 +01:00
Eray Karatay f6b47478da Move axum-debug crate to workspace (#497)
* add axum-debug to workspace

* update readme

* add changes to changelog

* little docs update

* fix the gap

a tab has leaked into workspace Cargo.toml, it must be fixed

* address clippy warnings
2021-11-11 15:18:40 +01:00
Eray Karatay 2507463706 update tls-rustls example (#494) 2021-11-10 15:07:09 +01:00
Kelly Thomas Kline 0990e27964 Correct grammar (#492) 2021-11-10 12:13:47 +00:00
David Pedersen fdd889525d Implement FromRequest for http::request::Parts (#489)
Its a convenient way to extract everything from a request except the
body. Also makes sense for axum to provide this since other crates
can't.
2021-11-09 20:37:24 +00:00
David Pedersen 62be8aaa18 Implement IntoResponse for http::response::Parts (#490)
* Implement `IntoResponse` for `http::response::Parts`

Not sure there are many use cases for this but still thinks it makes to
provide since other crates can't.

* Use `Response::from_parts`
2021-11-09 20:50:29 +01:00
Imbolc 2ee66e812f FromStr based empty_string_as_none implementation (#486) 2021-11-09 13:05:31 +01:00
Jonas Platte 9c77ee0295 Use nightly clippy & rustfmt for more style checks (#487) 2021-11-09 11:53:57 +00:00
Jonas Platte bcd18a03bc Split first sentence into its own paragraph in TypedHeader docs (#485) 2021-11-09 12:14:42 +01:00
David Pedersen 3f84eca753 Add axum-handle-error-extract to ecosystem 2021-11-09 09:39:03 +01:00
Folyd 028f8a7242 Fix docs links (#481) 2021-11-09 07:26:53 +00:00
David Pedersen 7710f2cf7f Specify version of axum that axum-handle-error-extract depends on
Seems to be required by `cargo publish`
2021-11-08 19:28:28 +01:00
David Pedersen 7e40312cff Add axum-handle-error-extract crate (#468)
* Add `axum-handle-error-extract` crate

* fixup

* Fix readme link

* Add `HandleErrorExt` for new error handling middleware

* Revert "fixup"

This reverts commit 83e04954df.
2021-11-08 19:24:54 +01:00
David Pedersen 3d78711e47 Version 0.3.2 (#483)
- **added:** Add `Router::route_layer` for applying middleware that
  will only run on requests that match a route. This is useful for middleware
  that return early, such as authorization ([#474])

[#474]: https://github.com/tokio-rs/axum/pull/474
v0.3.2
2021-11-08 18:01:32 +00:00
David Pedersen 7eb2c40b24 Add Router::route_layer (#474)
This addresses something thats been bothering me for some time: Most middleware need to run regardless if the request matches a route or not. For example you don't wanna skip logging for unmatched requests.

However middleware such as authorization only make sense to run for matching requests. This previously wasn't possible to express and you'd have to manually apply the middleware to each handler. Consider this:

```rust
Router::new()
    .route("/foo", get(|| async {}))
    .layer(RequireAuthorizationLayer::bearer("password"));
```

Calling `GET /foo` with an invalid token would receive `401 Unauthorized` as expected however calling some unknown route like `GET /not-found` would also return `401 Unauthorized`. I think this is unexpected and have seen a few users ask questions about it.

It happened because the 404 you'd otherwise see is generated by a fallback service stored on `Router`. When adding a layer to the router the layer would also be applied to the fallback, which in the case of auth means the fallback would never be called for unauthorized requests.

I think what axum does today is the right default however I still think we should support this somehow. Especially since [`extractor_middleware`](https://docs.rs/axum/0.3.1/axum/extract/fn.extractor_middleware.html) is mainly useful for auth but it doesn't work great today due to this gotcha.

This PR proposes adding `Router::layer_on_matching_route` which only applies layers to routes, not the fallback, which fixes the issue. I'm not a big fan of the name `layer_on_matching_route`, would like something shorter, but I think it communicates the purpose decently.

The generics are a bit different since the request body used on the routes and the fallback must match, so layers that changes the request body type are not compatible with `layer_on_matching_route`. Such middleware are very rare so that should be fine.
2021-11-08 18:48:02 +01:00
David Pedersen 5d8ebce211 Add axum-flash to list of community maintained crates 2021-11-07 17:17:13 +01:00
Kelly Thomas Kline b26fd03810 Add recommendation (#476) 2021-11-07 07:54:53 +00:00
EdorianDark 513c5a694d Update tracing-subscriber to 0.3 (#472)
Fixes #469
2021-11-06 14:50:23 +00:00
David Pedersen 09bcd8862d Version 0.3.1 (#473)
- **fixed:** Implement `Clone` for `IntoMakeServiceWithConnectInfo` ([#471])

[#471]: https://github.com/tokio-rs/axum/pull/471
v0.3.1 axum-v0.3.1
2021-11-06 13:26:23 +00:00
David Pedersen b3b377d467 Implement Clone for IntoMakeServiceWithConnectInfo (#471)
Fixes https://github.com/tokio-rs/axum/issues/470
2021-11-06 13:06:20 +00:00
Jonas Platte b4b022da5f Add turbo.fish to community showcase (#466) 2021-11-05 13:23:53 +01:00
Eray Karatay 394ba31385 update low-level-rustls example (#465) 2021-11-05 12:02:58 +01:00
Frederik-Baetens 07641450c5 Fix links in readme (#464) 2021-11-04 19:57:05 +01:00
David Pedersen 0be0ea6763 Actually run the routing tests 🤦 2021-11-04 12:48:37 +01:00
david-perez a47d7eca40 Derive Debug for Router instead of implementing manually (#463) 2021-11-04 12:35:50 +01:00
david-perez 071a1b26e6 Fix typos (#461) 2021-11-03 19:03:46 +00:00
David Pedersen ba4d8a2357 Move axum crate into workspace subfolder (#458)
* Move axum crate into workspace subfolder

Over time I imagine we're gonna have other crates in this repo that
provide utilities or integrations for axum. This prepares for that by
moving the main axum crate into its own folder.

The README situation is a bit annoying because we want `./README.md`
for viewing the repo on github but `axum/README.md` for crates.io. For
now I've just copy/pasted it and added CI step to make sure they're
identical.

* update changelog link

* Add licenses to all examples

* is this how you install `diff`?

* or maybe this is how?

* fix readme links

* like this?

* fix cargo-deny step

* Try making root readme a symlink

* remove compare readme step

not needed since readme in repo root is now a symlink

* Revert "Add licenses to all examples"

This reverts commit ab321b7fb9.
2021-11-03 12:38:48 +01:00
David Pedersen b60bfd7f34 Mention "axum-typed-websockets" in community ecosystem 2021-11-03 10:26:20 +01:00
David Pedersen 0f1f28062d Reorganize tests (#456)
* Reorganize tests

This breaks up the large `crate::tests` module by moving some of the
tests into a place that makes more sense. For example tests of JSON
serialization are moved to the `crate::json` module. The remaining routing
tests have been moved to `crate::routing::tests`.

I generally prefer having tests close to the code they're testing. Makes
it easier to see how/if something is tested.

* Try pinning to older version of async-graphql

* Revert "Try pinning to older version of async-graphql"

This reverts commit 2e2cae7d12f5e433a16d6607497d587863f04384.

* don't test examples on 1.54 on CI

* move ci steps around a bit
2021-11-03 10:22:31 +01:00
David Pedersen 420918a53a Clarify change to handling multiple HTTP methods 2021-11-03 09:58:59 +01:00
arctic-alpaca a442920ba3 Restructure community showcase (#454) 2021-11-03 09:20:01 +01:00