use async_tungstenite::{WebSocketReceiver, WebSocketStream};
use async_tungstenite::tokio::TokioAdapter;
use highly_sendable::text::SendableText;
use async_tungstenite::tungstenite::http::Response;
use async_tungstenite::tungstenite::{Error, Message};
use tokio::net::TcpStream;
#[derive(Debug)]
pub enum WebSocketActorInputMessage
{
WebSocket(WebSocketStream<TokioAdapter<TcpStream>>),
Close,
CloseNow,
SendMessage(Message)
}
impl WebSocketActorInputMessage
{
pub fn is_web_socket(&self) -> bool
{
matches!(self, WebSocketActorInputMessage::WebSocket(_))
}
pub fn is_close(&self) -> bool
{
matches!(self, WebSocketActorInputMessage::Close)
}
pub fn is_close_now(&self) -> bool
{
matches!(self, WebSocketActorInputMessage::CloseNow)
}
pub fn is_send_message(&self) -> bool
{
matches!(self, WebSocketActorInputMessage::SendMessage(_))
}
}
#[derive(Debug)]
pub enum WebSocketActorOutputMessage
{
WebSocketEngaged,
ConnectionError(Error), Closing,
Closed,
NotConnected, ClosureWindowElapsed, Message(Message)
}
impl WebSocketActorOutputMessage
{
pub fn is_web_socket_engaged(&self) -> bool
{
matches!(self, Self::WebSocketEngaged)
}
pub fn is_connection_error(&self) -> bool
{
matches!(self, Self::ConnectionError(_))
}
pub fn is_closing(&self) -> bool
{
matches!(self, Self::Closing)
}
pub fn is_closed(&self) -> bool
{
matches!(self, Self::Closed)
}
pub fn is_not_connected(&self) -> bool
{
matches!(self, Self::NotConnected)
}
pub fn is_closure_window_elapsed(&self) -> bool
{
matches!(self, Self::ClosureWindowElapsed)
}
pub fn is_message(&self) -> bool
{
matches!(self, Self::Message(_))
}
}
#[derive(Debug)]
pub enum WebSocketReaderActorInputMessage
{
WebSocket(WebSocketReceiver<TokioAdapter<TcpStream>>),
Close,
CloseNow
}
impl WebSocketReaderActorInputMessage
{
pub fn is_web_socket(&self) -> bool
{
matches!(self, Self::WebSocket(_))
}
pub fn is_close(&self) -> bool
{
matches!(self, Self::Close)
}
}
#[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug)]
pub enum WebSocketReaderActorOutputMessage
{
Closing,
Closed
}
impl WebSocketReaderActorOutputMessage
{
pub fn is_closed(&self) -> bool
{
matches!(self, Self::Closed)
}
}