Skip to content

Commit 4918c91

Browse files
committed
DELETE implemented
1 parent 0665e48 commit 4918c91

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

src/main.rs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,38 @@
11
#![feature(decl_macro)]
2+
#![feature(try_trait)]
23

34
#[macro_use]
45
extern crate rocket;
56

67
use rocket::State;
8+
use rocket::{http::Status, response::Responder};
79
use rocket_contrib::json::Json;
810
use serde::{Deserialize, Serialize};
911
use sled_extensions::bincode::Tree;
1012
use sled_extensions::DbExt;
13+
use std::option::NoneError;
1114

1215
#[derive(thiserror::Error, Debug)]
1316
pub enum ServerError {
1417
#[error("sled db error")]
1518
SledError(#[from] sled_extensions::Error),
19+
#[error("resource not found")]
20+
NotFound,
21+
}
22+
23+
impl From<NoneError> for ServerError {
24+
fn from(_: NoneError) -> Self {
25+
ServerError::NotFound
26+
}
27+
}
28+
29+
impl<'a> Responder<'a> for ServerError {
30+
fn respond_to(self, _: &rocket::Request) -> Result<rocket::Response<'a>, Status> {
31+
match self {
32+
Self::SledError(_) => Err(Status::InternalServerError),
33+
Self::NotFound => Err(Status::NotFound),
34+
}
35+
}
1636
}
1737

1838
struct Database {
@@ -34,7 +54,8 @@ fn get_user(db: State<Database>, username: String) -> EndpointResult<Json<User>>
3454

3555
#[delete("/users/<username>")]
3656
fn delete_user(db: State<Database>, username: String) -> EndpointResult<Json<User>> {
37-
todo!()
57+
let user = db.users.remove(username.as_bytes())??;
58+
Ok(Json(user))
3859
}
3960

4061
#[put("/users", data = "<user>")]

0 commit comments

Comments
 (0)