pipey 0.2.1

A lightweight HTTP-to-WebSocket event delivery service.
Documentation
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}")),
    }
}