set-with-grab

Crates.ioset-with-grab
lib.rsset-with-grab
version1.0.0
sourcesrc
created_at2023-02-18 06:25:54.837769
updated_at2023-02-18 06:25:54.837769
descriptionThe macro to set state with error handling in bevy.
homepage
repository
max_upload_size
id788039
size5,432
(NULL-header)

documentation

README

Set with grab

The crate is util for bevy in rust.

Examples

fn setter_with_grab(mut state: ResMut<State<MockState>>) {
  // This is a macro of the crate!
  set_with_grab!(state, MockState::After);
  // if there is the under code, it will crash with running, but on testing, an error does not occurred.
  // state.set(MockState::After).unwrap();
}

#[fixture]
fn app() -> App {
  let mut app = App::new();
  app.add_plugins(MinimalPlugins).add_state(MockState::Before);
  app
}

#[rstest]
fn change_state_with_grab(mut app: App) {
  app.add_system_set(
    SystemSet::on_update(MockState::Before)
      .with_system(setter_with_grab),
  );
  app.update();
  let state = app.world.resource_mut::<State<MockState>>();
  match state.current() {
    MockState::After => {}
    MockState::Before => {
      panic!("the state is before, yet.");
    }
  }
}

How to use

set_with_grab!(stateResourceMutable,variantOfTheState);

The errors, StateError::StateAlreadyQueued, and StateError::AlreadyInState, are ignored.
Add, when other error occurred, the macro will throw a panic.

Details

The crate serves a macro. This set a variant to passed state internally.
Why does internally? ――Because to ignore several errors.
But do not afraid this crate. These ignored is frequent errors even better code, because a system of bevy is called parallely. So the state mutation does not sync on some thread, and two errors, StateError::StateAlreadyQueued, and StateError::AlreadyInState, is occurred frequently.
And, the error handling is very dull. So, when like this, you can use this crate!
By the way, ignoring errors is called "nigiritsubusu" in japanese. The calling can translate to "crash with grabbing" in English. This is origin of the crate name.

LICENCE

MIT

Commit count: 0

cargo fmt