Skip to content

Commit 814acdf

Browse files
committed
enable add_event and add_events to take type with into<Event>
1 parent 9a23983 commit 814acdf

File tree

1 file changed

+41
-4
lines changed

1 file changed

+41
-4
lines changed

packages/std/src/results/response.rs

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,8 @@ impl<T> Response<T> {
129129
///
130130
/// The `wasm-` prefix will be appended by the runtime to the provided type
131131
/// of event.
132-
pub fn add_event(mut self, event: Event) -> Self {
133-
self.events.push(event);
132+
pub fn add_event(mut self, event: impl Into<Event>) -> Self {
133+
self.events.push(event.into());
134134
self
135135
}
136136

@@ -219,8 +219,11 @@ impl<T> Response<T> {
219219
///
220220
/// The `wasm-` prefix will be appended by the runtime to the provided types
221221
/// of events.
222-
pub fn add_events(mut self, events: impl IntoIterator<Item = Event>) -> Self {
223-
self.events.extend(events);
222+
pub fn add_events<E>(mut self, events: impl IntoIterator<Item = E>) -> Self
223+
where
224+
E: Into<Event>,
225+
{
226+
self.events.extend(events.into_iter().map(|e| e.into()));
224227
self
225228
}
226229

@@ -331,4 +334,38 @@ mod tests {
331334
assert!(failure.is_err());
332335
assert!(!success.is_err());
333336
}
337+
338+
// struct implements `into<Event>`
339+
#[derive(Clone)]
340+
struct OurEvent {
341+
msg: String,
342+
}
343+
344+
impl Into<Event> for OurEvent {
345+
fn into(self) -> Event {
346+
Event::new("our_event").add_attribute("msg", self.msg)
347+
}
348+
}
349+
350+
#[test]
351+
fn add_event_takes_into_event() {
352+
let msg = "message".to_string();
353+
let our_event = OurEvent { msg };
354+
let event: Event = our_event.clone().into();
355+
let actual = Response::<Empty>::new().add_event(our_event);
356+
let expected = Response::<Empty>::new().add_event(event);
357+
assert_eq!(expected, actual);
358+
}
359+
360+
#[test]
361+
fn add_events_takes_into_event() {
362+
let msg1 = "foo".to_string();
363+
let msg2 = "bare".to_string();
364+
let our_event1 = OurEvent { msg: msg1 };
365+
let our_event2 = OurEvent { msg: msg2 };
366+
let events: Vec<Event> = vec![our_event1.clone().into(), our_event2.clone().into()];
367+
let actual = Response::<Empty>::new().add_events([our_event1, our_event2]);
368+
let expected = Response::<Empty>::new().add_events(events);
369+
assert_eq!(expected, actual);
370+
}
334371
}

0 commit comments

Comments
 (0)