From 666c121bb32e1bbe835619586bc5fb000965007b Mon Sep 17 00:00:00 2001 From: rishflab Date: Fri, 9 Oct 2020 09:46:24 +1100 Subject: [PATCH] Implement transport traits with generics --- xmr-btc/src/alice.rs | 4 +-- xmr-btc/src/bob.rs | 4 +-- xmr-btc/src/transport.rs | 4 +-- xmr-btc/tests/harness/transport.rs | 45 +++++++++--------------------- 4 files changed, 19 insertions(+), 38 deletions(-) diff --git a/xmr-btc/src/alice.rs b/xmr-btc/src/alice.rs index 8072f777..00eccfc5 100644 --- a/xmr-btc/src/alice.rs +++ b/xmr-btc/src/alice.rs @@ -3,7 +3,7 @@ use crate::{ bitcoin::{BroadcastSignedTransaction, WatchForRawTransaction}, bob, monero, monero::{CreateWalletForOutput, Transfer}, - transport::{Receive, Send}, + transport::{ReceiveMessage, SendMessage}, }; use anyhow::{anyhow, Result}; use ecdsa_fun::{ @@ -21,7 +21,7 @@ pub async fn next_state< R: RngCore + CryptoRng, B: WatchForRawTransaction + BroadcastSignedTransaction, M: CreateWalletForOutput + Transfer, - T: Send + Receive, + T: SendMessage + ReceiveMessage, >( bitcoin_wallet: &B, monero_wallet: &M, diff --git a/xmr-btc/src/bob.rs b/xmr-btc/src/bob.rs index 8b73bf70..94b4f424 100644 --- a/xmr-btc/src/bob.rs +++ b/xmr-btc/src/bob.rs @@ -6,7 +6,7 @@ use crate::{ }, monero, monero::{CheckTransfer, CreateWalletForOutput}, - transport::{Receive, Send}, + transport::{ReceiveMessage, SendMessage}, }; use anyhow::{anyhow, Result}; use ecdsa_fun::{ @@ -25,7 +25,7 @@ pub async fn next_state< R: RngCore + CryptoRng, B: WatchForRawTransaction + SignTxLock + BuildTxLockPsbt + BroadcastSignedTransaction, M: CreateWalletForOutput + CheckTransfer, - T: Send + Receive, + T: SendMessage + ReceiveMessage, >( bitcoin_wallet: &B, monero_wallet: &M, diff --git a/xmr-btc/src/transport.rs b/xmr-btc/src/transport.rs index 2a7db76a..f71992fb 100644 --- a/xmr-btc/src/transport.rs +++ b/xmr-btc/src/transport.rs @@ -2,11 +2,11 @@ use anyhow::Result; use async_trait::async_trait; #[async_trait] -pub trait Send { +pub trait SendMessage { async fn send_message(&mut self, message: SendMsg) -> Result<()>; } #[async_trait] -pub trait Receive { +pub trait ReceiveMessage { async fn receive_message(&mut self) -> Result; } diff --git a/xmr-btc/tests/harness/transport.rs b/xmr-btc/tests/harness/transport.rs index 6b7e007e..1c912b02 100644 --- a/xmr-btc/tests/harness/transport.rs +++ b/xmr-btc/tests/harness/transport.rs @@ -4,10 +4,7 @@ use tokio::{ stream::StreamExt, sync::mpsc::{Receiver, Sender}, }; -use xmr_btc::{ - alice, bob, - transport::{Receive, Send}, -}; +use xmr_btc::transport::{ReceiveMessage, SendMessage}; #[derive(Debug)] pub struct Transport { @@ -16,32 +13,12 @@ pub struct Transport { } #[async_trait] -impl Send for Transport { - async fn send_message(&mut self, message: alice::Message) -> Result<()> { - let _ = self - .sender - .send(message) - .await - .map_err(|_| anyhow!("failed to send message"))?; - Ok(()) - } -} - -#[async_trait] -impl Receive for Transport { - async fn receive_message(&mut self) -> Result { - let message = self - .receiver - .next() - .await - .ok_or_else(|| anyhow!("failed to receive message"))?; - Ok(message) - } -} - -#[async_trait] -impl Send for Transport { - async fn send_message(&mut self, message: bob::Message) -> Result<()> { +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) @@ -52,8 +29,12 @@ impl Send for Transport { } #[async_trait] -impl Receive for Transport { - async fn receive_message(&mut self) -> Result { +impl ReceiveMessage for Transport +where + SendMsg: std::marker::Send, + RecvMsg: Send + Sync, +{ + async fn receive_message(&mut self) -> Result { let message = self .receiver .next()