@@ -18,6 +18,7 @@ mod if_std {
1818 use std:: boxed:: Box ;
1919 use std:: cmp;
2020 use std:: io as StdIo ;
21+ use std:: ops:: DerefMut ;
2122 use std:: pin:: Pin ;
2223 use std:: ptr;
2324
@@ -270,21 +271,25 @@ mod if_std {
270271 deref_async_read ! ( ) ;
271272 }
272273
273- impl < T : ?Sized + AsyncRead > AsyncRead for Pin < & mut T > {
274+ impl < P > AsyncRead for Pin < P >
275+ where
276+ P : DerefMut + Unpin ,
277+ P :: Target : AsyncRead ,
278+ {
274279 unsafe fn initializer ( & self ) -> Initializer {
275280 ( * * self ) . initializer ( )
276281 }
277282
278- fn poll_read ( mut self : Pin < & mut Self > , cx : & mut Context < ' _ > , buf : & mut [ u8 ] )
283+ fn poll_read ( self : Pin < & mut Self > , cx : & mut Context < ' _ > , buf : & mut [ u8 ] )
279284 -> Poll < Result < usize > >
280285 {
281- T :: poll_read ( ( * self ) . as_mut ( ) , cx, buf)
286+ Pin :: get_mut ( self ) . as_mut ( ) . poll_read ( cx, buf)
282287 }
283288
284- fn poll_vectored_read ( mut self : Pin < & mut Self > , cx : & mut Context < ' _ > , vec : & mut [ & mut IoVec ] )
289+ fn poll_vectored_read ( self : Pin < & mut Self > , cx : & mut Context < ' _ > , vec : & mut [ & mut IoVec ] )
285290 -> Poll < Result < usize > >
286291 {
287- T :: poll_vectored_read ( ( * self ) . as_mut ( ) , cx, vec)
292+ Pin :: get_mut ( self ) . as_mut ( ) . poll_vectored_read ( cx, vec)
288293 }
289294 }
290295
@@ -348,25 +353,29 @@ mod if_std {
348353 deref_async_write ! ( ) ;
349354 }
350355
351- impl < T : ?Sized + AsyncWrite > AsyncWrite for Pin < & mut T > {
352- fn poll_write ( mut self : Pin < & mut Self > , cx : & mut Context < ' _ > , buf : & [ u8 ] )
356+ impl < P > AsyncWrite for Pin < P >
357+ where
358+ P : DerefMut + Unpin ,
359+ P :: Target : AsyncWrite ,
360+ {
361+ fn poll_write ( self : Pin < & mut Self > , cx : & mut Context < ' _ > , buf : & [ u8 ] )
353362 -> Poll < Result < usize > >
354363 {
355- T :: poll_write ( ( * self ) . as_mut ( ) , cx, buf)
364+ Pin :: get_mut ( self ) . as_mut ( ) . poll_write ( cx, buf)
356365 }
357366
358- fn poll_vectored_write ( mut self : Pin < & mut Self > , cx : & mut Context < ' _ > , vec : & [ & IoVec ] )
367+ fn poll_vectored_write ( self : Pin < & mut Self > , cx : & mut Context < ' _ > , vec : & [ & IoVec ] )
359368 -> Poll < Result < usize > >
360369 {
361- T :: poll_vectored_write ( ( * self ) . as_mut ( ) , cx, vec)
370+ Pin :: get_mut ( self ) . as_mut ( ) . poll_vectored_write ( cx, vec)
362371 }
363372
364- fn poll_flush ( mut self : Pin < & mut Self > , cx : & mut Context < ' _ > ) -> Poll < Result < ( ) > > {
365- T :: poll_flush ( ( * self ) . as_mut ( ) , cx)
373+ fn poll_flush ( self : Pin < & mut Self > , cx : & mut Context < ' _ > ) -> Poll < Result < ( ) > > {
374+ Pin :: get_mut ( self ) . as_mut ( ) . poll_flush ( cx)
366375 }
367376
368- fn poll_close ( mut self : Pin < & mut Self > , cx : & mut Context < ' _ > ) -> Poll < Result < ( ) > > {
369- T :: poll_close ( ( * self ) . as_mut ( ) , cx)
377+ fn poll_close ( self : Pin < & mut Self > , cx : & mut Context < ' _ > ) -> Poll < Result < ( ) > > {
378+ Pin :: get_mut ( self ) . as_mut ( ) . poll_close ( cx)
370379 }
371380 }
372381
0 commit comments