【Rust】フレームワーク自作: セッション管理はフレームワーク側で実行する

ユーザ側は必要最低限の実装で済むようにする

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>")
}

大分簡素になりました。