Commit graph

358 commits

Author SHA1 Message Date
Sunli
7cf8dafdce
Re-export http crate and hyper::Server (#110)
Co-Authored-By: David Pedersen <david.pdrsn@gmail.com>

Co-authored-by: David Pedersen <david.pdrsn@gmail.com>
2021-08-04 12:29:42 +02:00
Jonas Platte
d285dfb568
Tell clippy about MSRV (#114)
* Remove unused import

* Tell clippy about MSRV
2021-08-04 12:15:58 +02:00
Sunli
09ecd42b32
Add async-graphql example (#93)
Fixes https://github.com/tokio-rs/axum/issues/68
2021-08-04 12:10:20 +02:00
Jonas Platte
015f6e0c21
Fix typos found by typos-cli (#113) 2021-08-04 12:09:39 +02:00
Grzegorz Baranski
4e9b38ddf9
Use tuple destructuring in chat example (#105) 2021-08-03 22:21:18 +02:00
David Pedersen
9a6bc4e962
Break up extract.rs (#103)
This breaks up `extract.rs` into several smaller submodules. The public
API remains the same.

This is done in prep for adding more tests to extractors which would get
messy if they were all in the same file.
2021-08-03 21:55:48 +02:00
PatatasDelPapa
715e624d8c
Remove unused imports from example (#104)
Remove unused imports from the first crate documentation example.
2021-08-03 21:55:27 +02:00
David Pedersen
f84f52d61e Contributing guide fixes 2021-08-03 21:44:49 +02:00
Mateusz Kieblesz
b0457c08e8
Add 404 page example (#97) 2021-08-03 17:00:21 +02:00
Sunli
be68227d73
Use pin-project-lite instead of pin-project (#95) 2021-08-03 09:33:00 +02:00
Sunli
ba74787532
Add support for WebSocket protocol negotiation. (#83) 2021-08-03 08:43:37 +02:00
David Pedersen
9fbababc3a
Make it clear how to run all examples (#92)
* Handle errors in websocket example

* Make it clear how to run all examples
2021-08-02 23:09:09 +02:00
David Pedersen
6a078ddb71
Fix stripping prefix when nesting at / (#91)
* Fix stripping prefix when nesting at `/`

Fixes https://github.com/tokio-rs/axum/issues/88

* changelog
2021-08-02 22:40:33 +02:00
Javier Viola
c6b7ad0f33
Add chat example documentation. (#85) 2021-08-02 21:42:10 +02:00
David Pedersen
a0f6dccc5e Remove dbg! left in by accident 2021-08-02 09:46:08 +02:00
minghuaw
ee9032b9d1
Changed http-body dependency version to 0.4.2 (#81) 2021-08-01 23:09:08 +02:00
programatik29
ffefb3455c
Add chat example (#78) 2021-08-01 22:42:34 +02:00
David Pedersen
55c1a29420
Version 0.1.2 (#80) 2021-08-01 22:13:43 +02:00
David Pedersen
666d088b26
Including tracing setup in all examples (#79) 2021-08-01 22:01:33 +02:00
David Pedersen
6d787665d6
Server-Sent Events (#75)
Example usage:

```rust
use axum::{prelude::*, sse::{sse, Event, KeepAlive}};
use tokio_stream::StreamExt as _;
use futures::stream::{self, Stream};
use std::{
    time::Duration,
    convert::Infallible,
};

let app = route("/sse", sse(make_stream).keep_alive(KeepAlive::default()));

async fn make_stream(
    // you can also put extractors here
) -> Result<impl Stream<Item = Result<Event, Infallible>>, Infallible> {
    // A `Stream` that repeats an event every second
    let stream = stream::repeat_with(|| Event::default().data("hi!"))
        .map(Ok)
        .throttle(Duration::from_secs(1));

    Ok(stream)
}
```

Implementation is based on [warp's](https://github.com/seanmonstar/warp/blob/master/src/filters/sse.rs)
2021-08-01 21:49:17 +02:00
David Pedersen
c232c56de0
Mention required dependencies in docs (#77)
Fixes https://github.com/tokio-rs/axum/issues/70
2021-08-01 21:33:55 +02:00
David Pedersen
69ae7a686a
Fix websockets failing on Firefox (#76)
Axum expected the `Connection` header to be _exactly_ `upgrade`. Turns
out thats a bit too strict as this didn't work in Firefox.

Turns out `Connection` just has to contain `upgrade`. At least that is
what [warp does](https://github.com/seanmonstar/warp/blob/master/src/filters/ws.rs#L46).
2021-08-01 21:00:38 +02:00
jtroo
10bedca796
Fix typos in service docs (#74)
This commit fixes some typos and improves the grammar/structure
of some sections.
2021-08-01 20:55:09 +02:00
David Pedersen
2cf28c6794
Improve error message of MissingExtension rejections (#72)
Now includes the name of missing type.
2021-08-01 15:50:57 +02:00
David Pedersen
6f30d4aa6a
Improve documentation for router (#71)
Fixes #67
2021-08-01 15:42:50 +02:00
David Pedersen
f581e3efb2
Clarify required response body type when routing to tower::Services (#69) 2021-08-01 15:42:12 +02:00
David Pedersen
593f3e115f Clean up TLS example 2021-08-01 13:48:39 +02:00
David Pedersen
ea82acd175
Add sessions and cookies examples (#65)
Uses [`async-session`](https://crates.io/crates/async-session).
2021-08-01 09:15:44 +02:00
David Pedersen
30058dbbed Use main for build status in readme 2021-08-01 08:48:31 +02:00
programatik29
3b579c7215
Add TLS example (with rustls) (#57) 2021-08-01 08:32:47 +02:00
David Pedersen
f67abd1ee2
Add extractor for remote connection info (#55)
Fixes https://github.com/tokio-rs/axum/issues/43

With this you can get the remote address like so:

```rust
use axum::{prelude::*, extract::ConnectInfo};
use std::net::SocketAddr;

let app = route("/", get(handler));

async fn handler(ConnectInfo(addr): ConnectInfo<SocketAddr>) -> String {
    format!("Hello {}", addr)
}

// Starting the app with `into_make_service_with_connect_info` is required
// for `ConnectInfo` to work.
let make_svc = app.into_make_service_with_connect_info::<SocketAddr, _>();

hyper::Server::bind(&"0.0.0.0:3000".parse().unwrap())
    .serve(make_svc)
    .await
    .expect("server failed");
```

This API is fully generic and supports whatever transport layer you're using with Hyper. I've updated the unix domain socket example to extract `peer_creds` and `peer_addr`.
2021-07-31 21:36:30 +02:00
David Pedersen
407aa533d7
Return 405 Method Not Allowed for unsupported method for route (#63)
Fixes https://github.com/tokio-rs/axum/issues/61
2021-07-31 21:05:53 +02:00
songww
49dd1ca49a
Fix docs typo (#58) 2021-07-31 17:17:33 +02:00
David Pedersen
5407247e90
Implement Deref for extractors (#56)
Fixes https://github.com/tokio-rs/axum/issues/54
2021-07-31 14:54:10 +02:00
David Pedersen
100ecea581 Mention benchmark in readme 2021-07-31 14:53:12 +02:00
David Pedersen
132da26d5b
Add unix domain socket example (#53)
Not actually related to Axum, can be implemented directly with Hyper, but I figure its nice to have for demonstration and might help catch accidental breaking changes in the future.
2021-07-31 12:22:38 +02:00
David Pedersen
d88212c015
Implement Sink and Stream for WebSocket (#52)
Among other things, this makes [`StreamExt::split`](https://docs.rs/futures/0.3.16/futures/stream/trait.StreamExt.html#method.split) accessible so one can read and write at the same time.
2021-07-31 10:51:41 +02:00
Eduardo Canellas
4fbc99c6ef
docs: fix typo (#45) 2021-07-31 00:06:27 +02:00
David Pedersen
6c1279a415 Version 0.1.1 2021-07-30 17:20:38 +02:00
David Pedersen
446cfca753 Bring back badges 2021-07-30 17:18:54 +02:00
David Pedersen
ca34b4184a Update changelog for 0.1.0 release 2021-07-30 17:17:25 +02:00
David Pedersen
5d2580a9d8 Misc readme fixes 2021-07-30 17:17:18 +02:00
David Pedersen
272e22a23b Release prep 2021-07-30 15:56:01 +02:00
David Pedersen
94d2b5f8a6 Misc readme/docs improvements 2021-07-30 15:51:59 +02:00
David Pedersen
d843f4378b
Make websocket handlers support extractors (#41) 2021-07-30 15:19:53 +02:00
David Pedersen
d927c819d3 Clarify docs around body extractors 2021-07-23 00:27:08 +02:00
David Pedersen
f25f7f90ff Implement IntoResponse for Body 2021-07-22 21:22:46 +02:00
David Pedersen
1fb80a1129 Implement IntoResponse for HeaderMap 2021-07-22 21:21:53 +02:00
David Pedersen
6d483a623a Add testing example with real HTTP server 2021-07-22 21:12:40 +02:00
David Pedersen
9a419de290 Misc clean up 2021-07-22 21:12:29 +02:00