fe_abi/
contract.rs

1use super::{event::AbiEvent, function::AbiFunction};
2
3use serde::{ser::SerializeSeq, Serialize, Serializer};
4
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct AbiContract {
7    /// Public functions in the contract.
8    funcs: Vec<AbiFunction>,
9
10    /// Events emitted from the contract.
11    events: Vec<AbiEvent>,
12}
13
14impl Serialize for AbiContract {
15    fn serialize<S: Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
16        let mut seq = s.serialize_seq(Some(self.funcs.len() + self.events.len()))?;
17        for func in &self.funcs {
18            seq.serialize_element(func)?;
19        }
20
21        for event in &self.events {
22            seq.serialize_element(event)?;
23        }
24
25        seq.end()
26    }
27}
28
29impl AbiContract {
30    pub fn new(funcs: Vec<AbiFunction>, events: Vec<AbiEvent>) -> Self {
31        Self { funcs, events }
32    }
33}