@@ -142,6 +142,30 @@ pub trait AsLockedWrite: private::Sealed {
142142 fn as_locked_write ( & mut self ) -> Self :: Write < ' _ > ;
143143}
144144
145+ impl < T : AsLockedWrite + ?Sized > AsLockedWrite for & mut T {
146+ type Write < ' w >
147+ = T :: Write < ' w >
148+ where
149+ Self : ' w ;
150+
151+ #[ inline]
152+ fn as_locked_write ( & mut self ) -> Self :: Write < ' _ > {
153+ ( * * self ) . as_locked_write ( )
154+ }
155+ }
156+
157+ impl < T : AsLockedWrite + ?Sized > AsLockedWrite for Box < T > {
158+ type Write < ' w >
159+ = T :: Write < ' w >
160+ where
161+ Self : ' w ;
162+
163+ #[ inline]
164+ fn as_locked_write ( & mut self ) -> Self :: Write < ' _ > {
165+ ( * * self ) . as_locked_write ( )
166+ }
167+ }
168+
145169impl AsLockedWrite for std:: io:: Stdout {
146170 type Write < ' w > = std:: io:: StdoutLock < ' w > ;
147171
@@ -187,6 +211,24 @@ impl AsLockedWrite for dyn std::io::Write {
187211 }
188212}
189213
214+ impl AsLockedWrite for dyn std:: io:: Write + Send {
215+ type Write < ' w > = & ' w mut Self ;
216+
217+ #[ inline]
218+ fn as_locked_write ( & mut self ) -> Self :: Write < ' _ > {
219+ self
220+ }
221+ }
222+
223+ impl AsLockedWrite for dyn std:: io:: Write + Send + Sync {
224+ type Write < ' w > = & ' w mut Self ;
225+
226+ #[ inline]
227+ fn as_locked_write ( & mut self ) -> Self :: Write < ' _ > {
228+ self
229+ }
230+ }
231+
190232impl AsLockedWrite for Vec < u8 > {
191233 type Write < ' w > = & ' w mut Self ;
192234
@@ -241,3 +283,33 @@ mod private {
241283 #[ allow( deprecated) ]
242284 impl Sealed for crate :: Buffer { }
243285}
286+
287+ #[ cfg( test) ]
288+ mod tests {
289+ use super :: * ;
290+
291+ fn assert_raw_stream < T : RawStream > ( )
292+ where
293+ crate :: AutoStream < T > : std:: io:: Write ,
294+ {
295+ }
296+
297+ #[ test]
298+ fn test ( ) {
299+ assert_raw_stream :: < Box < dyn std:: io:: Write > > ( ) ;
300+ assert_raw_stream :: < Box < dyn std:: io:: Write + ' static > > ( ) ;
301+ assert_raw_stream :: < Box < dyn std:: io:: Write + Send > > ( ) ;
302+ assert_raw_stream :: < Box < dyn std:: io:: Write + Send + Sync > > ( ) ;
303+
304+ assert_raw_stream :: < & mut ( dyn std:: io:: Write ) > ( ) ;
305+ assert_raw_stream :: < & mut ( dyn std:: io:: Write + ' static ) > ( ) ;
306+ assert_raw_stream :: < & mut ( dyn std:: io:: Write + Send ) > ( ) ;
307+ assert_raw_stream :: < & mut ( dyn std:: io:: Write + Send + Sync ) > ( ) ;
308+
309+ assert_raw_stream :: < Vec < u8 > > ( ) ;
310+ assert_raw_stream :: < & mut Vec < u8 > > ( ) ;
311+
312+ assert_raw_stream :: < std:: fs:: File > ( ) ;
313+ assert_raw_stream :: < & mut std:: fs:: File > ( ) ;
314+ }
315+ }
0 commit comments