use ex3_node_error::OtherError;
use ex3_node_types::{chain::Chain, wallet_identifier::WalletIdentifier, PublicKey};
use crate::{PayloadDecoder, Result};
impl PayloadDecoder {
pub fn decode_to_wallet_identifier(payload: &[u8]) -> Result<(Chain, WalletIdentifier)> {
let payload_str = String::from_utf8(payload.to_vec()).expect("should success");
let hexes = payload_str.split('|').collect::<Vec<&str>>();
let invalid_payload_error = OtherError::new("Invalid payload");
if hexes.len() != 2 {
return Err(invalid_payload_error.clone().into());
}
let chain =
u128::from_str_radix(&hexes[0], 16).map_err(|_| invalid_payload_error.clone())?;
let pub_key = hex::decode(&hexes[1]).map_err(|_| invalid_payload_error)?;
let pub_key: PublicKey = PublicKey::from(pub_key);
let wallet_identifier = WalletIdentifier(pub_key);
Ok((chain.into(), wallet_identifier))
}
}