#![cfg(not(target_arch = "wasm32"))]
use tokio::net::tcp::{OwnedReadHalf, OwnedWriteHalf};
use tokio::net::TcpStream;
use tokio_util::codec::{
BytesCodec, Decoder, FramedRead, FramedWrite, LengthDelimitedCodec, LinesCodec,
};
pub fn tcp_framed<Codec>(
stream: TcpStream,
codec: Codec,
) -> (
FramedWrite<OwnedWriteHalf, Codec>,
FramedRead<OwnedReadHalf, Codec>,
)
where
Codec: Clone + Decoder,
{
let (recv, send) = stream.into_split();
let send = FramedWrite::new(send, codec.clone());
let recv = FramedRead::new(recv, codec);
(send, recv)
}
pub fn tcp_bytes(
stream: TcpStream,
) -> (
FramedWrite<OwnedWriteHalf, LengthDelimitedCodec>,
FramedRead<OwnedReadHalf, LengthDelimitedCodec>,
) {
tcp_framed(stream, LengthDelimitedCodec::new())
}
pub fn tcp_bytestream(
stream: TcpStream,
) -> (
FramedWrite<OwnedWriteHalf, BytesCodec>,
FramedRead<OwnedReadHalf, BytesCodec>,
) {
tcp_framed(stream, BytesCodec::new())
}
pub fn tcp_lines(
stream: TcpStream,
) -> (
FramedWrite<OwnedWriteHalf, LinesCodec>,
FramedRead<OwnedReadHalf, LinesCodec>,
) {
tcp_framed(stream, LinesCodec::new())
}