#error #bevy #result #gamedev #game

bevy_mod_try_system

为返回 Results 的 Bevy 系统提供的扩展 trait

4 个版本

1.0.0 2024 年 7 月 1 日
0.2.0 2024 年 7 月 15 日
0.1.2 2024 年 7 月 1 日
0.1.1 2024 年 7 月 1 日
0.1.0 2024 年 7 月 1 日

471游戏开发 中排名

Download history 284/week @ 2024-06-30 22/week @ 2024-07-07 111/week @ 2024-07-14 47/week @ 2024-07-28 3/week @ 2024-08-04 31/week @ 2024-08-11

每月下载量 87
用于 bevy_ui_mod_alerts

MIT/Apache 许可

20KB
374

bevy_mod_try_system

Crates.io Docs

此 crate 定义了 TrySystemExt,一个扩展 trait,它在所有具有 Out = Result<Val, Error>IntoSystem 上实现。它提供了一个方法 pipe_err,该方法接受 self 和另一个系统(具有 In = Error)作为参数,并返回一个 CombinerSystem(这是 PipeSystemsystem.pipe 方法背后的相同工具)将第一个系统中的错误传递到第二个系统。

有关链式输出的警告。

假设我们打算调用 system_a.pipe_err(system_b),其中 system_a 返回某种类型 Result<(), Error>。如果我们想将 system_a 的一些输出 Value 管道到第三个 system_c,我们可以这样做,只要系统 B 能够在系统 A 返回一个 Error 时提供 Value 的回退值。

fn system_a() -> Result<Value, Error> {
    // ...
}

fn system_b(In(error): In<Error>) -> Value {
    // ...
}

fn system_c(In(value): In<Value>) {
    // ...
}

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_systems(Update, system_a.pipe_err(system_b).pipe(system_c))
        .run();
}

重要的是,如果 system_b 无法提供回退值,那么这不太有效。然而,你通常可以很巧妙地做到这一点,例如从 system_b 返回 Option<Value> 并使用 system.map

// ...
fn system_b(In(error): In<Error>) -> Value {
    // ...
}

// ...
app.add_systems(Update, system_a.map(|result| result.map(|value| Some(value))).pipe_err(system_b).pipe(system_c));

请参阅测试以获取更多信息。

依赖项

~12–17MB
~279K SLoC