@@ -155,11 +155,6 @@ with_api!(self, declare_tags);
155155trait Mark {
156156 type Unmarked ;
157157 fn mark ( unmarked : Self :: Unmarked ) -> Self ;
158- }
159-
160- /// Unwrap types wrapped by `Mark::mark` (see `Mark` for details).
161- trait Unmark {
162- type Unmarked ;
163158 fn unmark ( self ) -> Self :: Unmarked ;
164159}
165160
@@ -174,15 +169,15 @@ impl<T, M> Mark for Marked<T, M> {
174169 fn mark ( unmarked : Self :: Unmarked ) -> Self {
175170 Marked { value : unmarked, _marker : marker:: PhantomData }
176171 }
177- }
178- impl < T , M > Unmark for Marked < T , M > {
179- type Unmarked = T ;
180172 fn unmark ( self ) -> Self :: Unmarked {
181173 self . value
182174 }
183175}
184- impl < ' a , T , M > Unmark for & ' a Marked < T , M > {
176+ impl < ' a , T , M > Mark for & ' a Marked < T , M > {
185177 type Unmarked = & ' a T ;
178+ fn mark ( _: Self :: Unmarked ) -> Self {
179+ unreachable ! ( )
180+ }
186181 fn unmark ( self ) -> Self :: Unmarked {
187182 & self . value
188183 }
@@ -194,9 +189,6 @@ impl<T: Mark> Mark for Vec<T> {
194189 // Should be a no-op due to std's in-place collect optimizations.
195190 unmarked. into_iter ( ) . map ( T :: mark) . collect ( )
196191 }
197- }
198- impl < T : Unmark > Unmark for Vec < T > {
199- type Unmarked = Vec < T :: Unmarked > ;
200192 fn unmark ( self ) -> Self :: Unmarked {
201193 // Should be a no-op due to std's in-place collect optimizations.
202194 self . into_iter ( ) . map ( T :: unmark) . collect ( )
@@ -211,9 +203,6 @@ macro_rules! mark_noop {
211203 fn mark( unmarked: Self :: Unmarked ) -> Self {
212204 unmarked
213205 }
214- }
215- impl Unmark for $ty {
216- type Unmarked = Self ;
217206 fn unmark( self ) -> Self :: Unmarked {
218207 self
219208 }
@@ -294,13 +283,9 @@ macro_rules! mark_compound {
294283 $( $field: Mark :: mark( unmarked. $field) ) ,*
295284 }
296285 }
297- }
298-
299- impl <$( $T: Unmark ) ,+> Unmark for $name <$( $T) ,+> {
300- type Unmarked = $name <$( $T:: Unmarked ) ,+>;
301286 fn unmark( self ) -> Self :: Unmarked {
302287 $name {
303- $( $field: Unmark :: unmark( self . $field) ) ,*
288+ $( $field: Mark :: unmark( self . $field) ) ,*
304289 }
305290 }
306291 }
@@ -315,14 +300,10 @@ macro_rules! mark_compound {
315300 } ) *
316301 }
317302 }
318- }
319-
320- impl <$( $T: Unmark ) ,+> Unmark for $name <$( $T) ,+> {
321- type Unmarked = $name <$( $T:: Unmarked ) ,+>;
322303 fn unmark( self ) -> Self :: Unmarked {
323304 match self {
324305 $( $name:: $variant $( ( $field) ) ? => {
325- $name:: $variant $( ( Unmark :: unmark( $field) ) ) ?
306+ $name:: $variant $( ( Mark :: unmark( $field) ) ) ?
326307 } ) *
327308 }
328309 }
0 commit comments