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
No known key found for this signature in database
GPG Key ID: 651AC83A6C6C8B96
4 changed files with
16 additions and
6 deletions
-
daemon/src/maker_cfd.rs
-
daemon/src/oracle.rs
-
daemon/tests/harness/mocks/mod.rs
-
daemon/tests/harness/mocks/oracle.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
|
|
|
|
|
|
@ -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>) { |
|
|
|
|
|
@ -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) { |
|
|
|
|
|
@ -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") |
|
|
|
} |
|
|
|
|
|
|
|