bevy_ecs::system

Type Alias PipeSystem

Source
pub type PipeSystem<SystemA, SystemB> = CombinatorSystem<Pipe, SystemA, SystemB>;
Expand description

A System created by piping the output of the first system into the input of the second.

This can be repeated indefinitely, but system pipes cannot branch: the output is consumed by the receiving system.

Given two systems A and B, A may be piped into B as A.pipe(B) if the output type of A is equal to the input type of B.

Note that for FunctionSystems the output is the return value of the function and the input is the first SystemParam if it is tagged with In or () if the function has no designated input parameter.

§Examples

use std::num::ParseIntError;

use bevy_ecs::prelude::*;

fn main() {
    let mut world = World::default();
    world.insert_resource(Message("42".to_string()));

    // pipe the `parse_message_system`'s output into the `filter_system`s input
    let mut piped_system = parse_message_system.pipe(filter_system);
    piped_system.initialize(&mut world);
    assert_eq!(piped_system.run((), &mut world), Some(42));
}

#[derive(Resource)]
struct Message(String);

fn parse_message_system(message: Res<Message>) -> Result<usize, ParseIntError> {
    message.0.parse::<usize>()
}

fn filter_system(In(result): In<Result<usize, ParseIntError>>) -> Option<usize> {
    result.ok().filter(|&n| n < 100)
}

Aliased Type§

struct PipeSystem<SystemA, SystemB> { /* private fields */ }