channel 0.2.1

Rust advanced queue library
Documentation
#[cfg(test)]
pub mod test;

#[cfg(feature = "metrics")]
use std::panic::Location;

pub mod channel;
pub mod utils;

pub use channel::asynchronous::{UnboundedReceiverAsync, UnboundedSenderAsync};
pub use channel::bidirectional::{BDUnbRequester, BDUnbResponder};
pub use channel::bidirectional::{BDUnbRequesterAsync, BDUnbResponderAsync};
pub use channel::time_series::{GetDataTimeExt, TSObserver, TSReceiver, TSSender};
pub use channel::{Observer, Receiver, Sender};

use channel::asynchronous::UnboundedBufferAsync;
use channel::bidirectional::{BDUnbBuffer, BDUnbBufferAsync};
use channel::{time_series::TSChannel, Channel};
use chrono::NaiveDateTime;

#[cfg(not(feature = "metrics"))]
pub fn new<T: Clone + Send>(bounded: Option<usize>, dispatch: bool) -> (Sender<T>, Receiver<T>) {
    Channel::new(bounded, dispatch)
}

#[cfg(feature = "metrics")]
#[track_caller]
pub fn new<T: Clone + Send>(bounded: Option<usize>, dispatch: bool) -> (Sender<T>, Receiver<T>) {
    Channel::new(bounded, dispatch, Location::caller())
}

#[cfg(not(feature = "metrics"))]
pub fn new_time_series<T: Clone + Send + GetDataTimeExt>(
    bounded: Option<usize>,
    dispatch: bool,
    start_data_time: NaiveDateTime,
    speed: f64,
) -> (TSSender<T>, TSReceiver<T>) {
    TSChannel::new(bounded, dispatch, start_data_time, speed)
}

#[cfg(feature = "metrics")]
#[track_caller]
pub fn new_time_series<T: Clone + Send + GetDataTimeExt>(
    bounded: Option<usize>,
    dispatch: bool,
    start_data_time: NaiveDateTime,
    speed: f64,
) -> (TSSender<T>, TSReceiver<T>) {
    TSChannel::new(
        bounded,
        dispatch,
        start_data_time,
        speed,
        Location::caller(),
    )
}

pub fn new_unbounded_bidirectional<T1, T2>() -> (BDUnbRequester<T1, T2>, BDUnbResponder<T1, T2>) {
    BDUnbBuffer::new()
}

pub fn new_unbounded_bidirectional_async<T1, T2>(
) -> (BDUnbRequesterAsync<T1, T2>, BDUnbResponderAsync<T1, T2>) {
    BDUnbBufferAsync::new()
}

pub fn new_unbounded_async<T1>() -> (UnboundedSenderAsync<T1>, UnboundedReceiverAsync<T1>) {
    UnboundedBufferAsync::new()
}