ユーザ側は必要最低限の実装で済むようにする
use std::collections::HashMap;
mod ares;
use ares::{Router, HttpResponse, parse, signup, logup, redirect};
fn main() {
let mut router = Router::new();
router.get("index", handle_index);
router.get("hello", handle_hello);
router.get("signin", handle_signin);
router.post("signup", handle_signup);
router.get("login", handle_login);
router.post("logup", handle_logup);
router.post("test", handle_test);
let needs_auth = Some(vec!["/index", "/hello"]);
router.up("192.168.33.10:8000", needs_auth);
}
fn handle_index() -> Option<HashMap<&'static str, &'static str>> {
let mut content1 = HashMap::new();
content1.insert(
"title",
"This is index page!",
);
return Some(content1);
}
fn handle_hello() -> Option<HashMap<&'static str, &'static str>> {
return None;
}
fn handle_signin() -> Option<HashMap<&'static str, &'static str>> {
return None;
}
fn handle_signup(body: String) -> HttpResponse {
let form = parse(&body);
let binding = "<unknown>".to_string();
let name = form.get("name").unwrap_or(&binding);
let password = form.get("password").unwrap_or(&binding);
let redirect_path = "/index";
signup(name, password, redirect_path)
}
fn handle_login() -> Option<HashMap<&'static str, &'static str>> {
return None;
}
fn handle_logup(body: String) -> HttpResponse {
let form = parse(&body);
let binding = "<unknown>".to_string();
let name = form.get("name").unwrap_or(&binding);
let password = form.get("password").unwrap_or(&binding);
let login_success_path = "/index";
let login_failure_path = "/login";
logup(name, password, login_success_path, login_failure_path)
}
fn handle_test(_body: String) -> HttpResponse {
redirect("/index");
HttpResponse::new(200, "<h1>This is Test!</h1>")
}
大分簡素になりました。