beet_flow 0.0.8

An ECS control flow library
use crate::prelude::*;
use beet_core::prelude::*;

/// Convert an [`Outcome`] into an [`AppExit`]
#[action(exit_on_end)]
#[derive(Debug, Component)]
pub struct ExitOnEnd;

fn exit_on_end(ev: On<Outcome>, mut commands: Commands) {
	let exit = match ev.event() {
		Outcome::Pass => AppExit::Success,
		Outcome::Fail => AppExit::error(),
	};
	commands.write_message(exit);
}

#[cfg(test)]
mod test {
	use crate::prelude::*;
	use beet_core::prelude::*;

	#[test]
	fn works() {
		let mut world = World::new();
		world.insert_resource(Messages::<AppExit>::default());
		world
			.spawn((EndWith(Outcome::Pass), ExitOnEnd))
			.trigger_target(GetOutcome)
			.flush();

		world.should_exit().unwrap().xpect_eq(AppExit::Success);
	}
}