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
}