all repos — breadsite @ 28d25801570abc207e310b18e710fa24610cc2aa

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
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
use actix_web::{get, web, App, HttpServer, Result as AwResult};
use actix_files::Files;
use maud::{DOCTYPE, html, Markup};
use std::io;
use chrono::Local;

#[derive(Clone)]
struct NavElement {
    name: String,
    href: String,
    class: 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(mut elements: Vec<NavElement>, current: &str) -> Markup {
    elements.first_mut().map(|e| e.class.push_str(" first"));
    elements.last_mut().map(|e| e.class.push_str(" last"));
    elements.iter_mut().filter(|e| e.href == current).for_each(|e| e.class.push_str(" current"));

    html!(
        nav.navBar {
            @for (i, element) in elements.iter().enumerate() {
                ( nav_element(i, element) )
            }
        }
    )
}

fn nav_element(id: usize, element: &NavElement) -> Markup {
    html!(
        a class={( element.class.to_string() )} id={(format!("navElement-{}", id))} href={( element.href )} {( element.name )}
    )
}


fn header(current: &str) -> Markup{
    html!(
        header {
            (nav_bar(vec![
                NavElement{ name: "breadsite".to_string(), href: "/".to_string(), class: String::from("navElement")},
                NavElement{ name: "test".to_string(), href: "/test".to_string(), class: String::from("navElement")},
                NavElement{ name: ":333".to_string(), href: "/3".to_string(), class: String::from("navElement")},
            ], current))
        }
    )
}

fn pawer() -> Markup {
    html! {
        pawer {
            p { "paws...." }
        }
    }
}

fn breadsite() -> Markup {
    html! {
        h1 { "Hiiii" }
    }
}

fn layout(page_title: &str, current: &str,site: Markup) -> Markup {
    html! {
        (head(page_title))
        body {
            (header(current))
            (site)
            (pawer())
        }
    }
}

#[get("/")]
async fn breadsite_index() -> AwResult<Markup> {
    Ok(html! {
        (layout("breadsite", "/", breadsite()))
    })
}

#[get("/test")]
async fn breadsite_test() -> AwResult<Markup> {
    Ok(html! {
        (layout("test", "/test", breadsite()))
    })
}

#[get("/3")]
async fn breadsite_3() -> AwResult<Markup> {
    Ok(html! {
        (layout(":333", "/3", breadsite()))
    })
}

#[actix_web::main]
async fn main() -> io::Result<()> {
    HttpServer::new(|| App::new()
        .service(breadsite_index)
        .service(breadsite_test)
        .service(breadsite_3)
        .service(Files::new("/static", "./static"))
    )
        .bind(("localhost", 8080))?
        .run()
        .await
}