Struct Schedule

Source
pub struct Schedule { /* private fields */ }
Expand description

A collection of systems, and the metadata and executor needed to run them in a certain order under certain conditions.

§Example

Here is an example of a Schedule running a “Hello world” system:

fn hello_world() { println!("Hello world!") }

fn main() {
    let mut world = World::new();
    let mut schedule = Schedule::default();
    schedule.add_systems(hello_world);

    schedule.run(&mut world);
}

A schedule can also run several systems in an ordered way:

fn system_one() { println!("System 1 works!") }
fn system_two() { println!("System 2 works!") }
fn system_three() { println!("System 3 works!") }

fn main() {
    let mut world = World::new();
    let mut schedule = Schedule::default();
    schedule.add_systems((
        system_two,
        system_one.before(system_two),
        system_three.after(system_two),
    ));

    schedule.run(&mut world);
}

Implementations§

Source§

impl Schedule

Source

pub fn new(label: impl ScheduleLabel) -> Schedule

Constructs an empty Schedule.

Examples found in repository?
examples/ecs/custom_schedule.rs (line 22)
16fn main() {
17    let mut app = App::new();
18
19    // Create a new [`Schedule`]. For demonstration purposes, we configure it to use a single threaded executor so that
20    // systems in this schedule are never run in parallel. However, this is not a requirement for custom schedules in
21    // general.
22    let mut custom_update_schedule = Schedule::new(SingleThreadedUpdate);
23    custom_update_schedule.set_executor_kind(ExecutorKind::SingleThreaded);
24
25    // Adding the schedule to the app does not automatically run the schedule. This merely registers the schedule so
26    // that systems can look it up using the `Schedules` resource.
27    app.add_schedule(custom_update_schedule);
28
29    // Bevy `App`s have a `main_schedule_label` field that configures which schedule is run by the App's `runner`.
30    // By default, this is `Main`. The `Main` schedule is responsible for running Bevy's main schedules such as
31    // `Update`, `Startup` or `Last`.
32    //
33    // We can configure the `Main` schedule to run our custom update schedule relative to the existing ones by modifying
34    // the `MainScheduleOrder` resource.
35    //
36    // Note that we modify `MainScheduleOrder` directly in `main` and not in a startup system. The reason for this is
37    // that the `MainScheduleOrder` cannot be modified from systems that are run as part of the `Main` schedule.
38    let mut main_schedule_order = app.world_mut().resource_mut::<MainScheduleOrder>();
39    main_schedule_order.insert_after(Update, SingleThreadedUpdate);
40
41    // Adding a custom startup schedule works similarly, but needs to use `insert_startup_after`
42    // instead of `insert_after`.
43    app.add_schedule(Schedule::new(CustomStartup));
44
45    let mut main_schedule_order = app.world_mut().resource_mut::<MainScheduleOrder>();
46    main_schedule_order.insert_startup_after(PreStartup, CustomStartup);
47
48    app.add_systems(SingleThreadedUpdate, single_threaded_update_system)
49        .add_systems(CustomStartup, custom_startup_system)
50        .add_systems(PreStartup, pre_startup_system)
51        .add_systems(Startup, startup_system)
52        .add_systems(First, first_system)
53        .add_systems(Update, update_system)
54        .add_systems(Last, last_system)
55        .run();
56}
Source

pub fn label(&self) -> Interned<dyn ScheduleLabel>

Get the InternedScheduleLabel for this Schedule.

Examples found in repository?
tests/ecs/ambiguity_detection.rs (line 77)
72fn count_ambiguities(sub_app: &SubApp) -> AmbiguitiesCount {
73    let schedules = sub_app.world().resource::<Schedules>();
74    let mut ambiguities = HashMap::new();
75    for (_, schedule) in schedules.iter() {
76        let ambiguities_in_schedule = schedule.graph().conflicting_systems().len();
77        ambiguities.insert(schedule.label(), ambiguities_in_schedule);
78    }
79    AmbiguitiesCount(ambiguities)
80}
Source

pub fn add_systems<M>( &mut self, systems: impl IntoSystemConfigs<M>, ) -> &mut Schedule

Add a collection of systems to the schedule.

Source

pub fn ignore_ambiguity<M1, M2, S1, S2>( &mut self, a: S1, b: S2, ) -> &mut Schedule
where S1: IntoSystemSet<M1>, S2: IntoSystemSet<M2>,

Suppress warnings and errors that would result from systems in these sets having ambiguities (conflicting access but indeterminate order) with systems in set.

Source

pub fn configure_sets( &mut self, sets: impl IntoSystemSetConfigs, ) -> &mut Schedule

Configures a collection of system sets in this schedule, adding them if they does not exist.

Source

pub fn set_build_settings( &mut self, settings: ScheduleBuildSettings, ) -> &mut Schedule

Changes miscellaneous build settings.

Examples found in repository?
tests/ecs/ambiguity_detection.rs (lines 62-67)
59fn configure_ambiguity_detection(sub_app: &mut SubApp) {
60    let mut schedules = sub_app.world_mut().resource_mut::<Schedules>();
61    for (_, schedule) in schedules.iter_mut() {
62        schedule.set_build_settings(ScheduleBuildSettings {
63            // NOTE: you can change this to `LogLevel::Ignore` to easily see the current number of ambiguities.
64            ambiguity_detection: LogLevel::Warn,
65            use_shortnames: false,
66            ..default()
67        });
68    }
69}
More examples
Hide additional examples
examples/ecs/nondeterministic_system_order.rs (lines 26-29)
20fn main() {
21    App::new()
22        // We can modify the reporting strategy for system execution order ambiguities on a per-schedule basis.
23        // You must do this for each schedule you want to inspect; child schedules executed within an inspected
24        // schedule do not inherit this modification.
25        .edit_schedule(Update, |schedule| {
26            schedule.set_build_settings(ScheduleBuildSettings {
27                ambiguity_detection: LogLevel::Warn,
28                ..default()
29            });
30        })
31        .init_resource::<A>()
32        .init_resource::<B>()
33        .add_systems(
34            Update,
35            (
36                // This pair of systems has an ambiguous order,
37                // as their data access conflicts, and there's no order between them.
38                reads_a,
39                writes_a,
40                // This pair of systems has conflicting data access,
41                // but it's resolved with an explicit ordering:
42                // the .after relationship here means that we will always double after adding.
43                adds_one_to_b,
44                doubles_b.after(adds_one_to_b),
45                // This system isn't ambiguous with adds_one_to_b,
46                // due to the transitive ordering created by our constraints:
47                // if A is before B is before C, then A must be before C as well.
48                reads_b.after(doubles_b),
49                // This system will conflict with all of our writing systems
50                // but we've silenced its ambiguity with adds_one_to_b.
51                // This should only be done in the case of clear false positives:
52                // leave a comment in your code justifying the decision!
53                reads_a_and_b.ambiguous_with(adds_one_to_b),
54            ),
55        )
56        // Be mindful, internal ambiguities are reported too!
57        // If there are any ambiguities due solely to DefaultPlugins,
58        // or between DefaultPlugins and any of your third party plugins,
59        // please file a bug with the repo responsible!
60        // Only *you* can prevent nondeterministic bugs due to greedy parallelism.
61        .add_plugins(DefaultPlugins)
62        .run();
63}
Source

pub fn get_build_settings(&self) -> ScheduleBuildSettings

Returns the schedule’s current ScheduleBuildSettings.

Source

pub fn get_executor_kind(&self) -> ExecutorKind

Returns the schedule’s current execution strategy.

Source

pub fn set_executor_kind(&mut self, executor: ExecutorKind) -> &mut Schedule

Sets the schedule’s execution strategy.

Examples found in repository?
examples/ecs/custom_schedule.rs (line 23)
16fn main() {
17    let mut app = App::new();
18
19    // Create a new [`Schedule`]. For demonstration purposes, we configure it to use a single threaded executor so that
20    // systems in this schedule are never run in parallel. However, this is not a requirement for custom schedules in
21    // general.
22    let mut custom_update_schedule = Schedule::new(SingleThreadedUpdate);
23    custom_update_schedule.set_executor_kind(ExecutorKind::SingleThreaded);
24
25    // Adding the schedule to the app does not automatically run the schedule. This merely registers the schedule so
26    // that systems can look it up using the `Schedules` resource.
27    app.add_schedule(custom_update_schedule);
28
29    // Bevy `App`s have a `main_schedule_label` field that configures which schedule is run by the App's `runner`.
30    // By default, this is `Main`. The `Main` schedule is responsible for running Bevy's main schedules such as
31    // `Update`, `Startup` or `Last`.
32    //
33    // We can configure the `Main` schedule to run our custom update schedule relative to the existing ones by modifying
34    // the `MainScheduleOrder` resource.
35    //
36    // Note that we modify `MainScheduleOrder` directly in `main` and not in a startup system. The reason for this is
37    // that the `MainScheduleOrder` cannot be modified from systems that are run as part of the `Main` schedule.
38    let mut main_schedule_order = app.world_mut().resource_mut::<MainScheduleOrder>();
39    main_schedule_order.insert_after(Update, SingleThreadedUpdate);
40
41    // Adding a custom startup schedule works similarly, but needs to use `insert_startup_after`
42    // instead of `insert_after`.
43    app.add_schedule(Schedule::new(CustomStartup));
44
45    let mut main_schedule_order = app.world_mut().resource_mut::<MainScheduleOrder>();
46    main_schedule_order.insert_startup_after(PreStartup, CustomStartup);
47
48    app.add_systems(SingleThreadedUpdate, single_threaded_update_system)
49        .add_systems(CustomStartup, custom_startup_system)
50        .add_systems(PreStartup, pre_startup_system)
51        .add_systems(Startup, startup_system)
52        .add_systems(First, first_system)
53        .add_systems(Update, update_system)
54        .add_systems(Last, last_system)
55        .run();
56}
Source

pub fn set_apply_final_deferred( &mut self, apply_final_deferred: bool, ) -> &mut Schedule

Set whether the schedule applies deferred system buffers on final time or not. This is a catch-all in case a system uses commands but was not explicitly ordered before an instance of apply_deferred. By default this setting is true, but may be disabled if needed.

Source

pub fn run(&mut self, world: &mut World)

Runs all systems in this schedule on the world, using its current execution strategy.

Source

pub fn initialize( &mut self, world: &mut World, ) -> Result<(), ScheduleBuildError>

Initializes any newly-added systems and conditions, rebuilds the executable schedule, and re-initializes the executor.

Moves all systems and run conditions out of the ScheduleGraph.

Source

pub fn graph(&self) -> &ScheduleGraph

Returns the ScheduleGraph.

Examples found in repository?
tests/ecs/ambiguity_detection.rs (line 76)
72fn count_ambiguities(sub_app: &SubApp) -> AmbiguitiesCount {
73    let schedules = sub_app.world().resource::<Schedules>();
74    let mut ambiguities = HashMap::new();
75    for (_, schedule) in schedules.iter() {
76        let ambiguities_in_schedule = schedule.graph().conflicting_systems().len();
77        ambiguities.insert(schedule.label(), ambiguities_in_schedule);
78    }
79    AmbiguitiesCount(ambiguities)
80}
Source

pub fn graph_mut(&mut self) -> &mut ScheduleGraph

Returns a mutable reference to the ScheduleGraph.

Source

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

Directly applies any accumulated Deferred system parameters (like Commands) to the world.

Like always, deferred system parameters are applied in the “topological sort order” of the schedule graph. As a result, buffers from one system are only guaranteed to be applied before those of other systems if there is an explicit system ordering between the two systems.

This is used in rendering to extract data from the main world, storing the data in system buffers, before applying their buffers in a different world.

Source

pub fn systems( &self, ) -> Result<impl Iterator<Item = (NodeId, &Box<dyn System<In = (), Out = ()>>)>, ScheduleNotInitialized>

Returns an iterator over all systems in this schedule.

Note: this method will return ScheduleNotInitialized if the schedule has never been initialized or run.

Examples found in repository?
examples/games/stepping.rs (line 128)
99fn build_ui(
100    mut commands: Commands,
101    asset_server: Res<AssetServer>,
102    schedules: Res<Schedules>,
103    mut stepping: ResMut<Stepping>,
104    mut state: ResMut<State>,
105) {
106    let mut text_spans = Vec::new();
107    let mut always_run = Vec::new();
108
109    let Ok(schedule_order) = stepping.schedules() else {
110        return;
111    };
112
113    // go through the stepping schedules and construct a list of systems for
114    // each label
115    for label in schedule_order {
116        let schedule = schedules.get(*label).unwrap();
117        text_spans.push((
118            TextSpan(format!("{label:?}\n")),
119            TextFont {
120                font: asset_server.load(FONT_BOLD),
121                ..default()
122            },
123            TextColor(FONT_COLOR),
124        ));
125
126        // grab the list of systems in the schedule, in the order the
127        // single-threaded executor would run them.
128        let Ok(systems) = schedule.systems() else {
129            return;
130        };
131
132        for (node_id, system) in systems {
133            // skip bevy default systems; we don't want to step those
134            if system.name().starts_with("bevy") {
135                always_run.push((*label, node_id));
136                continue;
137            }
138
139            // Add an entry to our systems list so we can find where to draw
140            // the cursor when the stepping cursor is at this system
141            // we add plus 1 to account for the empty root span
142            state.systems.push((*label, node_id, text_spans.len() + 1));
143
144            // Add a text section for displaying the cursor for this system
145            text_spans.push((
146                TextSpan::new("   "),
147                TextFont::default(),
148                TextColor(FONT_COLOR),
149            ));
150
151            // add the name of the system to the ui
152            text_spans.push((
153                TextSpan(format!("{}\n", system.name())),
154                TextFont::default(),
155                TextColor(FONT_COLOR),
156            ));
157        }
158    }
159
160    for (label, node) in always_run.drain(..) {
161        stepping.always_run_node(label, node);
162    }
163
164    commands
165        .spawn((
166            Text::default(),
167            SteppingUi,
168            Node {
169                position_type: PositionType::Absolute,
170                top: state.ui_top,
171                left: state.ui_left,
172                padding: UiRect::all(Val::Px(10.0)),
173                ..default()
174            },
175            BackgroundColor(Color::srgba(1.0, 1.0, 1.0, 0.33)),
176            Visibility::Hidden,
177        ))
178        .with_children(|p| {
179            for span in text_spans {
180                p.spawn(span);
181            }
182        });
183}
Source

pub fn systems_len(&self) -> usize

Returns the number of systems in this schedule.

Trait Implementations§

Source§

impl Default for Schedule

Source§

fn default() -> Schedule

Creates a schedule with a default label. Only use in situations where you don’t care about the ScheduleLabel. Inserting a default schedule into the world risks overwriting another schedule. For most situations you should use Schedule::new.

Auto Trait Implementations§

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, U> AsBindGroupShaderType<U> for T
where U: ShaderType, &'a T: for<'a> Into<U>,

Source§

fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U

Return the T ShaderType for self. When used in AsBindGroup derives, it is safe to assume that all images in self exist.
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<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

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

Source§

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

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.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

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.
Source§

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.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

Source§

impl<T> FromWorld for T
where T: Default,

Source§

fn from_world(_world: &mut World) -> T

Creates Self using default().

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<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T> NoneValue for T
where T: Default,

Source§

type NoneType = T

Source§

fn null_value() -> T

The none-equivalent value.
Source§

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

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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,

Source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

impl<T> Settings for T
where T: 'static + Send + Sync,

Source§

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

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,