Type Alias valence::ecs::system::PipeSystem

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 */ }

Implementations

§

impl<Func, A, B> CombinatorSystem<Func, A, B>

pub const fn new( a: A, b: B, name: Cow<'static, str>, ) -> CombinatorSystem<Func, A, B>

Creates a new system that combines two inner systems.

The returned system will only be usable if Func implements Combine<A, B>.

Trait Implementations

§

impl<Func, A, B> Clone for CombinatorSystem<Func, A, B>
where A: Clone, B: Clone,

§

fn clone(&self) -> CombinatorSystem<Func, A, B>

Clone the combined system. The cloned instance must be .initialize()d before it can run.

1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl<A, B, Func> ReadOnlySystem for CombinatorSystem<Func, A, B>
where Func: Combine<A, B> + 'static, A: ReadOnlySystem, B: ReadOnlySystem,

SAFETY: Both systems are read-only, so any system created by combining them will only read from the world.

§

fn run_readonly(&mut self, input: Self::In, world: &World) -> Self::Out

Runs this system with the given input in the world. Read more
§

impl<A, B, Func> System for CombinatorSystem<Func, A, B>
where Func: Combine<A, B> + 'static, A: System, B: System,

§

type In = <Func as Combine<A, B>>::In

The system’s input. See In for FunctionSystems.
§

type Out = <Func as Combine<A, B>>::Out

The system’s output.
§

fn name(&self) -> Cow<'static, str>

Returns the system’s name.
§

fn component_access(&self) -> &Access<ComponentId>

Returns the system’s component Access.
§

fn archetype_component_access(&self) -> &Access<ArchetypeComponentId>

Returns the system’s archetype component Access.
§

fn is_send(&self) -> bool

Returns true if the system is Send.
§

fn is_exclusive(&self) -> bool

Returns true if the system must be run exclusively.
§

fn has_deferred(&self) -> bool

Returns true if system as deferred buffers
§

unsafe fn run_unsafe( &mut self, input: <CombinatorSystem<Func, A, B> as System>::In, world: UnsafeWorldCell<'_>, ) -> <CombinatorSystem<Func, A, B> as System>::Out

Runs the system with the given input in the world. Unlike System::run, this function can be called in parallel with other systems and may break Rust’s aliasing rules if used incorrectly, making it unsafe to call. Read more
§

fn run<'w>( &mut self, input: <CombinatorSystem<Func, A, B> as System>::In, world: &'w mut World, ) -> <CombinatorSystem<Func, A, B> as System>::Out

Runs the system with the given input in the world. Read more
§

fn apply_deferred(&mut self, world: &mut World)

Applies any Deferred system parameters (or other system buffers) of this system to the world. Read more
§

fn queue_deferred(&mut self, world: DeferredWorld<'_>)

Enqueues any Deferred system parameters (or other system buffers) of this system into the world’s command buffer.
§

fn initialize(&mut self, world: &mut World)

Initialize the system.
§

fn update_archetype_component_access(&mut self, world: UnsafeWorldCell<'_>)

Update the system’s archetype component Access. Read more
§

fn check_change_tick(&mut self, change_tick: Tick)

Checks any Ticks stored on this system and wraps their value if they get too old. Read more
§

fn default_system_sets(&self) -> Vec<Interned<dyn SystemSet>>

Returns the system’s default system sets. Read more
§

fn get_last_run(&self) -> Tick

Gets the tick indicating the last time this system ran.
§

fn set_last_run(&mut self, last_run: Tick)

Overwrites the tick indicating the last time this system ran. Read more
§

fn type_id(&self) -> TypeId

Returns the TypeId of the underlying system type.