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
use ethabi::Token; use snafu::ensure; use solana_sdk::pubkey::Pubkey; use super::errors::*; use super::Result; pub trait ParseTokens: Sized { fn parse(tokens: Vec<Token>) -> Result<Self>; } impl ParseTokens for Pubkey { fn parse(inputs: Vec<Token>) -> Result<Self> { ensure!( inputs.len() == 1, ParamsCountMismatch { expected: 1_usize, got: inputs.len() } ); let bytes = match &inputs[0] { Token::FixedBytes(bytes) if bytes.len() == 32 => bytes, t => { return UnexpectedInput { expected: String::from("bytes32"), got: t.to_string(), } .fail() } }; Ok(Pubkey::new(&bytes)) } }