@@ -134,6 +134,12 @@ impl<Hash: Copy + Decode> Events<Hash> {
134134 self . find :: < Ev > ( ) . next ( ) . transpose ( )
135135 }
136136
137+ /// Iterate through the events using metadata to dynamically decode and skip
138+ /// them, and return the last event found which decodes to the provided `Ev` type.
139+ pub fn find_last < Ev : StaticEvent > ( & self ) -> Result < Option < Ev > , Error > {
140+ self . find :: < Ev > ( ) . last ( ) . transpose ( )
141+ }
142+
137143 /// Find an event that decodes to the type provided. Returns true if it was found.
138144 pub fn has < Ev : StaticEvent > ( & self ) -> Result < bool , Error > {
139145 Ok ( self . find :: < Ev > ( ) . next ( ) . transpose ( ) ?. is_some ( ) )
@@ -144,14 +150,14 @@ impl<Hash: Copy + Decode> Events<Hash> {
144150mod tests {
145151 use super :: * ;
146152 use crate :: {
147- scale_value:: Value ,
148153 test_utils:: {
149154 event_record, events, events_raw, metadata_with_version, SupportedMetadataVersions ,
150155 } ,
151156 Phase ,
152157 } ;
153158 use codec:: Encode ;
154159 use scale_info:: TypeInfo ;
160+ use scale_value:: Value ;
155161 use sp_core:: H256 ;
156162 use test_case:: test_case;
157163
@@ -171,25 +177,7 @@ mod tests {
171177
172178 /// Compare some actual [`RawEventDetails`] with a hand-constructed
173179 /// (probably) [`TestRawEventDetails`].
174- pub fn assert_raw_events_match (
175- // Just for convenience, pass in the metadata type constructed
176- // by the `metadata` function above to simplify caller code.
177- metadata : & Metadata ,
178- actual : EventDetails < H256 > ,
179- expected : TestRawEventDetails ,
180- ) {
181- let types = & metadata. runtime_metadata ( ) . types ;
182-
183- // Make sure that the bytes handed back line up with the fields handed back;
184- // encode the fields back into bytes and they should be equal.
185- let actual_fields = actual. field_values ( ) . expect ( "can decode field values (1)" ) ;
186- let mut actual_bytes = vec ! [ ] ;
187- for field in actual_fields. into_values ( ) {
188- crate :: scale_value:: encode_as_type ( & field, field. context , types, & mut actual_bytes)
189- . expect ( "should be able to encode properly" ) ;
190- }
191- assert_eq ! ( actual_bytes, actual. field_bytes( ) ) ;
192-
180+ pub fn assert_raw_events_match ( actual : EventDetails < H256 > , expected : TestRawEventDetails ) {
193181 let actual_fields_no_context: Vec < _ > = actual
194182 . field_values ( )
195183 . expect ( "can decode field values (2)" )
@@ -228,7 +216,6 @@ mod tests {
228216
229217 let mut event_details = events. iter ( ) ;
230218 assert_raw_events_match (
231- & metadata,
232219 event_details. next ( ) . unwrap ( ) . unwrap ( ) ,
233220 TestRawEventDetails {
234221 phase : Phase :: ApplyExtrinsic ( 123 ) ,
@@ -277,7 +264,6 @@ mod tests {
277264 let mut event_details = events. iter ( ) ;
278265
279266 assert_raw_events_match (
280- & metadata,
281267 event_details. next ( ) . unwrap ( ) . unwrap ( ) ,
282268 TestRawEventDetails {
283269 index : 0 ,
@@ -290,7 +276,6 @@ mod tests {
290276 } ,
291277 ) ;
292278 assert_raw_events_match (
293- & metadata,
294279 event_details. next ( ) . unwrap ( ) . unwrap ( ) ,
295280 TestRawEventDetails {
296281 index : 1 ,
@@ -303,7 +288,6 @@ mod tests {
303288 } ,
304289 ) ;
305290 assert_raw_events_match (
306- & metadata,
307291 event_details. next ( ) . unwrap ( ) . unwrap ( ) ,
308292 TestRawEventDetails {
309293 index : 2 ,
@@ -348,7 +332,6 @@ mod tests {
348332
349333 let mut events_iter = events. iter ( ) ;
350334 assert_raw_events_match (
351- & metadata,
352335 events_iter. next ( ) . unwrap ( ) . unwrap ( ) ,
353336 TestRawEventDetails {
354337 index : 0 ,
@@ -361,7 +344,6 @@ mod tests {
361344 } ,
362345 ) ;
363346 assert_raw_events_match (
364- & metadata,
365347 events_iter. next ( ) . unwrap ( ) . unwrap ( ) ,
366348 TestRawEventDetails {
367349 index : 1 ,
@@ -400,7 +382,6 @@ mod tests {
400382 // Dynamically decode:
401383 let mut event_details = events. iter ( ) ;
402384 assert_raw_events_match (
403- & metadata,
404385 event_details. next ( ) . unwrap ( ) . unwrap ( ) ,
405386 TestRawEventDetails {
406387 index : 0 ,
@@ -439,7 +420,6 @@ mod tests {
439420 // Dynamically decode:
440421 let mut event_details = events. iter ( ) ;
441422 assert_raw_events_match (
442- & metadata,
443423 event_details. next ( ) . unwrap ( ) . unwrap ( ) ,
444424 TestRawEventDetails {
445425 index : 0 ,
@@ -448,7 +428,7 @@ mod tests {
448428 pallet_index : 0 ,
449429 variant : "A" . to_string ( ) ,
450430 variant_index : 0 ,
451- fields : vec ! [ Value :: u128 ( 1 ) ] ,
431+ fields : vec ! [ Value :: unnamed_composite ( vec! [ Value :: u128 ( 1 ) ] ) ] ,
452432 } ,
453433 ) ;
454434 assert ! ( event_details. next( ) . is_none( ) ) ;
@@ -482,7 +462,6 @@ mod tests {
482462 // Dynamically decode:
483463 let mut event_details = events. iter ( ) ;
484464 assert_raw_events_match (
485- & metadata,
486465 event_details. next ( ) . unwrap ( ) . unwrap ( ) ,
487466 TestRawEventDetails {
488467 index : 0 ,
0 commit comments