@@ -6,13 +6,6 @@ use glib::SignalHandlerId;
6
6
7
7
use crate :: { prelude:: * , ListModel } ;
8
8
9
- #[ derive( thiserror:: Error , Debug , PartialEq , Eq ) ]
10
- #[ error( "can't downcast ListModel's items (`{actual}`) to the requested type `{requested}`" ) ]
11
- pub struct ListModelItemsTypeErr {
12
- actual : glib:: Type ,
13
- requested : glib:: Type ,
14
- }
15
-
16
9
pub trait ListModelExtManual : Sized {
17
10
// rustdoc-stripper-ignore-next
18
11
/// Get an immutable snapshot of the container inside the `ListModel`.
@@ -23,7 +16,11 @@ pub trait ListModelExtManual: Sized {
23
16
// rustdoc-stripper-ignore-next
24
17
/// If `T::static_type().is_a(self.item_type())` then it returns an iterator over the `ListModel` elements,
25
18
/// else the types are not compatible and returns an `Err(...)`.
26
- fn iter < T : IsA < glib:: Object > > ( & self ) -> Result < ListModelIter < T > , ListModelItemsTypeErr > ;
19
+ ///
20
+ /// # Panics
21
+ ///
22
+ /// Panics if `T::static_type().is_a(self.item_type())` is not true.
23
+ fn iter < T : IsA < glib:: Object > > ( & self ) -> ListModelIter < T > ;
27
24
}
28
25
29
26
impl < T : IsA < ListModel > > ListModelExtManual for T {
@@ -34,13 +31,9 @@ impl<T: IsA<ListModel>> ListModelExtManual for T {
34
31
}
35
32
res
36
33
}
37
- fn iter < LT : IsA < glib:: Object > > ( & self ) -> Result < ListModelIter < LT > , ListModelItemsTypeErr > {
38
- if !self . item_type ( ) . is_a ( LT :: static_type ( ) ) {
39
- return Err ( ListModelItemsTypeErr {
40
- actual : self . item_type ( ) ,
41
- requested : LT :: static_type ( ) ,
42
- } ) ;
43
- }
34
+
35
+ fn iter < LT : IsA < glib:: Object > > ( & self ) -> ListModelIter < LT > {
36
+ assert ! ( self . item_type( ) . is_a( LT :: static_type( ) ) ) ;
44
37
45
38
let len = self . n_items ( ) ;
46
39
let changed = Rc :: new ( Cell :: new ( false ) ) ;
@@ -52,14 +45,14 @@ impl<T: IsA<ListModel>> ListModelExtManual for T {
52
45
}
53
46
} ) ) ;
54
47
55
- Ok ( ListModelIter {
48
+ ListModelIter {
56
49
ty : Default :: default ( ) ,
57
50
i : 0 ,
58
51
reverse_pos : len,
59
52
model : self . upcast_ref ( ) ,
60
53
changed,
61
54
signal_id,
62
- } )
55
+ }
63
56
}
64
57
}
65
58
@@ -194,7 +187,6 @@ impl<'a> std::iter::IntoIterator for &'a ListModel {
194
187
195
188
fn into_iter ( self ) -> Self :: IntoIter {
196
189
self . iter ( )
197
- . expect ( "can't create a ListModelIter with the requested item type" )
198
190
}
199
191
}
200
192
@@ -210,7 +202,7 @@ fn list_model_iter_ok() {
210
202
list. append ( & m2) ;
211
203
list. append ( & m3) ;
212
204
213
- let mut iter = list. iter :: < crate :: Menu > ( ) . unwrap ( ) ;
205
+ let mut iter = list. iter :: < crate :: Menu > ( ) ;
214
206
215
207
assert_eq ! ( iter. len( ) , 3 ) ;
216
208
assert_eq ! ( iter. next( ) , Some ( Ok ( m1) ) ) ;
@@ -237,7 +229,8 @@ fn list_model_iter_err() {
237
229
list. append ( & m3) ;
238
230
list. append ( & m4) ;
239
231
240
- let mut iter = list. iter :: < crate :: Menu > ( ) . unwrap ( ) ;
232
+ let mut iter = list. iter :: < crate :: Menu > ( ) ;
233
+
241
234
assert_eq ! ( iter. next_back( ) , Some ( Ok ( m4) ) ) ;
242
235
243
236
// These two don't affect the iter
@@ -273,7 +266,7 @@ fn list_model_iter_nth() {
273
266
list. append ( & m5) ;
274
267
list. append ( & m6) ;
275
268
276
- let mut iter = list. iter :: < crate :: Menu > ( ) . unwrap ( ) ;
269
+ let mut iter = list. iter :: < crate :: Menu > ( ) ;
277
270
278
271
assert_eq ! ( iter. len( ) , 6 ) ;
279
272
assert_eq ! ( iter. nth( 1 ) , Some ( Ok ( m2) ) ) ;
@@ -296,7 +289,7 @@ fn list_model_iter_last() {
296
289
list. append ( & m2) ;
297
290
list. append ( & m3) ;
298
291
299
- let iter = list. iter :: < crate :: Menu > ( ) . unwrap ( ) ;
292
+ let iter = list. iter :: < crate :: Menu > ( ) ;
300
293
301
294
assert_eq ! ( iter. len( ) , 3 ) ;
302
295
assert_eq ! ( iter. last( ) , Some ( Ok ( m3) ) ) ;
@@ -313,7 +306,7 @@ fn list_model_iter_count() {
313
306
list. append ( & m2) ;
314
307
list. append ( & m3) ;
315
308
316
- let iter = list. iter :: < crate :: Menu > ( ) . unwrap ( ) ;
309
+ let iter = list. iter :: < crate :: Menu > ( ) ;
317
310
318
311
assert_eq ! ( iter. len( ) , 3 ) ;
319
312
assert_eq ! ( iter. count( ) , 3 ) ;
0 commit comments