use tokio::net::{TcpStream};
use crate::{Error, Message, Frame, WebSocketWriter, WebSocketReader};
use crate::communication::{write_message, read_frame};
pub struct WebSocketStream {
inner: TcpStream
}
impl WebSocketStream {
pub fn from_tcp_stream_unchecked(tcp_stream: TcpStream) -> WebSocketStream {
WebSocketStream {
inner: tcp_stream
}
}
pub async fn send_message(&self, message: Message) -> Result<(), Error> {
write_message(&self, message).await
}
pub async fn try_read_frame(&self) -> Result<Frame, Error> {
read_frame(&self).await
}
pub fn split(self) -> (WebSocketWriter, WebSocketReader) {
let (rx, tx) = self.inner.into_split();
(WebSocketWriter::new_unchecked(tx), WebSocketReader::new_unchecked(rx))
}
}
impl AsRef<TcpStream> for WebSocketStream {
fn as_ref(&self) -> &TcpStream {
&self.inner
}
}
impl AsMut<TcpStream> for WebSocketStream {
fn as_mut(&mut self) -> &mut TcpStream {
&mut self.inner
}
}
impl Into<TcpStream> for WebSocketStream {
fn into(self) -> TcpStream {
self.inner
}
}