@@ -142,6 +142,30 @@ pub trait AsLockedWrite: private::Sealed {
142
142
fn as_locked_write ( & mut self ) -> Self :: Write < ' _ > ;
143
143
}
144
144
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
+
145
169
impl AsLockedWrite for std:: io:: Stdout {
146
170
type Write < ' w > = std:: io:: StdoutLock < ' w > ;
147
171
@@ -187,6 +211,24 @@ impl AsLockedWrite for dyn std::io::Write {
187
211
}
188
212
}
189
213
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
+
190
232
impl AsLockedWrite for Vec < u8 > {
191
233
type Write < ' w > = & ' w mut Self ;
192
234
@@ -241,3 +283,33 @@ mod private {
241
283
#[ allow( deprecated) ]
242
284
impl Sealed for crate :: Buffer { }
243
285
}
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