From 79d66cfc4a9b90bdce89557b76536d554b24aca8 Mon Sep 17 00:00:00 2001 From: lafleur Date: Tue, 10 Nov 2020 03:41:39 +0100 Subject: [PATCH] user guard with file user definition --- src/main.rs | 60 +++++++++++++++++++++++++++++++++------ templates/index.html.tera | 8 ++++-- templates/user.html.tera | 8 ++++++ users/cat.md | 3 ++ users/sunny.md | 1 + 5 files changed, 70 insertions(+), 10 deletions(-) create mode 100644 templates/user.html.tera create mode 100644 users/cat.md create mode 100644 users/sunny.md diff --git a/src/main.rs b/src/main.rs index 999a20d..20fdb14 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,19 +2,53 @@ #[macro_use] extern crate rocket; -use rocket::Request; +//use std::fmt::Display; +use std::fs; +//use rocket::Request; use rocket_contrib::templates::Template; +//use rocket::request::{Outcome, Request, FromRequest, FromParam}; +use rocket::request::{Request, FromParam}; +//use rocket::http::Status; +use rocket::http::RawStr; + +#[derive(serde::Serialize, Debug)] +struct User { + name: String, + content: String, +} + +impl<'r> FromParam<'r> for User { + type Error = &'r RawStr; + + fn from_param(param: &'r RawStr) -> std::result::Result { + let filename = format!("users/{}.md", param); + let content = fs::read_to_string(&filename); + match content { + Ok(value) => Ok(User{ name: param.to_string(), content: value }), + Err(_) => Err(param), + } + } +} + +fn list_users() -> std::io::Result> { + let mut users: Vec = vec!(); + for path in fs::read_dir("users")? { + let file = path?; + let user = format!("{:?}", file.file_name()).replace("\"", "").replace(".md", ""); + users.push(user); + } + Ok(users) +} #[derive(serde::Serialize)] struct IndexContext { name: &'static str, - items: Vec<&'static str> + items: Vec } #[catch(404)] fn not_found(req: &Request<'_>) -> Template { - println!("{:#?}", req); - let dbg = format!("{:?}", req); + let dbg = format!("{:#?}", req); let mut map = std::collections::HashMap::new(); map.insert("title", "Page not found"); map.insert("path", req.uri().path()); @@ -22,16 +56,26 @@ fn not_found(req: &Request<'_>) -> Template { Template::render("error/404", &map) } +#[get("/")] +fn show(user: User) -> Template { + //format!("{:#?}", user) + Template::render("user", &user) +} + #[get("/")] -fn index() -> Template { - let context = IndexContext { name: "home", items: vec!["One", "Two", "Three"] }; - Template::render("index", &context) +fn index() -> std::io::Result