@@ -41,9 +41,7 @@ pub trait RangeArgument<T: ?Sized> {
41
41
/// assert_eq!((3..10).start(), Included(&3));
42
42
/// # }
43
43
/// ```
44
- fn start ( & self ) -> Bound < & T > {
45
- Unbounded
46
- }
44
+ fn start ( & self ) -> Bound < & T > ;
47
45
48
46
/// End index bound
49
47
///
@@ -66,22 +64,33 @@ pub trait RangeArgument<T: ?Sized> {
66
64
/// assert_eq!((3..10).end(), Excluded(&10));
67
65
/// # }
68
66
/// ```
69
- fn end ( & self ) -> Bound < & T > {
70
- Unbounded
71
- }
67
+ fn end ( & self ) -> Bound < & T > ;
72
68
}
73
69
74
70
// FIXME add inclusive ranges to RangeArgument
75
71
76
- impl < T : ?Sized > RangeArgument < T > for RangeFull { }
72
+ impl < T : ?Sized > RangeArgument < T > for RangeFull {
73
+ fn start ( & self ) -> Bound < & T > {
74
+ Unbounded
75
+ }
76
+ fn end ( & self ) -> Bound < & T > {
77
+ Unbounded
78
+ }
79
+ }
77
80
78
81
impl < T > RangeArgument < T > for RangeFrom < T > {
79
82
fn start ( & self ) -> Bound < & T > {
80
83
Included ( & self . start )
81
84
}
85
+ fn end ( & self ) -> Bound < & T > {
86
+ Unbounded
87
+ }
82
88
}
83
89
84
90
impl < T > RangeArgument < T > for RangeTo < T > {
91
+ fn start ( & self ) -> Bound < & T > {
92
+ Unbounded
93
+ }
85
94
fn end ( & self ) -> Bound < & T > {
86
95
Excluded ( & self . end )
87
96
}
@@ -116,18 +125,10 @@ impl<T> RangeArgument<T> for (Bound<T>, Bound<T>) {
116
125
117
126
impl < ' a , T : ?Sized + ' a > RangeArgument < T > for ( Bound < & ' a T > , Bound < & ' a T > ) {
118
127
fn start ( & self ) -> Bound < & T > {
119
- match * self {
120
- ( Included ( start) , _) => Included ( start) ,
121
- ( Excluded ( start) , _) => Excluded ( start) ,
122
- ( Unbounded , _) => Unbounded ,
123
- }
128
+ self . 0
124
129
}
125
130
126
131
fn end ( & self ) -> Bound < & T > {
127
- match * self {
128
- ( _, Included ( end) ) => Included ( end) ,
129
- ( _, Excluded ( end) ) => Excluded ( end) ,
130
- ( _, Unbounded ) => Unbounded ,
131
- }
132
+ self . 1
132
133
}
133
134
}
0 commit comments