use async_trait::async_trait; pub use crate::error::Error as ChannelError; #[async_trait] pub trait AsyncChannelSender: Send + Sync { async fn send(&self, msg: T) -> Result<(), ChannelError>; } #[async_trait] pub trait AsyncChannelReceiver: Send + Sync { async fn recv(&self) -> Result; } pub trait AsyncChannelType { type Sender: AsyncChannelSender; type Receiver: AsyncChannelReceiver; fn create_request_channel() -> ( Self::Sender, Self::Receiver, ); fn create_response_channel() -> ( Self::Sender>, Self::Receiver>, ); }