ethers_abi/
constructor.rs1#[cfg(feature = "serde")]
12use serde::{Deserialize, Serialize};
13
14#[cfg(not(feature = "std"))]
15use crate::no_std_prelude::*;
16use crate::{encode, Bytes, Error, Param, ParamType, Result, Token};
17
18#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
20#[derive(Debug, Clone, PartialEq)]
21pub struct Constructor {
22 pub inputs: Vec<Param>,
24}
25
26impl Constructor {
27 fn param_types(&self) -> Vec<ParamType> {
29 self.inputs.iter().map(|p| p.kind.clone()).collect()
30 }
31
32 pub fn encode_input(&self, code: Bytes, tokens: &[Token]) -> Result<Bytes> {
34 let params = self.param_types();
35
36 if Token::types_check(tokens, ¶ms) {
37 Ok(code.into_iter().chain(encode(tokens)).collect())
38 } else {
39 Err(Error::InvalidData)
40 }
41 }
42}