use anyhow::{anyhow, Result}; use async_trait::async_trait; use tokio::{ stream::StreamExt, sync::mpsc::{Receiver, Sender}, }; use xmr_btc::transport::{ReceiveMessage, SendMessage}; #[derive(Debug)] pub struct Transport { pub sender: Sender, pub receiver: Receiver, } #[async_trait] impl SendMessage for Transport where SendMsg: Send + Sync, RecvMsg: std::marker::Send, { async fn send_message(&mut self, message: SendMsg) -> Result<()> { let _ = self .sender .send(message) .await .map_err(|_| anyhow!("failed to send message"))?; Ok(()) } } #[async_trait] impl ReceiveMessage for Transport where SendMsg: std::marker::Send, RecvMsg: Send + Sync, { async fn receive_message(&mut self) -> Result { let message = self .receiver .next() .await .ok_or_else(|| anyhow!("failed to receive message"))?; Ok(message) } }