use std::sync::Arc;
use crate::channel::error::ChannelError;
pub mod core;
pub mod receiver;
pub mod sender;
pub use core::UnifiedChannel;
pub use receiver::UnifiedReceiver;
pub use sender::UnifiedSender;
pub fn unified_channel<T>(
capacity: usize,
) -> Result<(UnifiedSender<T>, UnifiedReceiver<T>), ChannelError> {
let channel = Arc::new(UnifiedChannel::with_capacity(capacity)?);
let sender = UnifiedSender {
channel: channel.clone(),
_phantom: std::marker::PhantomData,
};
let receiver = UnifiedReceiver {
channel,
_phantom: std::marker::PhantomData,
};
Ok((sender, receiver))
}
pub fn unified_channel_with_config<T>(
config: crate::channel::config::ChannelConfig,
) -> Result<(UnifiedSender<T>, UnifiedReceiver<T>), ChannelError> {
let channel = Arc::new(UnifiedChannel::new(config)?);
let sender = UnifiedSender {
channel: channel.clone(),
_phantom: std::marker::PhantomData,
};
let receiver = UnifiedReceiver {
channel,
_phantom: std::marker::PhantomData,
};
Ok((sender, receiver))
}
#[cfg(test)]
mod tests;