src/main.rs (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
use actix_web::{get, App, HttpServer, Result as AwResult};
use actix_files::Files;
use maud::{DOCTYPE, html, Markup};
use std::io;
use chrono::Local;
struct NavElement {
name: String,
href: String,
}
fn head(page_title: &str) -> Markup {
html! {
(DOCTYPE)
head {
meta charset="utf-8";
title { (page_title) }
link rel="stylesheet" href="static/style.css";
}
}
}
fn nav_bar(elements: Vec<NavElement>) -> Markup {
html!(
nav.navBar {
@for (i, element) in elements.iter().enumerate() {
@if i == 0 {
( nav_element("navElement first", i, element) )
} @else if i == elements.len()-1 {
( nav_element("navElement last", i, element) )
} @else if i == 1 {
( nav_element("navElement current", i, element) )
} @else {
( nav_element("navElement", i, element) )
}
}
}
)
}
fn nav_element(element_class: &str, id: usize, element: &NavElement) -> Markup {
html!(
a class={( element_class.to_string() )} id={(format!("navElement-{}", id))} href={( element.href )} {( element.name )}
)
}
fn header() -> Markup{
let time = Local::now();
html!(
header {
(nav_bar(vec![
NavElement{ name: "breadsite".to_string(), href: "/".to_string()},
NavElement{ name: "test1".to_string(), href: "test1".to_string()},
NavElement{ name: "test2".to_string(), href: "test2".to_string()},
NavElement{ name: ":333".to_string(), href: ":3".to_string()},
NavElement{ name: time.to_string(), href: time.to_string()},
]))
}
)
}
fn pawer() -> Markup {
html! {
pawer {
p { "paws...." }
}
}
}
fn layout() -> Markup {
html! {
(header())
h1 { "Hiiii" }
(pawer())
}
}
fn page() -> Markup {
html! {
(head("breadsite"))
body {
(layout())
}
}
}
#[get("/")]
async fn index() -> AwResult<Markup> {
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
}
|