List view!
The chain of lock().unwrap().values().map(closure).to_owned().collect() is pretty gross, I think, but it went together pretty smoothly. Was expecting more head bashing.
This commit is contained in:
parent
b8b8533f18
commit
d2eda2fc7c
|
@ -45,6 +45,10 @@ impl Database {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn list_people(&self) -> Vec<Person> {
|
||||
self.people.lock().expect("lock people").values().map(|person| person.to_owned()).collect()
|
||||
}
|
||||
|
||||
pub fn add_person(&self, person: Person) {
|
||||
self.people.lock().expect("Couldn't lock people").insert(person.id.to_owned(), person);
|
||||
}
|
||||
|
|
11
src/rest.rs
11
src/rest.rs
|
@ -6,8 +6,13 @@ use crate::model::{
|
|||
Person,
|
||||
};
|
||||
|
||||
#[rocket::get("/rest/<id>", format = "json")]
|
||||
fn get_rest(id: String, context: &State<Database>) -> Option<Json<Person>> {
|
||||
#[rocket::get("/people", format = "json")]
|
||||
fn people_list(context: &State<Database>) -> Json<Vec<Person>> {
|
||||
Json(context.list_people())
|
||||
}
|
||||
|
||||
#[rocket::get("/people/<id>", format = "json")]
|
||||
fn people_detail(id: String, context: &State<Database>) -> Option<Json<Person>> {
|
||||
match context.get_person(&id) {
|
||||
None => None,
|
||||
Some(person) => Some(Json(person))
|
||||
|
@ -17,6 +22,6 @@ fn get_rest(id: String, context: &State<Database>) -> Option<Json<Person>> {
|
|||
pub fn stage() -> AdHoc {
|
||||
AdHoc::on_ignite("Add REST endpoint", |rocket| async {
|
||||
rocket
|
||||
.mount("/", rocket::routes![get_rest])
|
||||
.mount("/", rocket::routes![people_detail, people_list])
|
||||
})
|
||||
}
|
Loading…
Reference in New Issue