Commit Graph
153 Commits
Author SHA1 Message Date
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) v0.1.2 axum-v0.1.2 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 axum-v0.1.1 v0.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
David Pedersen ba9c03d146 Update links 2021-07-22 19:39:08 +02:00
David Pedersen 9db3b92df4 Remove disclaimer from readme 2021-07-22 15:50:46 +02:00
David Pedersen 7c37bb818a Update goals in readme 2021-07-22 15:44:59 +02:00
David Pedersen 21db427077 Update examples readme 2021-07-22 15:42:04 +02:00
David Pedersen e4a0199c76 Add missing TOC link 2021-07-22 15:38:55 +02:00