use crate::{socket_connection::peer::Peer};
use std::{
fmt::Debug,
sync::Arc,
};
use std::fmt::{Display, Formatter};
use futures::Stream;
use reactive_mutiny::prelude::{FullDuplexUniChannel, GenericUni, MutinyStream};
use crate::prelude::SocketConnection;
#[derive(Debug)]
pub enum Error {
TextualInputParsingError { msg: String, cause: Box<dyn std::error::Error + Send + Sync> },
BinaryInputValidationError { msg: String, cause: Box<dyn std::error::Error + Send + Sync> },
}
impl Display for Error {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
<Self as Debug>::fmt(self, f)
}
}
impl std::error::Error for Error {}
pub type MessagingMutinyStream<GenericUniType> = MutinyStream<'static,
<GenericUniType as GenericUni>::ItemType,
<GenericUniType as GenericUni>::UniChannelType,
<GenericUniType as GenericUni>::DerivedItemType>;
#[derive(Debug)]
pub enum ConnectionEvent<'a, StateType: Send + Sync + Clone + Debug> {
Connected(&'a SocketConnection<StateType>),
Disconnected(&'a SocketConnection<StateType>),
LocalServiceTermination,
}
#[derive(Debug)]
pub enum ProtocolEvent<const CONFIG: u64,
LocalMessages: Send + Sync + PartialEq + Debug + 'static,
SenderChannel: FullDuplexUniChannel<ItemType=LocalMessages, DerivedItemType=LocalMessages> + Send + Sync,
StateType: Send + Sync + Clone + Debug + 'static = ()> {
PeerArrived { peer: Arc<Peer<CONFIG, LocalMessages, SenderChannel, StateType>> },
PeerLeft { peer: Arc<Peer<CONFIG, LocalMessages, SenderChannel, StateType>>, stream_stats: Arc<dyn reactive_mutiny::stream_executor::StreamExecutorStats + Sync + Send> },
LocalServiceTermination,
}
pub trait ResponsiveStream<const CONFIG: u64,
LocalMessagesType: Send + Sync + PartialEq + Debug,
SenderChannel: FullDuplexUniChannel<ItemType=LocalMessagesType, DerivedItemType=LocalMessagesType> + Send + Sync,
StateType: Send + Sync + Clone + Debug> {
fn to_responsive_stream<YieldedItemType>
(self,
peer: Arc<Peer<CONFIG, LocalMessagesType, SenderChannel, StateType>>,
item_mapper: impl FnMut(&LocalMessagesType, &Arc<Peer<CONFIG, LocalMessagesType, SenderChannel, StateType>>) -> YieldedItemType)
-> impl Stream<Item = YieldedItemType>
where Self: Sized + Stream<Item = LocalMessagesType>;
}