Initial commit - seoxi's first REST

This commit is contained in:
Seoxi Ryouko
2025-02-07 05:23:40 -06:00
commit a9e8b2195c
6 changed files with 2484 additions and 0 deletions

93
src/main.rs Normal file
View File

@ -0,0 +1,93 @@
mod game;
use game::GameState;
use game::Player;
use rocket::response::status::BadRequest;
use rocket::State;
use std::sync::{Arc, Mutex};
#[macro_use]
extern crate rocket;
#[get("/")]
fn index() -> &'static str {
"Hello, world!"
}
#[get("/shuffle/<player_id>")]
fn shuffle(
player_id: &str,
game_state_arc: &State<ArcMutexGameState>,
) -> Result<String, BadRequest<String>> {
let game_state_mutex = Arc::clone(&game_state_arc.state);
let mut game_state = game_state_mutex.lock().unwrap();
let player = match player_id {
"a" => Player::A,
"b" => Player::B,
_ => return Err(BadRequest(format!("Invalid player {}.", player_id))),
};
game::shuffle(&mut game_state, player);
Ok(format!("Deck Shuffled!"))
}
#[get("/get_events")]
fn get_events(game_state_arc: &State<ArcMutexGameState>) -> String {
let game_state_mutex = Arc::clone(&game_state_arc.state);
let game_state = game_state_mutex.lock().unwrap();
format!("{}", game::get_events(&game_state))
}
#[get("/get_state/<player_id>")]
fn get_state(
player_id: &str,
game_state_arc: &State<ArcMutexGameState>,
) -> Result<String, BadRequest<String>> {
let game_state_mutex = Arc::clone(&game_state_arc.state);
let game_state = game_state_mutex.lock().unwrap();
let player = match player_id {
"a" => Player::A,
"b" => Player::B,
_ => return Err(BadRequest(format!("Invalid player {}.", player_id))),
};
Ok(format!(
"{}",
game::get_game_one_player(&game_state, player)
))
}
#[get("/draw/<player_id>/<count>")]
fn draw(
player_id: &str,
count: usize,
game_state_arc: &State<ArcMutexGameState>,
) -> Result<String, BadRequest<String>> {
let game_state_mutex = Arc::clone(&game_state_arc.state);
let mut game_state = game_state_mutex.lock().unwrap();
let player = match player_id {
"a" => Player::A,
"b" => Player::B,
_ => return Err(BadRequest(format!("Invalid player {}.", player_id))),
};
game::draw(&mut game_state, count, player.clone());
Ok(format!(
"{}",
game::get_game_one_player(&game_state, player)
))
}
struct ArcMutexGameState {
state: Arc<Mutex<GameState>>,
}
#[launch]
fn rocket() -> _ {
let mut game_state = game::new();
let game_state_arc = Arc::new(Mutex::new(game_state));
rocket::build()
.mount("/", routes![index, get_events])
.mount("/", routes![get_state])
.mount("/", routes![draw])
.mount("/", routes![shuffle])
.manage(ArcMutexGameState {
state: game_state_arc,
})
}