Macro shipyard::try_system[][src]

macro_rules! try_system {
    ($function : expr) => { ... };
}
Expand description

Reduce boilerplace to add a fallible system to a workload and make it less error prone.

This macro only works with systems returning a Result.

Example

#[cfg(feature = "std")]
{
use shipyard::{error::RunWorkload, try_system, EntitiesViewMut, World};
use std::error::Error;
use std::fmt::{Debug, Display, Formatter};

#[derive(Debug)]
struct TerribleError;

impl Display for TerribleError {
    fn fmt(&self, fmt: &mut Formatter<'_>) -> Result<(), core::fmt::Error> {
        Debug::fmt(self, fmt)
    }
}
impl Error for TerribleError {}

fn my_sys(mut entities: EntitiesViewMut) -> Result<(), TerribleError> {
    Err(TerribleError)
}

fn main() {
    let world = World::new();
    world
        .add_workload("May fail")
        .with_system(try_system!(my_sys))
        .build();
    match world.try_run_default().map_err(RunWorkload::custom_error) {
        Err(Some(error)) => {
            assert!(error.is::<TerribleError>());
        }
        _ => {}
    }
}
}