all repos — breadsite @ 20c1016ac4d03c879fbca96bf4aa6ad4f89037ac

Unnamed repository; edit this file 'description' to name the repository.

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
}