datastar 0.3.1

Datastar SDK for Rust
Documentation
use {
    core::time::Duration,
    datastar::prelude::PatchElements,
    rocket::{
        get, launch,
        response::{content::RawHtml, stream::EventStream},
        routes,
        serde::{Deserialize, json::Json},
    },
};

#[launch]
fn rocket() -> _ {
    rocket::build().mount("/", routes![index, hello_world])
}

#[get("/")]
fn index() -> RawHtml<&'static str> {
    RawHtml(include_str!("hello-world.html"))
}

const MESSAGE: &str = "Hello, world!";

#[derive(Deserialize)]
#[serde(crate = "rocket::serde")]
struct Signals {
    delay: u64,
}

#[get("/hello-world?<datastar>")]
fn hello_world(datastar: Json<Signals>) -> EventStream![] {
    EventStream! {
        for i in 0..MESSAGE.len() {
            let elements = format!("<div id='message'>{}</div>", &MESSAGE[0..i + 1]);
            let patch = PatchElements::new(elements);
            let sse_event = patch.write_as_rocket_sse_event();

            yield sse_event;

            rocket::tokio::time::sleep(Duration::from_millis(datastar.delay)).await;
        }
    }
}