Skip to content

Commit 86ce973

Browse files
committed
gloo_event: Take events by reference
`wasm-bindgen` previously did not support closures with arguments by reference, but now it has some initial support. Let's use it!
1 parent b6b73ad commit 86ce973

File tree

2 files changed

+17
-17
lines changed

2 files changed

+17
-17
lines changed

crates/events/src/lib.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ thread_local! {
230230
pub struct EventListener {
231231
target: EventTarget,
232232
event_type: Cow<'static, str>,
233-
callback: Option<Closure<FnMut(Event)>>,
233+
callback: Option<Closure<FnMut(&Event)>>,
234234
phase: EventListenerPhase,
235235
}
236236

@@ -239,7 +239,7 @@ impl EventListener {
239239
fn raw_new(
240240
target: &EventTarget,
241241
event_type: Cow<'static, str>,
242-
callback: Closure<FnMut(Event)>,
242+
callback: Closure<FnMut(&Event)>,
243243
options: &AddEventListenerOptions,
244244
phase: EventListenerPhase,
245245
) -> Self {
@@ -283,7 +283,7 @@ impl EventListener {
283283
/// # use gloo_events::{EventListener, EventListenerOptions};
284284
/// # let target = unimplemented!();
285285
/// # let event_type = "click";
286-
/// # let callback = move |e| {};
286+
/// # fn callback(_: &web_sys::Event) {}
287287
/// #
288288
/// let options = EventListenerOptions::enable_prevent_default();
289289
///
@@ -302,7 +302,7 @@ impl EventListener {
302302
/// # use gloo_events::{EventListener, EventListenerOptions};
303303
/// # let target = unimplemented!();
304304
/// # let event_type = "click";
305-
/// # let callback = move |e| {};
305+
/// # fn callback(_: &web_sys::Event) {}
306306
/// #
307307
/// // This runs the event listener in the capture phase, rather than the bubble phase
308308
/// let options = EventListenerOptions::run_in_capture_phase();
@@ -322,7 +322,7 @@ impl EventListener {
322322
/// # let target = unimplemented!();
323323
/// #
324324
/// let listener = EventListener::new(&target, "click", move |event| {
325-
/// let event = event.dyn_into::<web_sys::MouseEvent>().unwrap_throw();
325+
/// let event = event.dyn_ref::<web_sys::MouseEvent>().unwrap_throw();
326326
///
327327
/// // ...
328328
/// });
@@ -331,9 +331,9 @@ impl EventListener {
331331
pub fn new<S, F>(target: &EventTarget, event_type: S, callback: F) -> Self
332332
where
333333
S: Into<Cow<'static, str>>,
334-
F: FnMut(Event) + 'static,
334+
F: FnMut(&Event) + 'static,
335335
{
336-
let callback = Closure::wrap(Box::new(callback) as Box<FnMut(Event)>);
336+
let callback = Closure::wrap(Box::new(callback) as Box<FnMut(&Event)>);
337337

338338
NEW_OPTIONS.with(move |options| {
339339
Self::raw_new(
@@ -362,7 +362,7 @@ impl EventListener {
362362
/// # let target = unimplemented!();
363363
/// #
364364
/// let listener = EventListener::once(&target, "load", move |event| {
365-
/// let event = event.dyn_into::<web_sys::ProgressEvent>().unwrap_throw();
365+
/// let event = event.dyn_ref::<web_sys::ProgressEvent>().unwrap_throw();
366366
///
367367
/// // ...
368368
/// });
@@ -371,7 +371,7 @@ impl EventListener {
371371
pub fn once<S, F>(target: &EventTarget, event_type: S, callback: F) -> Self
372372
where
373373
S: Into<Cow<'static, str>>,
374-
F: FnOnce(Event) + 'static,
374+
F: FnOnce(&Event) + 'static,
375375
{
376376
let callback = Closure::once(callback);
377377

@@ -450,9 +450,9 @@ impl EventListener {
450450
) -> Self
451451
where
452452
S: Into<Cow<'static, str>>,
453-
F: FnMut(Event) + 'static,
453+
F: FnMut(&Event) + 'static,
454454
{
455-
let callback = Closure::wrap(Box::new(callback) as Box<FnMut(Event)>);
455+
let callback = Closure::wrap(Box::new(callback) as Box<FnMut(&Event)>);
456456

457457
Self::raw_new(
458458
target,
@@ -514,7 +514,7 @@ impl EventListener {
514514
) -> Self
515515
where
516516
S: Into<Cow<'static, str>>,
517-
F: FnOnce(Event) + 'static,
517+
F: FnOnce(&Event) + 'static,
518518
{
519519
let callback = Closure::once(callback);
520520

@@ -551,7 +551,7 @@ impl EventListener {
551551

552552
/// Returns the callback.
553553
#[inline]
554-
pub fn callback(&self) -> &Closure<FnMut(Event)> {
554+
pub fn callback(&self) -> &Closure<FnMut(&Event)> {
555555
// This will never panic, because `callback` is always `Some`
556556
self.callback.as_ref().unwrap_throw()
557557
}

crates/events/tests/web.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ fn new_with_options() -> impl Future<Item = (), Error = JsValue> {
8484
},
8585
move |e| {
8686
sender.send(|| {
87-
is(e.dyn_into::<web_sys::MouseEvent>().is_ok(), true)?;
87+
is(e.dyn_ref::<web_sys::MouseEvent>().is_some(), true)?;
8888

8989
Ok(())
9090
});
@@ -111,7 +111,7 @@ fn once_with_options() -> impl Future<Item = (), Error = JsValue> {
111111
},
112112
move |e| {
113113
sender.send(|| {
114-
is(e.dyn_into::<web_sys::MouseEvent>().is_ok(), true)?;
114+
is(e.dyn_ref::<web_sys::MouseEvent>().is_some(), true)?;
115115

116116
Ok(())
117117
});
@@ -131,7 +131,7 @@ fn new() -> impl Future<Item = (), Error = JsValue> {
131131

132132
let _handler = EventListener::new(&body, "click", move |e| {
133133
sender.send(|| {
134-
is(e.dyn_into::<web_sys::MouseEvent>().is_ok(), true)?;
134+
is(e.dyn_ref::<web_sys::MouseEvent>().is_some(), true)?;
135135

136136
Ok(())
137137
});
@@ -150,7 +150,7 @@ fn once() -> impl Future<Item = (), Error = JsValue> {
150150

151151
let _handler = EventListener::once(&body, "click", move |e| {
152152
sender.send(|| {
153-
is(e.dyn_into::<web_sys::MouseEvent>().is_ok(), true)?;
153+
is(e.dyn_ref::<web_sys::MouseEvent>().is_some(), true)?;
154154

155155
Ok(())
156156
});

0 commit comments

Comments
 (0)