Chain

Struct Chain 

Source
pub struct Chain { /* private fields */ }

Implementations§

Source§

impl Chain

Source

pub fn new(commands: impl IntoIterator<Item = LocalCommand>) -> Self

Examples found in repository?
examples/simple_chain.rs (lines 17-21)
14fn setup(mut commands: Commands) {
15    // Create a chain of commands
16    #[cfg(not(windows))]
17    let chain = Chain::new(vec![
18        LocalCommand::new("sh").args(["-c", "echo 'First command' && sleep 1"]),
19        LocalCommand::new("sh").args(["-c", "echo 'Second command' && sleep 1"]),
20        LocalCommand::new("sh").args(["-c", "echo 'Third command' && sleep 1"]),
21    ]);
22    #[cfg(windows)]
23    let chain = Chain::new(vec![
24        LocalCommand::new("powershell").args(["echo 'First command' && sleep 1"]),
25        LocalCommand::new("powershell").args(["echo 'Second command' && sleep 1"]),
26        LocalCommand::new("powershell").args(["echo 'Third command' && sleep 1"]),
27    ]);
28
29    // Spawn an entity with the Chain component
30    let id = commands.spawn(chain).id();
31    println!("Spawned the chain as entity {id:?}");
32}
More examples
Hide additional examples
examples/chain_failure_delay_retries.rs (lines 20-24)
17fn setup(mut commands: Commands) {
18    // Spawn an entity with the relevant components
19    #[cfg(not(windows))]
20    let chain = Chain::new(vec![
21        LocalCommand::new("sh").args(["-c", "echo 'First command'"]),
22        LocalCommand::new("sh").args(["-c", "exit 1"]), // Failure
23        LocalCommand::new("sh").args(["-c", "echo 'Third command'"]),
24    ]);
25    #[cfg(windows)]
26    let chain = Chain::new(vec![
27        LocalCommand::new("powershell").args(["echo 'First command'"]),
28        LocalCommand::new("powershell").args(["exit 1"]), // Failure
29        LocalCommand::new("powershell").args(["echo 'Third command'"]),
30    ]);
31    let id = commands
32        .spawn((
33            chain,
34            Retry::Attempts(2),
35            Delay::Fixed(Duration::from_secs(2)),
36        ))
37        .id();
38    println!("Spawned the chain as entity {id:?}");
39}
examples/chain_retries_delay_cleanup.rs (lines 20-24)
17fn setup(mut commands: Commands) {
18    // Spawn a entity with all addons
19    #[cfg(not(windows))]
20    let chain = Chain::new(vec![
21        LocalCommand::new("sh").args(["-c", "echo 'First command'"]),
22        LocalCommand::new("sh").args(["-c", "echo 'Second command'"]),
23        LocalCommand::new("sh").args(["-c", "echo 'Third command'"]),
24    ]);
25    #[cfg(windows)]
26    let chain = Chain::new(vec![
27        LocalCommand::new("powershell").args(["echo 'First command'"]),
28        LocalCommand::new("powershell").args(["echo 'Second command'"]),
29        LocalCommand::new("powershell").args(["echo 'Third command'"]),
30    ]);
31    let id = commands
32        .spawn((
33            chain,
34            Retry::Attempts(2),
35            Delay::Fixed(Duration::from_secs(3)),
36            Cleanup::RemoveComponents,
37        ))
38        .id();
39    println!("Spawned as entity {id:?}");
40}
examples/chain_failure.rs (lines 17-23)
14fn setup(mut commands: Commands) {
15    // Create a chain of commands
16    #[cfg(not(windows))]
17    let chain = Chain::new(vec![
18        LocalCommand::new("sh").args(["-c", "echo 'First command' && sleep 1"]),
19        LocalCommand::new("commanddoesnotexist").args(["this should fail"]), // Failure
20        LocalCommand::new("sh").args(["-c", "echo 'Third command' && sleep 1"]),
21        // Same result with a failed running command
22        //LocalCommand::new("sh").args(["-c", "exit 1"]), // Failure
23    ]);
24    #[cfg(windows)]
25    let chain = Chain::new(vec![
26        LocalCommand::new("powershell").args(["echo 'First command' && sleep 1"]),
27        LocalCommand::new("commanddoesnotexist").args(["this should fail"]), // Failure
28        LocalCommand::new("powershell").args(["echo 'Third command' && sleep 1"]),
29        // Same result with a failed running command
30        //LocalCommand::new("powershell").args(["exit 1"]), // Failure
31    ]);
32
33    // Spawn an entity with the Chain component
34    let id = commands.spawn(chain).id();
35    println!("Spawned the chain as entity {id:?}");
36}

Trait Implementations§

Source§

impl Component for Chain
where Self: Send + Sync + 'static,

Source§

const STORAGE_TYPE: StorageType = ::bevy::ecs::component::StorageType::Table

A constant indicating the storage type used for this component.
Source§

type Mutability = Mutable

A marker type to assist Bevy with determining if this component is mutable, or immutable. Mutable components will have Component<Mutability = Mutable>, while immutable components will instead have Component<Mutability = Immutable>. Read more
Source§

fn register_required_components( _requiree: ComponentId, required_components: &mut RequiredComponentsRegistrator<'_, '_>, )

Registers required components. Read more
Source§

fn clone_behavior() -> ComponentCloneBehavior

Called when registering this component, allowing to override clone function (or disable cloning altogether) for this component. Read more
Source§

fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_add ComponentHook for this Component if one is defined.
Source§

fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_insert ComponentHook for this Component if one is defined.
Source§

fn on_replace() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_replace ComponentHook for this Component if one is defined.
Source§

fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_remove ComponentHook for this Component if one is defined.
Source§

fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_despawn ComponentHook for this Component if one is defined.
Source§

fn map_entities<E>(_this: &mut Self, _mapper: &mut E)
where E: EntityMapper,

Maps the entities on this component using the given EntityMapper. This is used to remap entities in contexts like scenes and entity cloning. When deriving Component, this is populated by annotating fields containing entities with #[entities] Read more

Auto Trait Implementations§

§

impl Freeze for Chain

§

impl !RefUnwindSafe for Chain

§

impl Send for Chain

§

impl Sync for Chain

§

impl Unpin for Chain

§

impl !UnwindSafe for Chain

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<C> Bundle for C
where C: Component,

Source§

fn component_ids( components: &mut ComponentsRegistrator<'_>, ids: &mut impl FnMut(ComponentId), )

Source§

fn get_component_ids( components: &Components, ids: &mut impl FnMut(Option<ComponentId>), )

Gets this Bundle’s component ids. This will be None if the component has not been registered.
Source§

impl<C> BundleFromComponents for C
where C: Component,

Source§

unsafe fn from_components<T, F>(ctx: &mut T, func: &mut F) -> C
where F: for<'a> FnMut(&'a mut T) -> OwningPtr<'a>,

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts 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>

Converts 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)

Converts &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)

Converts &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
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<C> DynamicBundle for C
where C: Component,

Source§

type Effect = ()

An operation on the entity that happens after inserting this bundle.
Source§

unsafe fn get_components( ptr: MovingPtr<'_, C>, func: &mut impl FnMut(StorageType, OwningPtr<'_>), ) -> <C as DynamicBundle>::Effect

Moves the components out of the bundle. Read more
Source§

unsafe fn apply_effect( _ptr: MovingPtr<'_, MaybeUninit<C>>, _entity: &mut EntityWorldMut<'_>, )

Applies the after-effects of spawning this bundle. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> IntoResult<T> for T

Source§

fn into_result(self) -> Result<T, RunSystemError>

Converts this type into the system output type.
Source§

impl<A> Is for A
where A: Any,

Source§

fn is<T>() -> bool
where T: Any,

Checks if the current type “is” another type, using a TypeId equality comparison. This is most useful in the context of generic logic. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ConditionalSend for T
where T: Send,