diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/src/main.rs b/src/main.rs index 859c4d3..9d7dfd0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,7 @@ use std::{fs::File, io::Write}; -use rocket::{serde::json::Json, State}; +use rocket::{http::Status, serde::json::Json, State}; use serde::{Deserialize, Serialize}; mod uid; @@ -116,9 +116,12 @@ async fn index() -> &'static str { } #[get("/user/<user>")] -async fn get_user(user: &str, db: &State<Mutex<DB>>) -> Json<Result<User, String>> { +async fn get_user(user: &str, db: &State<Mutex<DB>>) -> (Status, Result<Json<User>, Json<String>>) { let db = db.lock().await; - db.get_user(user).await.into() + match db.get_user(user).await { + Ok(n) => (Status::Ok, Ok(n.into())), + Err(n) => (Status::NotFound, Err(n.into())) + } } fn default_id() -> String { @@ -131,25 +134,40 @@ struct UserForm { id: String, } #[post("/user", data="<data>", format="json")] -async fn new_user(data: Json<UserForm>, db: &State<Mutex<DB>>) -> Json<Result<(), String>> { +async fn new_user(data: Json<UserForm>, db: &State<Mutex<DB>>) -> (Status, Result<(), Json<String>>) { let mut db = db.lock().await; if data.id == "random".to_string() { match db.uid_generator.new_uid() { - Ok(n) => return db.new_user(data.name.clone(), n).await.into(), - Err(n) => return Err(n.clone()).into(), + // Gotten a new UID to make a new user with + Ok(n) => match db.new_user(data.name.clone(), n).await { + // User has been created + Ok(_) => return (Status::Ok, Ok(())), + // Could not create user + Err(n) => return (Status::InternalServerError, Err(n.into())), + }, + // Did not get a new UID + Err(n) => return (Status::InternalServerError, Err(n.clone().into())), } } else { match UID::from(data.id.clone()) { - Err(n) => Err(n).into(), + // Could not make UID from input + Err(n) => (Status::BadRequest, Err(n.into())), + // Made a UID Ok(n) => { if db.uid_generator.is_taken(n) { - return Err("UID is taken".to_string()).into(); + // UID is taken + return (Status::BadRequest, Err("UID is taken".to_string().into())); } else { // UID is not taken match db.uid_generator.add_uid(n) { - Err(n) => return Err(n).into(), - Ok(n) => { - return db.new_user(data.name.clone(), n).await.into(); + // Could not add UID for some reason + Err(n) => return (Status::InternalServerError, Err(n.into())), + // Made + Ok(n) => match db.new_user(data.name.clone(), n).await { + // User has been created + Ok(_) => return (Status::Ok, Ok(())), + // Could not create user + Err(n) => return (Status::InternalServerError, Err(n.into())), }, } } |