use diesel::result::Error; use rocket::http::Status; use rocket_contrib::json::Json; use rocket_contrib::templates::Template; use std::collections::HashMap; use crate::connection::DbConn; use crate::gists; use crate::gists::Gist; fn error_status(error: Error) -> Status { match error { Error::NotFound => Status::NotFound, _ => Status::InternalServerError, } } #[get("/")] pub fn index(connection: DbConn) -> Result>, Status> { gists::all(&connection) .map(|gists| Json(gists)) .map_err(|error| error_status(error)) } #[get("/gists/")] pub fn show_gist(connection: DbConn, id: i32) -> Template { let gist = match gists::get(&connection, id) { Ok(gist) => Some(gist), Err(_) => None, }; let mut context = HashMap::new(); context.insert("gist", gist); Template::render("gists/show", &context) }