Split SendReceive into seperate traits

pull/2/head
rishflab 4 years ago
parent 6b7193b974
commit 154b3edcf9

@ -3,7 +3,7 @@ use crate::{
bitcoin::{BroadcastSignedTransaction, WatchForRawTransaction}, bitcoin::{BroadcastSignedTransaction, WatchForRawTransaction},
bob, monero, bob, monero,
monero::{CreateWalletForOutput, Transfer}, monero::{CreateWalletForOutput, Transfer},
transport::SendReceive, transport::{Receive, Send},
}; };
use anyhow::{anyhow, Result}; use anyhow::{anyhow, Result};
use ecdsa_fun::{ use ecdsa_fun::{
@ -21,7 +21,7 @@ pub async fn next_state<
R: RngCore + CryptoRng, R: RngCore + CryptoRng,
B: WatchForRawTransaction + BroadcastSignedTransaction, B: WatchForRawTransaction + BroadcastSignedTransaction,
M: CreateWalletForOutput + Transfer, M: CreateWalletForOutput + Transfer,
T: SendReceive<Message, bob::Message>, T: Send<Message> + Receive<bob::Message>,
>( >(
bitcoin_wallet: &B, bitcoin_wallet: &B,
monero_wallet: &M, monero_wallet: &M,

@ -6,7 +6,7 @@ use crate::{
}, },
monero, monero,
monero::{CheckTransfer, CreateWalletForOutput}, monero::{CheckTransfer, CreateWalletForOutput},
transport::SendReceive, transport::{Receive, Send},
}; };
use anyhow::{anyhow, Result}; use anyhow::{anyhow, Result};
use ecdsa_fun::{ use ecdsa_fun::{
@ -25,7 +25,7 @@ pub async fn next_state<
R: RngCore + CryptoRng, R: RngCore + CryptoRng,
B: WatchForRawTransaction + SignTxLock + BuildTxLockPsbt + BroadcastSignedTransaction, B: WatchForRawTransaction + SignTxLock + BuildTxLockPsbt + BroadcastSignedTransaction,
M: CreateWalletForOutput + CheckTransfer, M: CreateWalletForOutput + CheckTransfer,
T: SendReceive<Message, alice::Message>, T: Send<Message> + Receive<alice::Message>,
>( >(
bitcoin_wallet: &B, bitcoin_wallet: &B,
monero_wallet: &M, monero_wallet: &M,

@ -2,7 +2,11 @@ use anyhow::Result;
use async_trait::async_trait; use async_trait::async_trait;
#[async_trait] #[async_trait]
pub trait SendReceive<SendMsg, RecvMsg> { pub trait Send<SendMsg> {
async fn send_message(&mut self, message: SendMsg) -> Result<()>; async fn send_message(&mut self, message: SendMsg) -> Result<()>;
}
#[async_trait]
pub trait Receive<RecvMsg> {
async fn receive_message(&mut self) -> Result<RecvMsg>; async fn receive_message(&mut self) -> Result<RecvMsg>;
} }

@ -4,7 +4,10 @@ use tokio::{
stream::StreamExt, stream::StreamExt,
sync::mpsc::{Receiver, Sender}, sync::mpsc::{Receiver, Sender},
}; };
use xmr_btc::{alice, bob, transport::SendReceive}; use xmr_btc::{
alice, bob,
transport::{Receive, Send},
};
#[derive(Debug)] #[derive(Debug)]
pub struct Transport<SendMsg, RecvMsg> { pub struct Transport<SendMsg, RecvMsg> {
@ -13,7 +16,7 @@ pub struct Transport<SendMsg, RecvMsg> {
} }
#[async_trait] #[async_trait]
impl SendReceive<alice::Message, bob::Message> for Transport<alice::Message, bob::Message> { impl Send<alice::Message> for Transport<alice::Message, bob::Message> {
async fn send_message(&mut self, message: alice::Message) -> Result<()> { async fn send_message(&mut self, message: alice::Message) -> Result<()> {
let _ = self let _ = self
.sender .sender
@ -22,7 +25,10 @@ impl SendReceive<alice::Message, bob::Message> for Transport<alice::Message, bob
.map_err(|_| anyhow!("failed to send message"))?; .map_err(|_| anyhow!("failed to send message"))?;
Ok(()) Ok(())
} }
}
#[async_trait]
impl Receive<bob::Message> for Transport<alice::Message, bob::Message> {
async fn receive_message(&mut self) -> Result<bob::Message> { async fn receive_message(&mut self) -> Result<bob::Message> {
let message = self let message = self
.receiver .receiver
@ -34,7 +40,7 @@ impl SendReceive<alice::Message, bob::Message> for Transport<alice::Message, bob
} }
#[async_trait] #[async_trait]
impl SendReceive<bob::Message, alice::Message> for Transport<bob::Message, alice::Message> { impl Send<bob::Message> for Transport<bob::Message, alice::Message> {
async fn send_message(&mut self, message: bob::Message) -> Result<()> { async fn send_message(&mut self, message: bob::Message) -> Result<()> {
let _ = self let _ = self
.sender .sender
@ -43,7 +49,10 @@ impl SendReceive<bob::Message, alice::Message> for Transport<bob::Message, alice
.map_err(|_| anyhow!("failed to send message"))?; .map_err(|_| anyhow!("failed to send message"))?;
Ok(()) Ok(())
} }
}
#[async_trait]
impl Receive<alice::Message> for Transport<bob::Message, alice::Message> {
async fn receive_message(&mut self) -> Result<alice::Message> { async fn receive_message(&mut self) -> Result<alice::Message> {
let message = self let message = self
.receiver .receiver

Loading…
Cancel
Save