underworld_core/handlers/
open_fixture.rs1use crate::{
2 actions::OpenFixture,
3 components::games::GameState,
4 errors::Error,
5 events::{Event, FixtureOpened},
6 utils::ids::parse_id,
7};
8
9pub fn handle(open_fixture: &OpenFixture, state: &GameState) -> Result<Vec<Event>, Error> {
10 let fixture_id = parse_id(&open_fixture.fixture_id)?;
11 let fixture_position = match state.current_room().find_fixture(&fixture_id) {
12 Some(it) => it,
13 None => return Err(Error::FixtureNotFoundError(fixture_id.to_string())),
14 };
15
16 if !fixture_position.fixture.can_be_opened {
17 return Err(Error::FixtureCannotBeOpened(fixture_id.to_string()));
18 }
19
20 Ok(vec![Event::FixtureOpened(FixtureOpened { fixture_id })])
21}