use crate::server::SubscriptionMessage;
use serde_json::value::RawValue;
use tokio::sync::mpsc;
#[derive(Debug, thiserror::Error)]
pub enum TrySendError {
#[error("The connection channel is closed")]
Closed(SubscriptionMessage),
#[error("The connection channel is full")]
Full(SubscriptionMessage),
}
#[derive(Debug, thiserror::Error)]
#[error("The connection channel is closed")]
pub struct DisconnectError(pub SubscriptionMessage);
#[derive(Debug, thiserror::Error)]
pub enum SendTimeoutError {
#[error("The connection channel timed out waiting on send operation")]
Timeout(SubscriptionMessage),
#[error("The connection channel is closed")]
Closed(SubscriptionMessage),
}
#[derive(Debug, Copy, Clone, thiserror::Error)]
#[error("The remote peer closed the connection")]
pub struct PendingSubscriptionAcceptError;
impl From<mpsc::error::SendError<Box<RawValue>>> for DisconnectError {
fn from(e: mpsc::error::SendError<Box<RawValue>>) -> Self {
DisconnectError(SubscriptionMessage::from_complete_message(e.0))
}
}
impl From<mpsc::error::TrySendError<Box<RawValue>>> for TrySendError {
fn from(e: mpsc::error::TrySendError<Box<RawValue>>) -> Self {
match e {
mpsc::error::TrySendError::Closed(m) => Self::Closed(SubscriptionMessage::from_complete_message(m)),
mpsc::error::TrySendError::Full(m) => Self::Full(SubscriptionMessage::from_complete_message(m)),
}
}
}
impl From<mpsc::error::SendTimeoutError<Box<RawValue>>> for SendTimeoutError {
fn from(e: mpsc::error::SendTimeoutError<Box<RawValue>>) -> Self {
match e {
mpsc::error::SendTimeoutError::Closed(m) => Self::Closed(SubscriptionMessage::from_complete_message(m)),
mpsc::error::SendTimeoutError::Timeout(m) => Self::Timeout(SubscriptionMessage::from_complete_message(m)),
}
}
}