1#![allow(deprecated)]
2
3use std::fmt;
4use std::io::{self, Read, Write};
5
6use codec::{Decoder, Encoder};
7use framed_read::{framed_read2, framed_read2_with_buffer, FramedRead2};
8use framed_write::{framed_write2, framed_write2_with_buffer, FramedWrite2};
9use {AsyncRead, AsyncWrite};
10
11use bytes::BytesMut;
12use futures::{Poll, Sink, StartSend, Stream};
13
14#[deprecated(since = "0.1.7", note = "Moved to tokio-codec")]
19#[doc(hidden)]
20pub struct Framed<T, U> {
21 inner: FramedRead2<FramedWrite2<Fuse<T, U>>>,
22}
23
24#[deprecated(since = "0.1.7", note = "Moved to tokio-codec")]
25#[doc(hidden)]
26pub struct Fuse<T, U>(pub T, pub U);
27
28pub fn framed<T, U>(inner: T, codec: U) -> Framed<T, U>
29where
30 T: AsyncRead + AsyncWrite,
31 U: Decoder + Encoder,
32{
33 Framed {
34 inner: framed_read2(framed_write2(Fuse(inner, codec))),
35 }
36}
37
38impl<T, U> Framed<T, U> {
39 pub fn from_parts(parts: FramedParts<T>, codec: U) -> Framed<T, U> {
60 Framed {
61 inner: framed_read2_with_buffer(
62 framed_write2_with_buffer(Fuse(parts.inner, codec), parts.writebuf),
63 parts.readbuf,
64 ),
65 }
66 }
67
68 pub fn get_ref(&self) -> &T {
75 &self.inner.get_ref().get_ref().0
76 }
77
78 pub fn get_mut(&mut self) -> &mut T {
85 &mut self.inner.get_mut().get_mut().0
86 }
87
88 pub fn into_inner(self) -> T {
94 self.inner.into_inner().into_inner().0
95 }
96
97 pub fn into_parts(self) -> FramedParts<T> {
104 let (inner, readbuf) = self.inner.into_parts();
105 let (inner, writebuf) = inner.into_parts();
106 FramedParts {
107 inner: inner.0,
108 readbuf: readbuf,
109 writebuf: writebuf,
110 }
111 }
112
113 pub fn into_parts_and_codec(self) -> (FramedParts<T>, U) {
124 let (inner, readbuf) = self.inner.into_parts();
125 let (inner, writebuf) = inner.into_parts();
126 (
127 FramedParts {
128 inner: inner.0,
129 readbuf: readbuf,
130 writebuf: writebuf,
131 },
132 inner.1,
133 )
134 }
135}
136
137impl<T, U> Stream for Framed<T, U>
138where
139 T: AsyncRead,
140 U: Decoder,
141{
142 type Item = U::Item;
143 type Error = U::Error;
144
145 fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
146 self.inner.poll()
147 }
148}
149
150impl<T, U> Sink for Framed<T, U>
151where
152 T: AsyncWrite,
153 U: Encoder,
154 U::Error: From<io::Error>,
155{
156 type SinkItem = U::Item;
157 type SinkError = U::Error;
158
159 fn start_send(&mut self, item: Self::SinkItem) -> StartSend<Self::SinkItem, Self::SinkError> {
160 self.inner.get_mut().start_send(item)
161 }
162
163 fn poll_complete(&mut self) -> Poll<(), Self::SinkError> {
164 self.inner.get_mut().poll_complete()
165 }
166
167 fn close(&mut self) -> Poll<(), Self::SinkError> {
168 self.inner.get_mut().close()
169 }
170}
171
172impl<T, U> fmt::Debug for Framed<T, U>
173where
174 T: fmt::Debug,
175 U: fmt::Debug,
176{
177 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
178 f.debug_struct("Framed")
179 .field("io", &self.inner.get_ref().get_ref().0)
180 .field("codec", &self.inner.get_ref().get_ref().1)
181 .finish()
182 }
183}
184
185impl<T: Read, U> Read for Fuse<T, U> {
188 fn read(&mut self, dst: &mut [u8]) -> io::Result<usize> {
189 self.0.read(dst)
190 }
191}
192
193impl<T: AsyncRead, U> AsyncRead for Fuse<T, U> {
194 unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool {
195 self.0.prepare_uninitialized_buffer(buf)
196 }
197}
198
199impl<T: Write, U> Write for Fuse<T, U> {
200 fn write(&mut self, src: &[u8]) -> io::Result<usize> {
201 self.0.write(src)
202 }
203
204 fn flush(&mut self) -> io::Result<()> {
205 self.0.flush()
206 }
207}
208
209impl<T: AsyncWrite, U> AsyncWrite for Fuse<T, U> {
210 fn shutdown(&mut self) -> Poll<(), io::Error> {
211 self.0.shutdown()
212 }
213}
214
215impl<T, U: Decoder> Decoder for Fuse<T, U> {
216 type Item = U::Item;
217 type Error = U::Error;
218
219 fn decode(&mut self, buffer: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
220 self.1.decode(buffer)
221 }
222
223 fn decode_eof(&mut self, buffer: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
224 self.1.decode_eof(buffer)
225 }
226}
227
228impl<T, U: Encoder> Encoder for Fuse<T, U> {
229 type Item = U::Item;
230 type Error = U::Error;
231
232 fn encode(&mut self, item: Self::Item, dst: &mut BytesMut) -> Result<(), Self::Error> {
233 self.1.encode(item, dst)
234 }
235}
236
237#[derive(Debug)]
241pub struct FramedParts<T> {
242 pub inner: T,
244 pub readbuf: BytesMut,
246 pub writebuf: BytesMut,
248}