Skip to content

Commit 75ef6ba

Browse files
committed
simplify trigger matches
1 parent bbaab6c commit 75ef6ba

File tree

2 files changed

+15
-29
lines changed

2 files changed

+15
-29
lines changed

components/eth-price-oracle/src/lib.rs

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
mod trigger;
2-
use bindings::wavs::worker::layer_types::{TriggerData, TriggerSource};
3-
use trigger::{decode_trigger_event, encode_trigger_output};
2+
use trigger::{decode_trigger_event, encode_trigger_output, Destination};
43
pub mod bindings;
54
use crate::bindings::{export, Guest, TriggerAction};
65
use serde::{Deserialize, Serialize};
@@ -14,22 +13,9 @@ struct Component;
1413
export!(Component with_types_in bindings);
1514

1615
impl Guest for Component {
17-
fn run(trigger_action: TriggerAction) -> std::result::Result<Vec<u8>, String> {
18-
enum Destination {
19-
Ethereum,
20-
CliOutput
21-
}
22-
let ((trigger_id, req), dest) = match &trigger_action.data {
23-
// When the trigger comes from WAVS, it's from an ethereum contract event
24-
TriggerData::EthContractEvent(_) => {
25-
(decode_trigger_event(trigger_action.data).map_err(|e| e.to_string())?, Destination::Ethereum)
26-
},
27-
// When we test in a CLI exec command, it's just raw bytes (we can make-up the trigger_id)
28-
TriggerData::Raw(data) => ((0, data.clone()), Destination::CliOutput),
29-
TriggerData::CosmosContractEvent(_) => {
30-
return Err("Unsupported trigger data type".to_string());
31-
},
32-
};
16+
fn run(action: TriggerAction) -> std::result::Result<Vec<u8>, String> {
17+
let (trigger_id, req, dest) =
18+
decode_trigger_event(action.data).map_err(|e| e.to_string())?;
3319

3420
// Convert bytes to string and parse first char as u64
3521
let input = std::str::from_utf8(&req).map_err(|e| e.to_string())?;
@@ -53,9 +39,7 @@ impl Guest for Component {
5339

5440
match res {
5541
Ok(data) => match dest {
56-
Destination::Ethereum => {
57-
Ok(encode_trigger_output(trigger_id, &data))
58-
},
42+
Destination::Ethereum => Ok(encode_trigger_output(trigger_id, &data)),
5943
Destination::CliOutput => Ok(data),
6044
},
6145
Err(e) => Err(e),

components/eth-price-oracle/src/trigger.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
1-
// Helpers to work with "trigger id" flows - which our example components do
21
use crate::bindings::wavs::worker::layer_types::{TriggerData, TriggerDataEthContractEvent};
32
use alloy_sol_types::SolValue;
43
use anyhow::Result;
4+
use wavs_wasi_chain::decode_event_log_data;
55

6-
pub fn decode_trigger_event(trigger_data: TriggerData) -> Result<(u64, Vec<u8>)> {
6+
pub enum Destination {
7+
Ethereum,
8+
CliOutput,
9+
}
10+
11+
pub fn decode_trigger_event(trigger_data: TriggerData) -> Result<(u64, Vec<u8>, Destination)> {
712
match trigger_data {
813
TriggerData::EthContractEvent(TriggerDataEthContractEvent { log, .. }) => {
9-
let event: solidity::NewTrigger = wavs_wasi_chain::decode_event_log_data!(log)?;
14+
let event: solidity::NewTrigger = decode_event_log_data!(log)?;
1015
let trigger_info = solidity::TriggerInfo::abi_decode(&event._0, false)?;
11-
Ok((trigger_info.triggerId, trigger_info.data.to_vec()))
12-
}
13-
TriggerData::Raw(data) => {
14-
let trigger_info = solidity::TriggerInfo::abi_decode(&data, false)?;
15-
Ok((trigger_info.triggerId, data.to_vec()))
16+
Ok((trigger_info.triggerId, trigger_info.data.to_vec(), Destination::Ethereum))
1617
}
18+
TriggerData::Raw(data) => Ok((0, data.clone(), Destination::CliOutput)),
1719
_ => Err(anyhow::anyhow!("Unsupported trigger data type")),
1820
}
1921
}

0 commit comments

Comments
 (0)