underworld_core/handlers/
open_fixture.rs

1use 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}