@@ -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,40 @@ 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
+ // allow define `into` rather than `from` to define `into` clearly
345
+ #[ allow( clippy:: from_over_into) ]
346
+ impl Into < Event > for OurEvent {
347
+ fn into ( self ) -> Event {
348
+ Event :: new ( "our_event" ) . add_attribute ( "msg" , self . msg )
349
+ }
350
+ }
351
+
352
+ #[ test]
353
+ fn add_event_takes_into_event ( ) {
354
+ let msg = "message" . to_string ( ) ;
355
+ let our_event = OurEvent { msg } ;
356
+ let event: Event = our_event. clone ( ) . into ( ) ;
357
+ let actual = Response :: < Empty > :: new ( ) . add_event ( our_event) ;
358
+ let expected = Response :: < Empty > :: new ( ) . add_event ( event) ;
359
+ assert_eq ! ( expected, actual) ;
360
+ }
361
+
362
+ #[ test]
363
+ fn add_events_takes_into_event ( ) {
364
+ let msg1 = "foo" . to_string ( ) ;
365
+ let msg2 = "bare" . to_string ( ) ;
366
+ let our_event1 = OurEvent { msg : msg1 } ;
367
+ let our_event2 = OurEvent { msg : msg2 } ;
368
+ let events: Vec < Event > = vec ! [ our_event1. clone( ) . into( ) , our_event2. clone( ) . into( ) ] ;
369
+ let actual = Response :: < Empty > :: new ( ) . add_events ( [ our_event1, our_event2] ) ;
370
+ let expected = Response :: < Empty > :: new ( ) . add_events ( events) ;
371
+ assert_eq ! ( expected, actual) ;
372
+ }
334
373
}
0 commit comments