openzeppelin_monitor/models/core/
monitor.rs1use serde::{Deserialize, Serialize};
2
3use crate::models::{blockchain::ContractSpec, ChainConfiguration};
4
5#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Default)]
15#[serde(deny_unknown_fields)]
16pub struct Monitor {
17 pub name: String,
19
20 pub networks: Vec<String>,
22
23 pub paused: bool,
25
26 pub addresses: Vec<AddressWithSpec>,
28
29 pub match_conditions: MatchConditions,
31
32 pub trigger_conditions: Vec<TriggerConditions>,
34
35 pub triggers: Vec<String>,
37
38 #[serde(default)]
40 pub chain_configurations: Vec<ChainConfiguration>,
41}
42
43#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
45#[serde(deny_unknown_fields)]
46pub struct AddressWithSpec {
47 pub address: String,
49
50 pub contract_spec: Option<ContractSpec>,
52}
53
54#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Default)]
56#[serde(deny_unknown_fields)]
57pub struct MatchConditions {
58 pub functions: Vec<FunctionCondition>,
60
61 pub events: Vec<EventCondition>,
63
64 pub transactions: Vec<TransactionCondition>,
66}
67
68#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
70#[serde(deny_unknown_fields)]
71pub struct FunctionCondition {
72 pub signature: String,
74
75 pub expression: Option<String>,
77}
78
79#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
81#[serde(deny_unknown_fields)]
82pub struct EventCondition {
83 pub signature: String,
85
86 pub expression: Option<String>,
88}
89
90#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
92#[serde(deny_unknown_fields)]
93pub struct TransactionCondition {
94 pub status: TransactionStatus,
96
97 pub expression: Option<String>,
99}
100
101#[derive(Debug, Copy, Clone, Deserialize, Serialize, PartialEq)]
103#[serde(deny_unknown_fields)]
104pub enum TransactionStatus {
105 Any,
107 Success,
109 Failure,
111}
112
113#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
115#[serde(deny_unknown_fields)]
116pub struct TriggerConditions {
117 pub script_path: String,
119
120 #[serde(default)]
122 pub arguments: Option<Vec<String>>,
123
124 pub language: ScriptLanguage,
126
127 pub timeout_ms: u32,
129}
130#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Hash, Eq)]
132pub enum ScriptLanguage {
133 JavaScript,
134 Python,
135 Bash,
136}
137
138pub const SCRIPT_LANGUAGE_EXTENSIONS: &[(&ScriptLanguage, &str)] = &[
140 (&ScriptLanguage::Python, "py"),
141 (&ScriptLanguage::JavaScript, "js"),
142 (&ScriptLanguage::Bash, "sh"),
143];