#html #server #client-server #front-end #api-bindings #back-end #http-client

macro vujio

An _experimental_ fast and pertinent web platform for modern devices

4 releases

0.1.3 Jan 3, 2021
0.1.2 Jan 1, 2021
0.1.1 Jan 1, 2021
0.1.0 Jan 1, 2021

#151 in #front-end


Used in vujio_application

Apache-2.0/MIT

29KB
561 lines

vuj.io

github.com vujio crates.io vujio

/vu-hē-oʊ/

Description

An experimental fast and pertinent web platform for modern devices.
Rust backend and TypeScript frontend.

See https://github.com/vujio/vujio

Example:

use vujio::*;

#[server("127.0.0.1:8080")]
async fn main() {
    #[get_html("/")]
    async fn main(_req: Request<AppState>) -> String {
        let directory_links = ["test_path"].map(|v| format!("<a href=\"{}\">{}</a>", v, v));
        let directory_list = format!("<p>Directory:<ul>{}</ul></p>", directory_links.join(""));

        format!(
            "Pages:<br>{}", directory_list
        )
    }

    #[get_html]
    async fn test_path(_req: Request<AppState>) -> String {
        "Page: /test_path".into()
    }

    #[message("/websocket")]
    async fn message(stream: &WebSocketConnection, input: String) {
        println!("Client says: {:?}", input);
        stream.send_string("server response".into()).await;
    }

    #[binary_stream("/ws")]
    async fn my_stream(stream: &WebSocketConnection, input: Vec<u8>) {
        stream.send_bytes(input).await;
    }
}

Dependencies

~40–54MB
~1M SLoC