|
|
|
@ -9,33 +9,35 @@ use rocket::request::{Request, FromParam}; |
|
|
|
|
use rocket::http::RawStr; |
|
|
|
|
use rocket_contrib::templates::Template; |
|
|
|
|
|
|
|
|
|
const CONTENT_DIR:&str = "content"; |
|
|
|
|
|
|
|
|
|
#[derive(serde::Serialize, Debug)] |
|
|
|
|
struct User { |
|
|
|
|
name: String, |
|
|
|
|
struct Content { |
|
|
|
|
title: String, |
|
|
|
|
content: String, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
impl<'r> FromParam<'r> for User { |
|
|
|
|
impl<'r> FromParam<'r> for Content { |
|
|
|
|
type Error = &'r RawStr; |
|
|
|
|
|
|
|
|
|
fn from_param(param: &'r RawStr) -> Result<Self, Self::Error> { |
|
|
|
|
let filename = format!("users/{}.md", param); |
|
|
|
|
let filename = format!("{}/{}.md", CONTENT_DIR, param); |
|
|
|
|
let content = fs::read_to_string(&filename); |
|
|
|
|
match content { |
|
|
|
|
Ok(value) => Ok(User{ name: param.to_string(), content: value }), |
|
|
|
|
Ok(value) => Ok(Content{ title: param.to_string(), content: value }), |
|
|
|
|
Err(_) => Err(param), |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fn list_users() -> io::Result<Vec<String>> { |
|
|
|
|
let mut users: Vec<String> = vec!(); |
|
|
|
|
for path in fs::read_dir("users")? { |
|
|
|
|
fn list_contents() -> io::Result<Vec<String>> { |
|
|
|
|
let mut contents: Vec<String> = vec!(); |
|
|
|
|
for path in fs::read_dir(CONTENT_DIR)? { |
|
|
|
|
let file = path?; |
|
|
|
|
let user = format!("{:?}", file.file_name()).replace("\"", "").replace(".md", ""); |
|
|
|
|
users.push(user); |
|
|
|
|
let content = format!("{:?}", file.file_name()).replace("\"", "").replace(".md", ""); |
|
|
|
|
contents.push(content); |
|
|
|
|
} |
|
|
|
|
Ok(users) |
|
|
|
|
Ok(contents) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#[derive(serde::Serialize)] |
|
|
|
@ -54,16 +56,15 @@ fn not_found(req: &Request<'_>) -> Template { |
|
|
|
|
Template::render("error/404", &map) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#[get("/<user>")] |
|
|
|
|
fn show(user: User) -> Template { |
|
|
|
|
//format!("{:#?}", user)
|
|
|
|
|
Template::render("user", &user) |
|
|
|
|
#[get("/<content>")] |
|
|
|
|
fn show(content: Content) -> Template { |
|
|
|
|
Template::render("content", &content) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#[get("/")] |
|
|
|
|
fn index() -> io::Result<Template> { |
|
|
|
|
let users = list_users()?; |
|
|
|
|
let context = IndexContext { name: "home", items: users }; |
|
|
|
|
let contents = list_contents()?; |
|
|
|
|
Ok(Template::render("index", &context)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|