1
- use crate :: task:: { Context , Poll } ;
2
- use futures_core:: ready;
3
- use futures_io:: { AsyncSeek , AsyncWrite , SeekFrom } ;
4
1
use std:: fmt;
5
- use std:: io;
6
2
use std:: pin:: Pin ;
7
3
4
+ use futures_core:: ready;
5
+
6
+ use crate :: io:: { self , Seek , SeekFrom , Write } ;
7
+ use crate :: task:: { Context , Poll } ;
8
+
8
9
const DEFAULT_CAPACITY : usize = 8 * 1024 ;
9
10
10
11
/// Wraps a writer and buffers its output.
@@ -82,7 +83,7 @@ pub struct BufWriter<W> {
82
83
written : usize ,
83
84
}
84
85
85
- impl < W : AsyncWrite > BufWriter < W > {
86
+ impl < W : Write > BufWriter < W > {
86
87
pin_utils:: unsafe_pinned!( inner: W ) ;
87
88
pin_utils:: unsafe_unpinned!( buf: Vec <u8 >) ;
88
89
@@ -173,10 +174,6 @@ impl<W: AsyncWrite> BufWriter<W> {
173
174
& mut self . inner
174
175
}
175
176
176
- // pub fn get_pin_mut(self: Pin<&mut Self>) -> Pin<&mut W> {
177
- // self.inner()
178
- // }
179
-
180
177
/// Consumes BufWriter, returning the underlying writer
181
178
///
182
179
/// This method will not write leftover data, it will be lost.
@@ -187,10 +184,6 @@ impl<W: AsyncWrite> BufWriter<W> {
187
184
self . inner
188
185
}
189
186
190
- // pub fn poll_into_inner(self: Pin<&mut Self>, _cx: Context<'_>) -> Poll<io::Result<usize>> {
191
- // unimplemented!("poll into inner method")
192
- // }
193
-
194
187
/// Returns a reference to the internally buffered data.
195
188
///
196
189
/// # Examples
@@ -251,7 +244,7 @@ impl<W: AsyncWrite> BufWriter<W> {
251
244
}
252
245
}
253
246
254
- impl < W : AsyncWrite > AsyncWrite for BufWriter < W > {
247
+ impl < W : Write > Write for BufWriter < W > {
255
248
fn poll_write (
256
249
mut self : Pin < & mut Self > ,
257
250
cx : & mut Context < ' _ > ,
@@ -278,7 +271,7 @@ impl<W: AsyncWrite> AsyncWrite for BufWriter<W> {
278
271
}
279
272
}
280
273
281
- impl < W : AsyncWrite + fmt:: Debug > fmt:: Debug for BufWriter < W > {
274
+ impl < W : Write + fmt:: Debug > fmt:: Debug for BufWriter < W > {
282
275
fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
283
276
f. debug_struct ( "BufReader" )
284
277
. field ( "writer" , & self . inner )
@@ -287,11 +280,10 @@ impl<W: AsyncWrite + fmt::Debug> fmt::Debug for BufWriter<W> {
287
280
}
288
281
}
289
282
290
- impl < W : AsyncWrite + AsyncSeek > AsyncSeek for BufWriter < W > {
283
+ impl < W : Write + Seek > Seek for BufWriter < W > {
291
284
/// Seek to the offset, in bytes, in the underlying writer.
292
285
///
293
286
/// Seeking always writes out the internal buffer before seeking.
294
-
295
287
fn poll_seek (
296
288
mut self : Pin < & mut Self > ,
297
289
cx : & mut Context < ' _ > ,
@@ -301,80 +293,3 @@ impl<W: AsyncWrite + AsyncSeek> AsyncSeek for BufWriter<W> {
301
293
self . inner ( ) . poll_seek ( cx, pos)
302
294
}
303
295
}
304
-
305
- mod tests {
306
- #![ allow( unused_imports) ]
307
-
308
- use super :: BufWriter ;
309
- use crate :: io:: { self , SeekFrom } ;
310
- use crate :: prelude:: * ;
311
- use crate :: task;
312
-
313
- #[ test]
314
- fn test_buffered_writer ( ) {
315
- task:: block_on ( async {
316
- let inner = Vec :: new ( ) ;
317
- let mut writer = BufWriter :: with_capacity ( 2 , inner) ;
318
-
319
- writer. write ( & [ 0 , 1 ] ) . await . unwrap ( ) ;
320
- assert_eq ! ( writer. buffer( ) , [ ] ) ;
321
- assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 ] ) ;
322
-
323
- writer. write ( & [ 2 ] ) . await . unwrap ( ) ;
324
- assert_eq ! ( writer. buffer( ) , [ 2 ] ) ;
325
- assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 ] ) ;
326
-
327
- writer. write ( & [ 3 ] ) . await . unwrap ( ) ;
328
- assert_eq ! ( writer. buffer( ) , [ 2 , 3 ] ) ;
329
- assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 ] ) ;
330
-
331
- writer. flush ( ) . await . unwrap ( ) ;
332
- assert_eq ! ( writer. buffer( ) , [ ] ) ;
333
- assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 ] ) ;
334
-
335
- writer. write ( & [ 4 ] ) . await . unwrap ( ) ;
336
- writer. write ( & [ 5 ] ) . await . unwrap ( ) ;
337
- assert_eq ! ( writer. buffer( ) , [ 4 , 5 ] ) ;
338
- assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 ] ) ;
339
-
340
- writer. write ( & [ 6 ] ) . await . unwrap ( ) ;
341
- assert_eq ! ( writer. buffer( ) , [ 6 ] ) ;
342
- assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 , 4 , 5 ] ) ;
343
-
344
- writer. write ( & [ 7 , 8 ] ) . await . unwrap ( ) ;
345
- assert_eq ! ( writer. buffer( ) , [ ] ) ;
346
- assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ) ;
347
-
348
- writer. write ( & [ 9 , 10 , 11 ] ) . await . unwrap ( ) ;
349
- assert_eq ! ( writer. buffer( ) , [ ] ) ;
350
- assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 ] ) ;
351
-
352
- writer. flush ( ) . await . unwrap ( ) ;
353
- assert_eq ! ( writer. buffer( ) , [ ] ) ;
354
- assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 ] ) ;
355
- } )
356
- }
357
-
358
- #[ test]
359
- fn test_buffered_writer_inner_into_inner_does_not_flush ( ) {
360
- task:: block_on ( async {
361
- let mut w = BufWriter :: with_capacity ( 3 , Vec :: new ( ) ) ;
362
- w. write ( & [ 0 , 1 ] ) . await . unwrap ( ) ;
363
- assert_eq ! ( * w. get_ref( ) , [ ] ) ;
364
- let w = w. into_inner ( ) ;
365
- assert_eq ! ( w, [ ] ) ;
366
- } )
367
- }
368
-
369
- #[ test]
370
- fn test_buffered_writer_seek ( ) {
371
- task:: block_on ( async {
372
- let mut w = BufWriter :: with_capacity ( 3 , io:: Cursor :: new ( Vec :: new ( ) ) ) ;
373
- w. write_all ( & [ 0 , 1 , 2 , 3 , 4 , 5 ] ) . await . unwrap ( ) ;
374
- w. write_all ( & [ 6 , 7 ] ) . await . unwrap ( ) ;
375
- assert_eq ! ( w. seek( SeekFrom :: Current ( 0 ) ) . await . ok( ) , Some ( 8 ) ) ;
376
- assert_eq ! ( & w. get_ref( ) . get_ref( ) [ ..] , & [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ] [ ..] ) ;
377
- assert_eq ! ( w. seek( SeekFrom :: Start ( 2 ) ) . await . ok( ) , Some ( 2 ) ) ;
378
- } )
379
- }
380
- }
0 commit comments