1- use crate :: task:: { Context , Poll } ;
2- use futures_core:: ready;
3- use futures_io:: { AsyncSeek , AsyncWrite , SeekFrom } ;
41use std:: fmt;
5- use std:: io;
62use std:: pin:: Pin ;
73
4+ use futures_core:: ready;
5+
6+ use crate :: io:: { self , Seek , SeekFrom , Write } ;
7+ use crate :: task:: { Context , Poll } ;
8+
89const DEFAULT_CAPACITY : usize = 8 * 1024 ;
910
1011/// Wraps a writer and buffers its output.
@@ -82,7 +83,7 @@ pub struct BufWriter<W> {
8283 written : usize ,
8384}
8485
85- impl < W : AsyncWrite > BufWriter < W > {
86+ impl < W : Write > BufWriter < W > {
8687 pin_utils:: unsafe_pinned!( inner: W ) ;
8788 pin_utils:: unsafe_unpinned!( buf: Vec <u8 >) ;
8889
@@ -173,10 +174,6 @@ impl<W: AsyncWrite> BufWriter<W> {
173174 & mut self . inner
174175 }
175176
176- // pub fn get_pin_mut(self: Pin<&mut Self>) -> Pin<&mut W> {
177- // self.inner()
178- // }
179-
180177 /// Consumes BufWriter, returning the underlying writer
181178 ///
182179 /// This method will not write leftover data, it will be lost.
@@ -187,10 +184,6 @@ impl<W: AsyncWrite> BufWriter<W> {
187184 self . inner
188185 }
189186
190- // pub fn poll_into_inner(self: Pin<&mut Self>, _cx: Context<'_>) -> Poll<io::Result<usize>> {
191- // unimplemented!("poll into inner method")
192- // }
193-
194187 /// Returns a reference to the internally buffered data.
195188 ///
196189 /// # Examples
@@ -251,7 +244,7 @@ impl<W: AsyncWrite> BufWriter<W> {
251244 }
252245}
253246
254- impl < W : AsyncWrite > AsyncWrite for BufWriter < W > {
247+ impl < W : Write > Write for BufWriter < W > {
255248 fn poll_write (
256249 mut self : Pin < & mut Self > ,
257250 cx : & mut Context < ' _ > ,
@@ -278,7 +271,7 @@ impl<W: AsyncWrite> AsyncWrite for BufWriter<W> {
278271 }
279272}
280273
281- impl < W : AsyncWrite + fmt:: Debug > fmt:: Debug for BufWriter < W > {
274+ impl < W : Write + fmt:: Debug > fmt:: Debug for BufWriter < W > {
282275 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
283276 f. debug_struct ( "BufReader" )
284277 . field ( "writer" , & self . inner )
@@ -287,11 +280,10 @@ impl<W: AsyncWrite + fmt::Debug> fmt::Debug for BufWriter<W> {
287280 }
288281}
289282
290- impl < W : AsyncWrite + AsyncSeek > AsyncSeek for BufWriter < W > {
283+ impl < W : Write + Seek > Seek for BufWriter < W > {
291284 /// Seek to the offset, in bytes, in the underlying writer.
292285 ///
293286 /// Seeking always writes out the internal buffer before seeking.
294-
295287 fn poll_seek (
296288 mut self : Pin < & mut Self > ,
297289 cx : & mut Context < ' _ > ,
@@ -301,80 +293,3 @@ impl<W: AsyncWrite + AsyncSeek> AsyncSeek for BufWriter<W> {
301293 self . inner ( ) . poll_seek ( cx, pos)
302294 }
303295}
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