use crate::models::AppState;
use crate::utils::format_count;
use actix_web::{HttpResponse, Responder, get, web};
use askama::Template;
#[derive(Template)]
#[template(path = "./files/index.html")]
struct IndexTemplate {
online_users: String,
}
#[derive(Template)]
#[template(path = "./files/docs.html")]
struct DocumentationTemplate;
#[derive(Template)]
#[template(path = "./files/sdk.html")]
struct SdksTemplate;
#[derive(Template)]
#[template(path = "./files/client.html")]
struct ClientTemplate;
#[get("/")]
pub async fn pipey(state: web::Data<AppState>) -> impl Responder {
let metrics = state.arifa.metrics.snapshot();
let template = IndexTemplate {
online_users: format_count(metrics.sessions_active),
};
match template.render() {
Ok(html) => HttpResponse::Ok()
.content_type("text/html; charset=utf-8")
.body(html),
Err(err) => HttpResponse::InternalServerError().body(format!("Template error: {err}")),
}
}
#[get("/docs")]
pub async fn pipey_docs() -> impl Responder {
let template = DocumentationTemplate;
match template.render() {
Ok(html) => HttpResponse::Ok()
.content_type("text/html; charset=utf-8")
.body(html),
Err(err) => HttpResponse::InternalServerError().body(format!("Template error: {err}")),
}
}
#[get("/sdks")]
pub async fn pipey_sdks() -> impl Responder {
let template = SdksTemplate;
match template.render() {
Ok(html) => HttpResponse::Ok()
.content_type("text/html; charset=utf-8")
.body(html),
Err(err) => HttpResponse::InternalServerError().body(format!("Template error: {err}")),
}
}
#[get("/client")]
pub async fn pipey_client() -> impl Responder {
let template = ClientTemplate;
match template.render() {
Ok(html) => HttpResponse::Ok()
.content_type("text/html; charset=utf-8")
.body(html),
Err(err) => HttpResponse::InternalServerError().body(format!("Template error: {err}")),
}
}