@@ -2,11 +2,11 @@ use core::{
22 pin:: Pin ,
33 task:: { Context , Poll } ,
44} ;
5- use std:: io:: Result ;
5+ use std:: io:: { IoSlice , Result } ;
66
77use crate :: { codec:: Decode , util:: PartialBuffer } ;
88use futures_core:: ready;
9- use futures_io:: { AsyncBufRead , AsyncRead } ;
9+ use futures_io:: { AsyncBufRead , AsyncRead , AsyncWrite } ;
1010use pin_project_lite:: pin_project;
1111
1212#[ derive( Debug ) ]
@@ -19,7 +19,7 @@ enum State {
1919
2020pin_project ! {
2121 #[ derive( Debug ) ]
22- pub struct Decoder <R , D : Decode > {
22+ pub struct Decoder <R , D > {
2323 #[ pin]
2424 reader: R ,
2525 decoder: D ,
@@ -28,16 +28,7 @@ pin_project! {
2828 }
2929}
3030
31- impl < R : AsyncBufRead , D : Decode > Decoder < R , D > {
32- pub fn new ( reader : R , decoder : D ) -> Self {
33- Self {
34- reader,
35- decoder,
36- state : State :: Decoding ,
37- multiple_members : false ,
38- }
39- }
40-
31+ impl < R , D > Decoder < R , D > {
4132 pub fn get_ref ( & self ) -> & R {
4233 & self . reader
4334 }
@@ -57,6 +48,17 @@ impl<R: AsyncBufRead, D: Decode> Decoder<R, D> {
5748 pub fn multiple_members ( & mut self , enabled : bool ) {
5849 self . multiple_members = enabled;
5950 }
51+ }
52+
53+ impl < R : AsyncBufRead , D : Decode > Decoder < R , D > {
54+ pub fn new ( reader : R , decoder : D ) -> Self {
55+ Self {
56+ reader,
57+ decoder,
58+ state : State :: Decoding ,
59+ multiple_members : false ,
60+ }
61+ }
6062
6163 fn do_poll_read (
6264 self : Pin < & mut Self > ,
@@ -158,3 +160,25 @@ impl<R: AsyncBufRead, D: Decode> AsyncRead for Decoder<R, D> {
158160 }
159161 }
160162}
163+
164+ impl < R : AsyncWrite , D > AsyncWrite for Decoder < R , D > {
165+ fn poll_write ( self : Pin < & mut Self > , cx : & mut Context < ' _ > , buf : & [ u8 ] ) -> Poll < Result < usize > > {
166+ self . get_pin_mut ( ) . poll_write ( cx, buf)
167+ }
168+
169+ fn poll_flush ( self : Pin < & mut Self > , cx : & mut Context < ' _ > ) -> Poll < Result < ( ) > > {
170+ self . get_pin_mut ( ) . poll_flush ( cx)
171+ }
172+
173+ fn poll_close ( self : Pin < & mut Self > , cx : & mut Context < ' _ > ) -> Poll < Result < ( ) > > {
174+ self . get_pin_mut ( ) . poll_close ( cx)
175+ }
176+
177+ fn poll_write_vectored (
178+ self : Pin < & mut Self > ,
179+ cx : & mut Context < ' _ > ,
180+ bufs : & [ IoSlice < ' _ > ] ,
181+ ) -> Poll < Result < usize > > {
182+ self . get_pin_mut ( ) . poll_write_vectored ( cx, bufs)
183+ }
184+ }
0 commit comments