pub struct PipeSystem<A, B> { /* 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 = IntoSystem::into_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)
}
Implementations§
Trait Implementations§
Source§impl<A, B> ReadOnlySystem for PipeSystem<A, B>
SAFETY: Both systems are read-only, so any system created by piping them will only read from the world.
impl<A, B> ReadOnlySystem for PipeSystem<A, B>
SAFETY: Both systems are read-only, so any system created by piping them will only read from the world.
Source§impl<A, B> System for PipeSystem<A, B>
impl<A, B> System for PipeSystem<A, B>
Source§unsafe fn validate_param_unsafe(
&mut self,
world: UnsafeWorldCell<'_>,
) -> Result<(), SystemParamValidationError>
unsafe fn validate_param_unsafe( &mut self, world: UnsafeWorldCell<'_>, ) -> Result<(), SystemParamValidationError>
This method uses “early out” logic: if the first system fails validation, the second system is not validated.
Because the system validation is performed upfront, this can lead to situations where later systems pass validation, but fail at runtime due to changes made earlier in the piped systems.
Source§fn component_access(&self) -> &Access<ComponentId>
fn component_access(&self) -> &Access<ComponentId>
Access
.Source§fn archetype_component_access(&self) -> &Access<ArchetypeComponentId>
fn archetype_component_access(&self) -> &Access<ArchetypeComponentId>
Access
.Source§fn is_exclusive(&self) -> bool
fn is_exclusive(&self) -> bool
Source§fn has_deferred(&self) -> bool
fn has_deferred(&self) -> bool
Source§unsafe fn run_unsafe(
&mut self,
input: SystemIn<'_, Self>,
world: UnsafeWorldCell<'_>,
) -> Self::Out
unsafe fn run_unsafe( &mut self, input: SystemIn<'_, Self>, world: UnsafeWorldCell<'_>, ) -> Self::Out
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 moreSource§fn apply_deferred(&mut self, world: &mut World)
fn apply_deferred(&mut self, world: &mut World)
Source§fn queue_deferred(&mut self, world: DeferredWorld<'_>)
fn queue_deferred(&mut self, world: DeferredWorld<'_>)
Deferred
system parameters (or other system buffers)
of this system into the world’s command buffer.Source§fn initialize(&mut self, world: &mut World)
fn initialize(&mut self, world: &mut World)
Source§fn update_archetype_component_access(&mut self, world: UnsafeWorldCell<'_>)
fn update_archetype_component_access(&mut self, world: UnsafeWorldCell<'_>)
Source§fn check_change_tick(&mut self, change_tick: Tick)
fn check_change_tick(&mut self, change_tick: Tick)
Source§fn default_system_sets(&self) -> Vec<InternedSystemSet> ⓘ
fn default_system_sets(&self) -> Vec<InternedSystemSet> ⓘ
Source§fn get_last_run(&self) -> Tick
fn get_last_run(&self) -> Tick
Source§fn set_last_run(&mut self, last_run: Tick)
fn set_last_run(&mut self, last_run: Tick)
Source§fn run(&mut self, input: SystemIn<'_, Self>, world: &mut World) -> Self::Out
fn run(&mut self, input: SystemIn<'_, Self>, world: &mut World) -> Self::Out
Source§fn run_without_applying_deferred(
&mut self,
input: SystemIn<'_, Self>,
world: &mut World,
) -> Self::Out
fn run_without_applying_deferred( &mut self, input: SystemIn<'_, Self>, world: &mut World, ) -> Self::Out
Source§fn validate_param(
&mut self,
world: &World,
) -> Result<(), SystemParamValidationError>
fn validate_param( &mut self, world: &World, ) -> Result<(), SystemParamValidationError>
System::validate_param_unsafe
.
that runs on exclusive, single-threaded world
pointer.Auto Trait Implementations§
impl<A, B> Freeze for PipeSystem<A, B>
impl<A, B> RefUnwindSafe for PipeSystem<A, B>where
A: RefUnwindSafe,
B: RefUnwindSafe,
impl<A, B> Send for PipeSystem<A, B>
impl<A, B> Sync for PipeSystem<A, B>
impl<A, B> Unpin for PipeSystem<A, B>
impl<A, B> UnwindSafe for PipeSystem<A, B>where
A: UnwindSafe,
B: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<Marker, In, F> Condition<Marker, In> for Fwhere
In: SystemInput,
F: Condition<Marker, In>,
impl<Marker, In, F> Condition<Marker, In> for Fwhere
In: SystemInput,
F: Condition<Marker, In>,
Source§fn and<M, C: Condition<M, In>>(self, and: C) -> And<Self::System, C::System>
fn and<M, C: Condition<M, In>>(self, and: C) -> And<Self::System, C::System>
true
if both this one and the passed and
return true
. Read moreSource§fn nand<M, C: Condition<M, In>>(self, nand: C) -> Nand<Self::System, C::System>
fn nand<M, C: Condition<M, In>>(self, nand: C) -> Nand<Self::System, C::System>
false
if both this one and the passed nand
return true
. Read moreSource§fn nor<M, C: Condition<M, In>>(self, nor: C) -> Nor<Self::System, C::System>
fn nor<M, C: Condition<M, In>>(self, nor: C) -> Nor<Self::System, C::System>
true
if both this one and the passed nor
return false
. Read moreSource§fn or<M, C: Condition<M, In>>(self, or: C) -> Or<Self::System, C::System>
fn or<M, C: Condition<M, In>>(self, or: C) -> Or<Self::System, C::System>
true
if either this one or the passed or
return true
. Read moreSource§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<E, B, M, S, Out> IntoObserverSystem<E, B, (Fallible, M), Out> for Swhere
S: IntoSystem<Trigger<'static, E, B>, Out, M> + Send + 'static,
<S as IntoSystem<Trigger<'static, E, B>, Out, M>>::System: ObserverSystem<E, B, Out>,
E: 'static,
B: Bundle,
impl<E, B, M, S, Out> IntoObserverSystem<E, B, (Fallible, M), Out> for Swhere
S: IntoSystem<Trigger<'static, E, B>, Out, M> + Send + 'static,
<S as IntoSystem<Trigger<'static, E, B>, Out, M>>::System: ObserverSystem<E, B, Out>,
E: 'static,
B: Bundle,
Source§type System = <S as IntoSystem<Trigger<'static, E, B>, Out, M>>::System
type System = <S as IntoSystem<Trigger<'static, E, B>, Out, M>>::System
System
that this instance converts into.Source§fn into_system(
this: S,
) -> <S as IntoObserverSystem<E, B, (Fallible, M), Out>>::System
fn into_system( this: S, ) -> <S as IntoObserverSystem<E, B, (Fallible, M), Out>>::System
System
.Source§impl<E, B, M, S> IntoObserverSystem<E, B, (Infallible, M)> for Swhere
S: IntoSystem<Trigger<'static, E, B>, (), M> + Send + 'static,
<S as IntoSystem<Trigger<'static, E, B>, (), M>>::System: ObserverSystem<E, B, ()>,
E: Send + Sync + 'static,
B: Bundle,
impl<E, B, M, S> IntoObserverSystem<E, B, (Infallible, M)> for Swhere
S: IntoSystem<Trigger<'static, E, B>, (), M> + Send + 'static,
<S as IntoSystem<Trigger<'static, E, B>, (), M>>::System: ObserverSystem<E, B, ()>,
E: Send + Sync + 'static,
B: Bundle,
Source§type System = InfallibleObserverWrapper<E, B, <S as IntoSystem<Trigger<'static, E, B>, (), M>>::System, ()>
type System = InfallibleObserverWrapper<E, B, <S as IntoSystem<Trigger<'static, E, B>, (), M>>::System, ()>
System
that this instance converts into.Source§fn into_system(
this: S,
) -> <S as IntoObserverSystem<E, B, (Infallible, M)>>::System
fn into_system( this: S, ) -> <S as IntoObserverSystem<E, B, (Infallible, M)>>::System
System
.Source§impl<F, Marker> IntoScheduleConfigs<Box<dyn System<Out = Result<(), BevyError>, In = ()>>, (Fallible, Marker)> for F
impl<F, Marker> IntoScheduleConfigs<Box<dyn System<Out = Result<(), BevyError>, In = ()>>, (Fallible, Marker)> for F
Source§fn into_configs(
self,
) -> ScheduleConfigs<Box<dyn System<Out = Result<(), BevyError>, In = ()>>>
fn into_configs( self, ) -> ScheduleConfigs<Box<dyn System<Out = Result<(), BevyError>, In = ()>>>
ScheduleConfigs
.Source§fn in_set(self, set: impl SystemSet) -> ScheduleConfigs<T>
fn in_set(self, set: impl SystemSet) -> ScheduleConfigs<T>
set
.Source§fn before<M>(self, set: impl IntoSystemSet<M>) -> ScheduleConfigs<T>
fn before<M>(self, set: impl IntoSystemSet<M>) -> ScheduleConfigs<T>
Source§fn after<M>(self, set: impl IntoSystemSet<M>) -> ScheduleConfigs<T>
fn after<M>(self, set: impl IntoSystemSet<M>) -> ScheduleConfigs<T>
Source§fn before_ignore_deferred<M>(
self,
set: impl IntoSystemSet<M>,
) -> ScheduleConfigs<T>
fn before_ignore_deferred<M>( self, set: impl IntoSystemSet<M>, ) -> ScheduleConfigs<T>
set
. Read moreSource§fn after_ignore_deferred<M>(
self,
set: impl IntoSystemSet<M>,
) -> ScheduleConfigs<T>
fn after_ignore_deferred<M>( self, set: impl IntoSystemSet<M>, ) -> ScheduleConfigs<T>
set
. Read moreSource§fn distributive_run_if<M>(
self,
condition: impl Condition<M> + Clone,
) -> ScheduleConfigs<T>
fn distributive_run_if<M>( self, condition: impl Condition<M> + Clone, ) -> ScheduleConfigs<T>
Source§fn run_if<M>(self, condition: impl Condition<M>) -> ScheduleConfigs<T>
fn run_if<M>(self, condition: impl Condition<M>) -> ScheduleConfigs<T>
Source§fn ambiguous_with<M>(self, set: impl IntoSystemSet<M>) -> ScheduleConfigs<T>
fn ambiguous_with<M>(self, set: impl IntoSystemSet<M>) -> ScheduleConfigs<T>
set
.Source§fn ambiguous_with_all(self) -> ScheduleConfigs<T>
fn ambiguous_with_all(self) -> ScheduleConfigs<T>
Source§fn chain(self) -> ScheduleConfigs<T>
fn chain(self) -> ScheduleConfigs<T>
Source§fn chain_ignore_deferred(self) -> ScheduleConfigs<T>
fn chain_ignore_deferred(self) -> ScheduleConfigs<T>
Source§impl<F, Marker> IntoScheduleConfigs<Box<dyn System<Out = Result<(), BevyError>, In = ()>>, (Infallible, Marker)> for F
impl<F, Marker> IntoScheduleConfigs<Box<dyn System<Out = Result<(), BevyError>, In = ()>>, (Infallible, Marker)> for F
Source§fn into_configs(
self,
) -> ScheduleConfigs<Box<dyn System<Out = Result<(), BevyError>, In = ()>>>
fn into_configs( self, ) -> ScheduleConfigs<Box<dyn System<Out = Result<(), BevyError>, In = ()>>>
ScheduleConfigs
.Source§fn in_set(self, set: impl SystemSet) -> ScheduleConfigs<T>
fn in_set(self, set: impl SystemSet) -> ScheduleConfigs<T>
set
.Source§fn before<M>(self, set: impl IntoSystemSet<M>) -> ScheduleConfigs<T>
fn before<M>(self, set: impl IntoSystemSet<M>) -> ScheduleConfigs<T>
Source§fn after<M>(self, set: impl IntoSystemSet<M>) -> ScheduleConfigs<T>
fn after<M>(self, set: impl IntoSystemSet<M>) -> ScheduleConfigs<T>
Source§fn before_ignore_deferred<M>(
self,
set: impl IntoSystemSet<M>,
) -> ScheduleConfigs<T>
fn before_ignore_deferred<M>( self, set: impl IntoSystemSet<M>, ) -> ScheduleConfigs<T>
set
. Read moreSource§fn after_ignore_deferred<M>(
self,
set: impl IntoSystemSet<M>,
) -> ScheduleConfigs<T>
fn after_ignore_deferred<M>( self, set: impl IntoSystemSet<M>, ) -> ScheduleConfigs<T>
set
. Read moreSource§fn distributive_run_if<M>(
self,
condition: impl Condition<M> + Clone,
) -> ScheduleConfigs<T>
fn distributive_run_if<M>( self, condition: impl Condition<M> + Clone, ) -> ScheduleConfigs<T>
Source§fn run_if<M>(self, condition: impl Condition<M>) -> ScheduleConfigs<T>
fn run_if<M>(self, condition: impl Condition<M>) -> ScheduleConfigs<T>
Source§fn ambiguous_with<M>(self, set: impl IntoSystemSet<M>) -> ScheduleConfigs<T>
fn ambiguous_with<M>(self, set: impl IntoSystemSet<M>) -> ScheduleConfigs<T>
set
.Source§fn ambiguous_with_all(self) -> ScheduleConfigs<T>
fn ambiguous_with_all(self) -> ScheduleConfigs<T>
Source§fn chain(self) -> ScheduleConfigs<T>
fn chain(self) -> ScheduleConfigs<T>
Source§fn chain_ignore_deferred(self) -> ScheduleConfigs<T>
fn chain_ignore_deferred(self) -> ScheduleConfigs<T>
Source§impl<T> IntoSystem<<T as System>::In, <T as System>::Out, ()> for Twhere
T: System,
impl<T> IntoSystem<<T as System>::In, <T as System>::Out, ()> for Twhere
T: System,
Source§fn into_system(this: T) -> T
fn into_system(this: T) -> T
System
.Source§fn pipe<B, BIn, BOut, MarkerB>(self, system: B) -> IntoPipeSystem<Self, B>where
Out: 'static,
B: IntoSystem<BIn, BOut, MarkerB>,
for<'a> BIn: SystemInput<Inner<'a> = Out>,
fn pipe<B, BIn, BOut, MarkerB>(self, system: B) -> IntoPipeSystem<Self, B>where
Out: 'static,
B: IntoSystem<BIn, BOut, MarkerB>,
for<'a> BIn: SystemInput<Inner<'a> = Out>,
Source§fn map<T, F>(self, f: F) -> IntoAdapterSystem<F, Self>
fn map<T, F>(self, f: F) -> IntoAdapterSystem<F, Self>
f
, creating a new system that
outputs the value returned from the function. Read more