haven 0.1.5

Actix + React + Vite integration for server-rendered applications
Documentation
use actix_web::{App, HttpResponse, HttpServer, get, web};
use haven::actix::Renderer;
use haven::{RendererConfig, RendererMode, RendererState};
use serde_json::json;
use tracing_subscriber::EnvFilter;

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    tracing_subscriber::fmt()
        .with_env_filter(EnvFilter::from_default_env())
        .init();

    let renderer_state = RendererState::new(RendererConfig {
        mode: RendererMode::Development,
        vite_dev_server_origin: Some("http://127.0.0.1:5174".into()),
        start_vite_dev_server: true,
        title: "Starter App".into(),
        ..RendererConfig::default()
    })
    .map_err(std::io::Error::other)?;

    let renderer_data = web::Data::new(renderer_state);

    HttpServer::new(move || {
        App::new()
            .app_data(renderer_data.clone())
            .service(home)
            .service(about)
    })
    .bind(("127.0.0.1", 3000))?
    .run()
    .await
}

#[get("/")]
async fn home(renderer: Renderer) -> HttpResponse {
    renderer
        .render("index")
        .props(json!({
            "message": "This page is rendered by haven inside the embedded runtime."
        }))
        .await
}

#[get("/about")]
async fn about(renderer: Renderer) -> HttpResponse {
    renderer.render("about").await
}