Simple server completed

This commit is contained in:
Ide
2025-12-20 15:01:35 +01:00
parent cecf95771b
commit 8059ab7b85
5 changed files with 1699 additions and 1 deletions
+73
View File
@@ -0,0 +1,73 @@
#[macro_use]
extern crate rocket;
use std::{ops::Deref, sync::Mutex};
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<Mutex<MockDb>>) -> Json<Vec<Item>> {
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/<item>", data = "<data>")]
fn put_list(item: &str, data: Json<ItemData>, mock_db: &State<Mutex<MockDb>>) {
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/<item>")]
fn delete_trip(item: &str, mock_db: &State<Mutex<MockDb>>) {
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_trip])
}
#[derive(Serialize, Deserialize, Default, Debug)]
struct MockDb {
pub list: Vec<Item>,
}
#[derive(Serialize, Deserialize, Default, Debug, Clone)]
struct Item {
pub name: String,
pub data: ItemData,
}
#[derive(Serialize, Deserialize, Default, Debug, Clone)]
struct ItemData {
pub checked: bool,
}