#![warn(missing_docs)]
pub mod consumer;
pub use consumer::{Consume, StreamRequest, ValueRequest};
use dnet_utils::ConditionalSend;
pub mod producer;
pub mod parts;
use std::fmt::{Debug, Display};
use std::future::Future;
pub use dportable::time::{sleep, Instant, Sleep, Timeout};
pub use dportable::{spawn, JoinHandle};
pub use dnet_base;
pub use atomic_counter;
pub use futures;
pub use dnet_macros::api;
pub use dnet_macros::no_serde;
pub use dnet_macros::no_ack;
pub use dnet_macros::abortable;
pub use dnet_macros::Produce;
pub trait TransportError: ConditionalSend + 'static {}
impl<T> TransportError for T where T: ConditionalSend + 'static {}
pub trait Transport<Incoming, Outgoing, Error>:
dnet_base::Transport<Incoming, Outgoing, Error> + ConditionalSend + 'static
{
}
impl<T, Incoming, Outgoing, Error> Transport<Incoming, Outgoing, Error> for T where
T: dnet_base::Transport<Incoming, Outgoing, Error> + ConditionalSend + 'static
{
}
pub trait Shutdown: Future<Output = ShutdownType> + ConditionalSend + Unpin + 'static {}
impl<T> Shutdown for T where T: Future<Output = ShutdownType> + ConditionalSend + Unpin + 'static {}
#[derive(Debug)]
pub enum Error {
Closed,
Aborted,
Shutdown,
Timeout,
Dropped,
}
impl Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Error::Closed => write!(f, "transport closed"),
Error::Aborted => write!(f, "request was aborted"),
Error::Shutdown => write!(f, "producer/consumer was shutdown"),
Error::Timeout => write!(f, "producer/consumer timed out"),
Error::Dropped => write!(f, "consumer was dropped"),
}
}
}
impl std::error::Error for Error {}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ShutdownType {
Closed,
Shutdown,
Aborted,
Timeout,
}
impl From<ShutdownType> for Error {
fn from(value: ShutdownType) -> Self {
match value {
ShutdownType::Closed => Error::Closed,
ShutdownType::Shutdown => Error::Shutdown,
ShutdownType::Aborted => Error::Aborted,
ShutdownType::Timeout => Error::Timeout,
}
}
}