Browse Source

Simplify invoking `oracle::GetAnnouncement`

Moving the error message into the handler reduces complexity in the
cfd actor.
reconnect-to-maker
Thomas Eizinger 3 years ago
parent
commit
e297a4468a
No known key found for this signature in database GPG Key ID: 651AC83A6C6C8B96
  1. 3
      daemon/src/maker_cfd.rs
  2. 7
      daemon/src/oracle.rs
  3. 2
      daemon/tests/harness/mocks/mod.rs
  4. 10
      daemon/tests/harness/mocks/oracle.rs

3
daemon/src/maker_cfd.rs

@ -580,8 +580,7 @@ where
let offer_announcement = self
.oracle_actor
.send(oracle::GetAnnouncement(cfd.order.oracle_event_id))
.await?
.with_context(|| format!("Announcement {} not found", cfd.order.oracle_event_id))?;
.await??;
// 3. Notify the taker that we are ready for contract setup
// Use `.send` here to ensure we only continue once the message has been sent

7
daemon/src/oracle.rs

@ -218,7 +218,7 @@ impl Actor {
&mut self,
msg: GetAnnouncement,
_ctx: &mut xtra::Context<Self>,
) -> Option<Announcement> {
) -> Result<Announcement, NoAnnouncement> {
self.announcements
.get_key_value(&msg.0)
.map(|(id, (time, nonce_pks))| Announcement {
@ -226,6 +226,7 @@ impl Actor {
expected_outcome_time: *time,
nonce_pks: nonce_pks.clone(),
})
.ok_or(NoAnnouncement(msg.0))
}
fn handle_new_announcement_fetched(
@ -243,6 +244,10 @@ impl Actor {
}
}
#[derive(Debug, Clone, thiserror::Error)]
#[error("Announcement {0} not found")]
pub struct NoAnnouncement(pub BitMexPriceEventId);
#[async_trait]
impl xtra::Handler<NewAttestationFetched> for Actor {
async fn handle(&mut self, msg: NewAttestationFetched, _ctx: &mut xtra::Context<Self>) {

2
daemon/tests/harness/mocks/mod.rs

@ -58,7 +58,7 @@ impl Mocks {
self.oracle()
.await
.expect_get_announcement()
.return_const(Some(oracle::dummy_announcement()));
.return_const(Ok(oracle::dummy_announcement()));
}
pub async fn mock_oracle_monitor_attestation(&mut self) {

10
daemon/tests/harness/mocks/oracle.rs

@ -18,7 +18,10 @@ impl Oracle for OracleActor {}
#[xtra_productivity(message_impl = false)]
impl OracleActor {
async fn handle(&mut self, msg: oracle::GetAnnouncement) -> Option<oracle::Announcement> {
async fn handle(
&mut self,
msg: oracle::GetAnnouncement,
) -> Result<oracle::Announcement, oracle::NoAnnouncement> {
self.mock.lock().await.get_announcement(msg)
}
@ -33,7 +36,10 @@ impl OracleActor {
#[automock]
pub trait Oracle {
fn get_announcement(&mut self, _msg: oracle::GetAnnouncement) -> Option<oracle::Announcement> {
fn get_announcement(
&mut self,
_msg: oracle::GetAnnouncement,
) -> Result<oracle::Announcement, oracle::NoAnnouncement> {
unreachable!("mockall will reimplement this method")
}

Loading…
Cancel
Save