#[macro_use] extern crate rocket; use std::sync::Mutex; use inkopslista_lib::{Item, ItemData}; use rocket::{serde::json::Json, State}; use serde::{Deserialize, Serialize}; #[get("/")] fn index() -> &'static str { "hello world" } // http GET hemma.nubo.sh/api/list/ // response: [ // Item { name: "Mjölk", ItemData { checked: true } } // ] #[get("/api/list")] fn get_list(mock_db: &State>) -> Json> { let mock_db = mock_db.lock().unwrap(); Json(mock_db.list.clone()) } // http PUT hemma.nubo.sh/api/list/mjölk // body: ItemData { // checked: true, // } #[put("/api/list/", data = "")] fn put_list(item: &str, data: Json, mock_db: &State>) { println!("{} {:?}", item, data); let mut mock_db = mock_db.lock().unwrap(); if let Some(item) = mock_db.list.iter_mut().find(|x| x.name == item) { item.data = data.into_inner() } else { mock_db.list.push(Item { name: item.to_string(), data: data.into_inner(), }); } } #[delete("/api/list/")] fn delete_item(item: &str, mock_db: &State>) { let mut mock_db = mock_db.lock().unwrap(); if let Some(index) = mock_db.list.iter().position(|x| x.name == item) { mock_db.list.remove(index); } } #[launch] fn rocket() -> _ { rocket::build() .manage(Mutex::new(MockDb::default())) .mount("/", routes![index, get_list, put_list, delete_item]) } #[derive(Serialize, Deserialize, Default, Debug)] struct MockDb { pub list: Vec, }