Go to file
David Pedersen c9c507aece
Add support for websockets (#3)
Basically a copy/paste of whats in warp.

Example usage:

```rust
use tower_web::{prelude::*, ws::{ws, WebSocket}};

let app = route("/ws", ws(handle_socket));

async fn handle_socket(mut socket: WebSocket) {
    while let Some(msg) = socket.recv().await {
        let msg = msg.unwrap();
        socket.send(msg).await.unwrap();
    }
}
```
2021-06-12 20:50:30 +02:00
.github Misc repo setup (#7) 2021-06-12 20:18:21 +02:00
examples Add support for websockets (#3) 2021-06-12 20:50:30 +02:00
src Add support for websockets (#3) 2021-06-12 20:50:30 +02:00
.gitignore Initial pile of hacks 2021-05-29 21:13:06 +02:00
CHANGELOG.md Misc repo setup (#7) 2021-06-12 20:18:21 +02:00
CONTRIBUTING.md Misc repo setup (#7) 2021-06-12 20:18:21 +02:00
Cargo.toml Add support for websockets (#3) 2021-06-12 20:50:30 +02:00
LICENSE Misc repo setup (#7) 2021-06-12 20:18:21 +02:00
README.md Misc repo setup (#7) 2021-06-12 20:18:21 +02:00
deny.toml Misc repo setup (#7) 2021-06-12 20:18:21 +02:00

README.md

tower-web

WARNING: tower-web is very much still work in progress. Nothing is released to crates.io yet and you shouldn't be using this in production.

tower-web (name pending) is a tiny web application framework that focuses on ergonomics and modularity.

Build status

More information about this crate can be found in the crate documentation.

Goals

  • Ease of use. Building web apps in Rust should be as easy as async fn handle(Request) -> Response.
  • Solid foundation. tower-web is built on top of tower and makes it easy to plug in any middleware from the tower and tower-http ecosystem.
  • Focus on routing, extracting data from requests, and generating responses. Tower middleware can handle the rest.
  • Macro free core. Macro frameworks have their place but tower-web focuses on providing a core that is macro free.

Usage example

use tower_web::prelude::*;
use hyper::Server;
use std::net::SocketAddr;
use tower::make::Shared;

#[tokio::main]
async fn main() {
    // build our application with a single route
    let app = route("/", get(|| async { "Hello, World!" }));

    // run it with hyper on localhost:3000
    let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
    Server::bind(&addr)
        .serve(Shared::new(app))
        .await
        .unwrap();
}

Examples

The examples folder contains various examples of how to use tower-web. The docs also have lots of examples

Getting Help

If you're new to tower its [guides] might help. In the tower-web repo we also have a number of examples showing how to put everything together. You're also welcome to ask in the #tower Discord channel or open an issue with your question.

Contributing

🎈 Thanks for your help improving the project! We are so happy to have you! We have a contributing guide to help you get involved in the tower-web project.

License

This project is licensed under the MIT license.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in tower-web by you, shall be licensed as MIT, without any additional terms or conditions.