pub struct EventWriter<'w, E>where
E: Event,{ /* private fields */ }
Expand description
Sends events of type T
.
§Usage
EventWriter
s are usually declared as a SystemParam
.
#[derive(Event)]
pub struct MyEvent; // Custom event type.
fn my_system(mut writer: EventWriter<MyEvent>) {
writer.write(MyEvent);
}
§Observers
“Buffered” Events, such as those sent directly in Events
or written using EventWriter
, do not automatically
trigger any Observer
s watching for that event, as each Event
has different requirements regarding if it will
be triggered, and if so, when it will be triggered in the schedule.
§Concurrency
EventWriter
param has ResMut<Events<T>>
inside. So two systems declaring EventWriter<T>
params
for the same event type won’t be executed concurrently.
§Untyped events
EventWriter
can only write events of one specific type, which must be known at compile-time.
This is not a problem most of the time, but you may find a situation where you cannot know
ahead of time every kind of event you’ll need to send. In this case, you can use the “type-erased event” pattern.
fn send_untyped(mut commands: Commands) {
// Send an event of a specific type without having to declare that
// type as a SystemParam.
//
// Effectively, we're just moving the type parameter from the /type/ to the /method/,
// which allows one to do all kinds of clever things with type erasure, such as sending
// custom events to unknown 3rd party plugins (modding API).
//
// NOTE: the event won't actually be sent until commands get applied during
// apply_deferred.
commands.queue(|w: &mut World| {
w.send_event(MyEvent);
});
}
Note that this is considered non-idiomatic, and should only be used when EventWriter
will not work.
Implementations§
Source§impl<'w, E> EventWriter<'w, E>where
E: Event,
impl<'w, E> EventWriter<'w, E>where
E: Event,
Sourcepub fn write(&mut self, event: E) -> EventId<E>
pub fn write(&mut self, event: E) -> EventId<E>
Writes an event
, which can later be read by EventReader
s.
This method returns the ID of the written event
.
See Events
for details.
Examples found in repository?
59fn read_and_write_different_event_types(mut a: EventWriter<A>, mut b: EventReader<B>) {
60 for _ in b.read() {}
61 a.write(A);
62}
63
64/// A dummy event type.
65#[derive(Debug, Clone, Event)]
66struct DebugEvent {
67 resend_from_param_set: bool,
68 resend_from_local_event_reader: bool,
69 times_sent: u8,
70}
71
72/// A system that sends all combinations of events.
73fn send_events(mut events: EventWriter<DebugEvent>, frame_count: Res<FrameCount>) {
74 println!("Sending events for frame {}", frame_count.0);
75
76 events.write(DebugEvent {
77 resend_from_param_set: false,
78 resend_from_local_event_reader: false,
79 times_sent: 1,
80 });
81 events.write(DebugEvent {
82 resend_from_param_set: true,
83 resend_from_local_event_reader: false,
84 times_sent: 1,
85 });
86 events.write(DebugEvent {
87 resend_from_param_set: false,
88 resend_from_local_event_reader: true,
89 times_sent: 1,
90 });
91 events.write(DebugEvent {
92 resend_from_param_set: true,
93 resend_from_local_event_reader: true,
94 times_sent: 1,
95 });
96}
97
98/// A system that prints all events sent since the last time this system ran.
99///
100/// Note that some events will be printed twice, because they were sent twice.
101fn debug_events(mut events: EventReader<DebugEvent>) {
102 for event in events.read() {
103 println!("{event:?}");
104 }
105}
106
107/// A system that both sends and receives events using [`ParamSet`].
108fn send_and_receive_param_set(
109 mut param_set: ParamSet<(EventReader<DebugEvent>, EventWriter<DebugEvent>)>,
110 frame_count: Res<FrameCount>,
111) {
112 println!(
113 "Sending and receiving events for frame {} with a `ParamSet`",
114 frame_count.0
115 );
116
117 // We must collect the events to resend, because we can't access the writer while we're iterating over the reader.
118 let mut events_to_resend = Vec::new();
119
120 // This is p0, as the first parameter in the `ParamSet` is the reader.
121 for event in param_set.p0().read() {
122 if event.resend_from_param_set {
123 events_to_resend.push(event.clone());
124 }
125 }
126
127 // This is p1, as the second parameter in the `ParamSet` is the writer.
128 for mut event in events_to_resend {
129 event.times_sent += 1;
130 param_set.p1().write(event);
131 }
132}
More examples
40fn deal_damage_over_time(
41 time: Res<Time>,
42 mut state: ResMut<DamageTimer>,
43 mut events: EventWriter<DealDamage>,
44) {
45 if state.tick(time.delta()).finished() {
46 // Events can be sent with 'write' and constructed just like any other object.
47 events.write(DealDamage { amount: 10 });
48 }
49}
50
51// This system mutates the 'DealDamage' events to apply some armor value
52// It also sends an 'ArmorBlockedDamage' event if the value of 'DealDamage' is zero
53//
54// Events are mutated using an 'EventMutator<T>' by calling 'read'. This returns an iterator
55// over all the &mut T that this system has not read yet. Note, you can have multiple
56// 'EventReader', 'EventWriter', and 'EventMutator' in a given system, as long as the types (T) are different.
57fn apply_armor_to_damage(
58 mut dmg_events: EventMutator<DealDamage>,
59 mut armor_events: EventWriter<ArmorBlockedDamage>,
60) {
61 for event in dmg_events.read() {
62 event.amount -= 1;
63 if event.amount <= 0 {
64 // Zero-sized events can also be sent with 'send'
65 armor_events.write(ArmorBlockedDamage);
66 }
67 }
68}
164fn game_over_system(
165 game_rules: Res<GameRules>,
166 game_state: Res<GameState>,
167 mut app_exit_events: EventWriter<AppExit>,
168) {
169 if let Some(ref player) = game_state.winning_player {
170 println!("{player} won the game!");
171 app_exit_events.write(AppExit::Success);
172 } else if game_state.current_round == game_rules.max_rounds {
173 println!("Ran out of rounds. Nobody wins!");
174 app_exit_events.write(AppExit::Success);
175 }
176}
165pub fn handle_ui_interactions<T>(
166 mut interactions: Query<
167 (&Interaction, &WidgetClickSender<T>),
168 (With<Button>, With<RadioButton>),
169 >,
170 mut widget_click_events: EventWriter<WidgetClickEvent<T>>,
171) where
172 T: Clone + Send + Sync + 'static,
173{
174 for (interaction, click_event) in interactions.iter_mut() {
175 if *interaction == Interaction::Pressed {
176 widget_click_events.write(WidgetClickEvent((**click_event).clone()));
177 }
178 }
179}
Sourcepub fn write_batch(
&mut self,
events: impl IntoIterator<Item = E>,
) -> SendBatchIds<E> ⓘ
pub fn write_batch( &mut self, events: impl IntoIterator<Item = E>, ) -> SendBatchIds<E> ⓘ
Sends a list of events
all at once, which can later be read by EventReader
s.
This is more efficient than sending each event individually.
This method returns the IDs of the written events
.
See Events
for details.
Sourcepub fn write_default(&mut self) -> EventId<E>where
E: Default,
pub fn write_default(&mut self) -> EventId<E>where
E: Default,
Writes the default value of the event. Useful when the event is an empty struct.
This method returns the ID of the written event
.
See Events
for details.
Examples found in repository?
76fn apply_damage_to_health(
77 mut dmg_events: EventReader<DealDamage>,
78 mut rcvd_events: EventWriter<DamageReceived>,
79) {
80 for event in dmg_events.read() {
81 info!("Applying {} damage", event.amount);
82 if event.amount > 0 {
83 // Events with a 'Default' implementation can be written with 'write_default'
84 rcvd_events.write_default();
85 }
86 }
87}
More examples
340fn check_for_collisions(
341 mut commands: Commands,
342 mut score: ResMut<Score>,
343 ball_query: Single<(&mut Velocity, &Transform), With<Ball>>,
344 collider_query: Query<(Entity, &Transform, Option<&Brick>), With<Collider>>,
345 mut collision_events: EventWriter<CollisionEvent>,
346) {
347 let (mut ball_velocity, ball_transform) = ball_query.into_inner();
348
349 for (collider_entity, collider_transform, maybe_brick) in &collider_query {
350 let collision = ball_collision(
351 BoundingCircle::new(ball_transform.translation.truncate(), BALL_DIAMETER / 2.),
352 Aabb2d::new(
353 collider_transform.translation.truncate(),
354 collider_transform.scale.truncate() / 2.,
355 ),
356 );
357
358 if let Some(collision) = collision {
359 // Writes a collision event so that other systems can react to the collision
360 collision_events.write_default();
361
362 // Bricks should be despawned and increment the scoreboard on collision
363 if maybe_brick.is_some() {
364 commands.entity(collider_entity).despawn();
365 **score += 1;
366 }
367
368 // Reflect the ball's velocity when it collides
369 let mut reflect_x = false;
370 let mut reflect_y = false;
371
372 // Reflect only if the velocity is in the opposite direction of the collision
373 // This prevents the ball from getting stuck inside the bar
374 match collision {
375 Collision::Left => reflect_x = ball_velocity.x > 0.0,
376 Collision::Right => reflect_x = ball_velocity.x < 0.0,
377 Collision::Top => reflect_y = ball_velocity.y < 0.0,
378 Collision::Bottom => reflect_y = ball_velocity.y > 0.0,
379 }
380
381 // Reflect velocity on the x-axis if we hit something on the x-axis
382 if reflect_x {
383 ball_velocity.x = -ball_velocity.x;
384 }
385
386 // Reflect velocity on the y-axis if we hit something on the y-axis
387 if reflect_y {
388 ball_velocity.y = -ball_velocity.y;
389 }
390 }
391 }
392}
Sourcepub fn send(&mut self, event: E) -> EventId<E>
👎Deprecated since 0.16.0: Use EventWriter::write
instead.
pub fn send(&mut self, event: E) -> EventId<E>
EventWriter::write
instead.Sends an event
, which can later be read by EventReader
s.
This method returns the ID of the sent event
.
See Events
for details.
Sourcepub fn send_batch(
&mut self,
events: impl IntoIterator<Item = E>,
) -> SendBatchIds<E> ⓘ
👎Deprecated since 0.16.0: Use EventWriter::write_batch
instead.
pub fn send_batch( &mut self, events: impl IntoIterator<Item = E>, ) -> SendBatchIds<E> ⓘ
EventWriter::write_batch
instead.Sends a list of events
all at once, which can later be read by EventReader
s.
This is more efficient than sending each event individually.
This method returns the IDs of the sent events
.
See Events
for details.
Trait Implementations§
Source§impl<E> SystemParam for EventWriter<'_, E>where
E: Event,
impl<E> SystemParam for EventWriter<'_, E>where
E: Event,
Source§type Item<'w, 's> = EventWriter<'w, E>
type Item<'w, 's> = EventWriter<'w, E>
Self
, instantiated with new lifetimes. Read moreSource§fn init_state(
world: &mut World,
system_meta: &mut SystemMeta,
) -> <EventWriter<'_, E> as SystemParam>::State
fn init_state( world: &mut World, system_meta: &mut SystemMeta, ) -> <EventWriter<'_, E> as SystemParam>::State
World
access used by this SystemParam
and creates a new instance of this param’s State
.Source§unsafe fn new_archetype(
state: &mut <EventWriter<'_, E> as SystemParam>::State,
archetype: &Archetype,
system_meta: &mut SystemMeta,
)
unsafe fn new_archetype( state: &mut <EventWriter<'_, E> as SystemParam>::State, archetype: &Archetype, system_meta: &mut SystemMeta, )
Archetype
, registers the components accessed by this SystemParam
(if applicable).a Read moreSource§fn apply(
state: &mut <EventWriter<'_, E> as SystemParam>::State,
system_meta: &SystemMeta,
world: &mut World,
)
fn apply( state: &mut <EventWriter<'_, E> as SystemParam>::State, system_meta: &SystemMeta, world: &mut World, )
SystemParam
’s state.
This is used to apply Commands
during ApplyDeferred
.Source§fn queue(
state: &mut <EventWriter<'_, E> as SystemParam>::State,
system_meta: &SystemMeta,
world: DeferredWorld<'_>,
)
fn queue( state: &mut <EventWriter<'_, E> as SystemParam>::State, system_meta: &SystemMeta, world: DeferredWorld<'_>, )
ApplyDeferred
.Source§unsafe fn validate_param<'w, 's>(
state: &'s <EventWriter<'_, E> as SystemParam>::State,
_system_meta: &SystemMeta,
_world: UnsafeWorldCell<'w>,
) -> Result<(), SystemParamValidationError>
unsafe fn validate_param<'w, 's>( state: &'s <EventWriter<'_, E> as SystemParam>::State, _system_meta: &SystemMeta, _world: UnsafeWorldCell<'w>, ) -> Result<(), SystemParamValidationError>
Source§unsafe fn get_param<'w, 's>(
state: &'s mut <EventWriter<'_, E> as SystemParam>::State,
system_meta: &SystemMeta,
world: UnsafeWorldCell<'w>,
change_tick: Tick,
) -> <EventWriter<'_, E> as SystemParam>::Item<'w, 's>
unsafe fn get_param<'w, 's>( state: &'s mut <EventWriter<'_, E> as SystemParam>::State, system_meta: &SystemMeta, world: UnsafeWorldCell<'w>, change_tick: Tick, ) -> <EventWriter<'_, E> as SystemParam>::Item<'w, 's>
SystemParamFunction
. Read moreimpl<'w, 's, E> ReadOnlySystemParam for EventWriter<'w, E>
Auto Trait Implementations§
impl<'w, E> Freeze for EventWriter<'w, E>
impl<'w, E> RefUnwindSafe for EventWriter<'w, E>where
E: RefUnwindSafe,
impl<'w, E> Send for EventWriter<'w, E>
impl<'w, E> Sync for EventWriter<'w, E>
impl<'w, E> Unpin for EventWriter<'w, E>
impl<'w, E> !UnwindSafe for EventWriter<'w, E>
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.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<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> 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>
. 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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
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> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
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<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.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
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.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
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.