@@ -129,8 +129,8 @@ impl<T> Response<T> {
129
129
///
130
130
/// The `wasm-` prefix will be appended by the runtime to the provided type
131
131
/// 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 ( ) ) ;
134
134
self
135
135
}
136
136
@@ -219,8 +219,11 @@ impl<T> Response<T> {
219
219
///
220
220
/// The `wasm-` prefix will be appended by the runtime to the provided types
221
221
/// 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 ( ) ) ) ;
224
227
self
225
228
}
226
229
@@ -331,4 +334,38 @@ mod tests {
331
334
assert ! ( failure. is_err( ) ) ;
332
335
assert ! ( !success. is_err( ) ) ;
333
336
}
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
+ }
334
371
}
0 commit comments