use actix_web::{get, App, HttpServer, Result as AwResult}; use actix_files::Files; use maud::{DOCTYPE, html, Markup}; use std::io; use chrono::Local; fn head(page_title: &str) -> Markup { html! { (DOCTYPE) head { meta charset="utf-8"; title { (page_title) } link rel="stylesheet" href="static/style.css"; } } } fn segment_bar(count: i32, progress: i32) -> Markup { html!( div.segments { @for i in 0..count { @if i >= progress { (segment(false)) } @else { (segment(true)) } } } ) } fn segment(activated: bool) -> Markup { html! { @if activated { div.segment.activated{} } @else { div.segment{} } } } fn container(content: Markup) -> Markup { html! { div.container { ( content ) } } } fn layout() -> Markup { let time = Local::now(); html! { (container(html!( h1 { (time) } h2 { (time) } h3 { (time) } ( segment_bar(10, 4) ) ))) } } fn page() -> Markup { html! { (head("breadsite")) body { (layout()) } } } #[get("/")] async fn index() -> AwResult { Ok(html! { (page()) }) } #[actix_web::main] async fn main() -> io::Result<()> { HttpServer::new(|| App::new() .service(index) .service(Files::new("/static", "./static")) ) .bind(("localhost", 8080))? .run() .await }