Struct bevy_ecs::system::PipeSystem
source · pub struct PipeSystem<SystemA, SystemB> { /* private fields */ }
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 FunctionSystem
s 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)
}
Trait Implementations§
source§impl<SystemA: System, SystemB: System<In = SystemA::Out>> System for PipeSystem<SystemA, SystemB>
impl<SystemA: System, SystemB: System<In = SystemA::Out>> System for PipeSystem<SystemA, SystemB>
source§fn archetype_component_access(&self) -> &Access<ArchetypeComponentId>
fn archetype_component_access(&self) -> &Access<ArchetypeComponentId>
Returns the system’s archetype component
Access
.source§fn component_access(&self) -> &Access<ComponentId>
fn component_access(&self) -> &Access<ComponentId>
Returns the system’s component
Access
.source§fn is_exclusive(&self) -> bool
fn is_exclusive(&self) -> bool
Returns true if the system must be run exclusively.
source§unsafe fn run_unsafe(&mut self, input: Self::In, world: &World) -> Self::Out
unsafe fn run_unsafe(&mut self, input: Self::In, world: &World) -> Self::Out
Runs the system with the given input in the world. Unlike
System::run
, this function
takes a shared reference to World
and may therefore break Rust’s aliasing rules, making
it unsafe to call. Read moresource§fn run(&mut self, input: Self::In, world: &mut World) -> Self::Out
fn run(&mut self, input: Self::In, world: &mut World) -> Self::Out
Runs the system with the given input in the world.
fn apply_buffers(&mut self, world: &mut World)
source§fn initialize(&mut self, world: &mut World)
fn initialize(&mut self, world: &mut World)
Initialize the system.
source§fn update_archetype_component_access(&mut self, world: &World)
fn update_archetype_component_access(&mut self, world: &World)
Update the system’s archetype component
Access
.fn check_change_tick(&mut self, change_tick: u32)
source§fn get_last_change_tick(&self) -> u32
fn get_last_change_tick(&self) -> u32
Gets the system’s last change tick
source§fn set_last_change_tick(&mut self, last_change_tick: u32)
fn set_last_change_tick(&mut self, last_change_tick: u32)
Sets the system’s last change tick Read more
source§fn default_labels(&self) -> Vec<SystemLabelId> ⓘ
fn default_labels(&self) -> Vec<SystemLabelId> ⓘ
The default labels for the system
Auto Trait Implementations§
impl<SystemA, SystemB> RefUnwindSafe for PipeSystem<SystemA, SystemB>where
SystemA: RefUnwindSafe,
SystemB: RefUnwindSafe,
impl<SystemA, SystemB> Send for PipeSystem<SystemA, SystemB>where
SystemA: Send,
SystemB: Send,
impl<SystemA, SystemB> Sync for PipeSystem<SystemA, SystemB>where
SystemA: Sync,
SystemB: Sync,
impl<SystemA, SystemB> Unpin for PipeSystem<SystemA, SystemB>where
SystemA: Unpin,
SystemB: Unpin,
impl<SystemA, SystemB> UnwindSafe for PipeSystem<SystemA, SystemB>where
SystemA: UnwindSafe,
SystemB: UnwindSafe,
Blanket Implementations§
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
. Read moresource§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read moresource§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read moresource§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more