Rust based web design :smile:
Construct endpoints or error handlers like so.
```rust use tela::prelude::*; // This is a text/plain response
fn home() -> &'static str { "Hello, world!" } ```
```rust use tela::{prelude::*, response::HTML}; // This is a text/html response that could fail and the error should be either // given to the appropriate handler or returned as is.
fn data(username: String, age: i32) -> Result> { response!(html!(
```rust use tela::{prelude::*, response::HTML}; // Catches any error that is 404 comming from another endpoint // soon this will be for all 404 errors that are thrown // All returns must be valid data. There can not be custom HTTP codes or results // returned.
fn not_found(code: u16, message: String, reason: String) -> HTML{code}" "{message}
)
}
```
``rust
use tela::{prelude::*, response::{JSON, Raw}};
// Endpoint that returns json with a custom HTTP code. This response is not
// caught by any other handlers.
// The
Raw` type can be used inside of a JSON type to represent a shapeless object.
fn get_data() -> (u16, JSON
```rust use tela::{prelude::*, response::{JSON, Raw}, request::{Body, Query}}; use serde::{Serialize, Deserialize};
struct User { name: String, }
// The query and body can automatically be extracted from the request in the parameters.
// Just use Body
and Query
. If a extraction or a uri capture could be missing or you don't want
// Tela throwing a 500 error automatically, you can wrap the parameters type in an Option
.
// Also note that the order of the parameters are not important.
fn get_user(query: Option
JSON(json!({"name": username, "age": body})) } ```
Run an app like so. ```rust use tela::{prelude::*, Server};
asyn fn main() { Server::new() .routes(group![home, data]) .catch(not_found) .serve(3000) .await } ```
Tower
Inspiration - Axum - Actix - Warp - Rocket
Tools
- Tokio
- Hyper - Focus on 1.0 release
- Tower
typed-html for html macro inspiration and html-to-string-macro for html responses.