feat: implement asynchronous channel support with tokio integration

This commit is contained in:
Callum Leslie 2026-03-04 20:51:20 +00:00
parent 56d0889b37
commit 863ca61215
13 changed files with 385 additions and 33 deletions

View file

@ -1,7 +1,7 @@
use std::sync::Arc;
#[cfg(feature = "sync-crossbeam")]
use crate::sync::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType};
use crate::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType};
use crate::types;
use arc_swap::ArcSwap;
use crossbeam_channel;

View file

@ -1,7 +1,7 @@
use std::sync::Arc;
#[cfg(feature = "sync-flume")]
use crate::sync::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType};
use crate::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType};
use crate::types;
use arc_swap::ArcSwap;
use flume;

View file

@ -1,6 +1,6 @@
use arc_swap::ArcSwap;
use crate::sync::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType};
use crate::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType};
use crate::types;
use std::sync::Arc;
#[cfg(feature = "sync-std")]
@ -77,7 +77,7 @@ impl<T> StdSuck<T> {
mod tests {
use super::*;
use crate::Error;
use crate::sync::traits::ChannelType;
use crate::traits::ChannelType;
use std::thread;
#[derive(Debug)]

View file

@ -1,23 +1 @@
pub use crate::error::Error as ChannelError;
pub trait ChannelSender<T> {
fn send(&self, msg: T) -> Result<(), ChannelError>;
}
pub trait ChannelReceiver<T> {
fn recv(&self) -> Result<T, ChannelError>;
}
pub trait ChannelType {
type Sender<T>: ChannelSender<T>;
type Receiver<T>: ChannelReceiver<T>;
fn create_request_channel() -> (
Self::Sender<crate::types::Request>,
Self::Receiver<crate::types::Request>,
);
fn create_response_channel<T>() -> (
Self::Sender<crate::types::Response<T>>,
Self::Receiver<crate::types::Response<T>>,
);
}
pub use crate::traits::{ChannelError, ChannelReceiver, ChannelSender, ChannelType};