diff --git a/src/serde/deserialize_program.rs b/src/serde/deserialize_program.rs index 713ef1eda3..382795f48e 100644 --- a/src/serde/deserialize_program.rs +++ b/src/serde/deserialize_program.rs @@ -6,6 +6,7 @@ use crate::{ }, }; use felt::{Felt, FeltOps, PRIME_STR}; +use num_traits::Num; use serde::{de, de::MapAccess, de::SeqAccess, Deserialize, Deserializer}; use serde_json::Number; use std::{collections::HashMap, fmt, io::Read}; @@ -191,12 +192,7 @@ impl<'de> de::Visitor<'de> for FeltVisitor { if let Some(no_prefix_hex) = value.strip_prefix("0x") { // Add padding if necessary let no_prefix_hex = deserialize_utils::maybe_add_padding(no_prefix_hex.to_string()); - let decoded_result: Result, hex::FromHexError> = hex::decode(no_prefix_hex); - - match decoded_result { - Ok(decoded_hex) => Ok(Felt::from_bytes_be(&decoded_hex)), - Err(e) => Err(e).map_err(de::Error::custom), - } + Ok(Felt::from_str_radix(&no_prefix_hex, 16).map_err(de::Error::custom)?) } else { Err(String::from("hex prefix error")).map_err(de::Error::custom) } @@ -222,14 +218,9 @@ impl<'de> de::Visitor<'de> for MaybeRelocatableVisitor { if let Some(no_prefix_hex) = value.strip_prefix("0x") { // Add padding if necessary let no_prefix_hex = deserialize_utils::maybe_add_padding(no_prefix_hex.to_string()); - let decoded_result: Result, hex::FromHexError> = hex::decode(no_prefix_hex); - - match decoded_result { - Ok(decoded_hex) => { - data.push(MaybeRelocatable::Int(Felt::from_bytes_be(&decoded_hex))) - } - Err(e) => return Err(e).map_err(de::Error::custom), - }; + data.push(MaybeRelocatable::Int( + Felt::from_str_radix(&no_prefix_hex, 16).map_err(de::Error::custom)?, + )); } else { return Err(String::from("hex prefix error")).map_err(de::Error::custom); };