1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
use std::{collections::BTreeMap, path::PathBuf};
use serde::{Deserialize, Serialize};
use crate::{EventName, FunctionName, Target};
#[derive(Debug, Serialize, Deserialize)]
pub struct Bridge {
file: PathBuf,
sender: Target,
receiver: Target,
contracts: Vec<ContractBridge>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ContractBridge {
name: String,
functions: BTreeMap<FunctionName, EventName>,
}
impl Bridge {
pub fn new(
file: PathBuf,
sender: Target,
receiver: Target,
contracts: Vec<ContractBridge>,
) -> Bridge {
Bridge {
file,
sender,
receiver,
contracts,
}
}
pub fn receiver_target(&self) -> Target {
self.receiver
}
pub fn bridges(
&self,
contract_name: &str,
) -> impl Iterator<Item = (&FunctionName, &EventName)> {
self.contracts
.iter()
.find(|c| c.name == contract_name)
.map(|c| c.functions.iter())
.unwrap()
}
}
impl ContractBridge {
pub fn new(name: String, functions: BTreeMap<FunctionName, EventName>) -> ContractBridge {
ContractBridge { name, functions }
}
}