diff --git a/crates/conversions/src/byte_array.rs b/crates/conversions/src/byte_array.rs index 335e1c7d2e..6167c9f2fe 100644 --- a/crates/conversions/src/byte_array.rs +++ b/crates/conversions/src/byte_array.rs @@ -1,7 +1,6 @@ -use crate::felt252::SerializeAsFelt252Vec; +use crate::{felt252::SerializeAsFelt252Vec, string::TryFromHexStr}; use cairo_felt::Felt252; use cairo_lang_utils::byte_array::{BYTES_IN_WORD, BYTE_ARRAY_MAGIC}; -use num_traits::Num; #[derive(Clone)] pub struct ByteArray { @@ -28,7 +27,7 @@ impl From<&str> for ByteArray { } impl SerializeAsFelt252Vec for ByteArray { - fn serialize_as_felt252(self, output: &mut Vec) { + fn serialize_into_felt252_vec(self, output: &mut Vec) { output.extend(self.serialize_no_magic()); } } @@ -36,21 +35,19 @@ impl SerializeAsFelt252Vec for ByteArray { impl ByteArray { #[must_use] pub fn serialize_with_magic(self) -> Vec { - self.serialize(true) - } + let mut result = self.serialize_no_magic(); - #[must_use] - pub fn serialize_no_magic(self) -> Vec { - self.serialize(false) + result.insert( + 0, + Felt252::try_from_hex_str(&format!("0x{BYTE_ARRAY_MAGIC}")).unwrap(), + ); + + result } #[must_use] - fn serialize(self, magic: bool) -> Vec { - let mut result = Vec::with_capacity(self.words.len() + 3 + usize::from(magic)); - - if magic { - result.push(Felt252::from_str_radix(BYTE_ARRAY_MAGIC, 16).unwrap()); - } + pub fn serialize_no_magic(self) -> Vec { + let mut result = Vec::with_capacity(self.words.len() + 3); result.push(self.words.len().into()); result.extend(self.words); diff --git a/crates/conversions/src/felt252.rs b/crates/conversions/src/felt252.rs index e9b4208b68..0b65e24933 100644 --- a/crates/conversions/src/felt252.rs +++ b/crates/conversions/src/felt252.rs @@ -121,16 +121,16 @@ impl TryInferFormat for Felt252 { } pub trait SerializeAsFelt252Vec: Sized { - fn serialize_as_felt252(self, output: &mut Vec); + fn serialize_into_felt252_vec(self, output: &mut Vec); fn serialize_as_felt252_vec(self) -> Vec { let mut result = vec![]; - self.serialize_as_felt252(&mut result); + self.serialize_into_felt252_vec(&mut result); result } } impl SerializeAsFelt252Vec for Vec { - fn serialize_as_felt252(self, output: &mut Vec) { + fn serialize_into_felt252_vec(self, output: &mut Vec) { output.extend(self); } @@ -140,22 +140,22 @@ impl SerializeAsFelt252Vec for Vec { } impl SerializeAsFelt252Vec for Result { - fn serialize_as_felt252(self, output: &mut Vec) { + fn serialize_into_felt252_vec(self, output: &mut Vec) { match self { Ok(val) => { output.push(Felt252::from(0)); - val.serialize_as_felt252(output); + val.serialize_into_felt252_vec(output); } Err(err) => { output.push(Felt252::from(1)); - err.serialize_as_felt252(output); + err.serialize_into_felt252_vec(output); } } } } impl SerializeAsFelt252Vec for &str { - fn serialize_as_felt252(self, output: &mut Vec) { + fn serialize_into_felt252_vec(self, output: &mut Vec) { output.extend(self.serialize_as_felt252_vec()); } diff --git a/crates/sncast/src/lib.rs b/crates/sncast/src/lib.rs index 1c281b0c20..a72d30d270 100644 --- a/crates/sncast/src/lib.rs +++ b/crates/sncast/src/lib.rs @@ -473,28 +473,28 @@ pub enum WaitForTransactionError { } impl SerializeAsFelt252Vec for WaitForTransactionError { - fn serialize_as_felt252(self, output: &mut Vec) { + fn serialize_into_felt252_vec(self, output: &mut Vec) { match self { WaitForTransactionError::TransactionError(err) => { output.push(Felt252::from(0)); - err.serialize_as_felt252(output); + err.serialize_into_felt252_vec(output); } WaitForTransactionError::TimedOut => output.push(Felt252::from(1)), WaitForTransactionError::ProviderError(err) => { output.push(Felt252::from(2)); - err.serialize_as_felt252(output); + err.serialize_into_felt252_vec(output); } } } } impl SerializeAsFelt252Vec for TransactionError { - fn serialize_as_felt252(self, output: &mut Vec) { + fn serialize_into_felt252_vec(self, output: &mut Vec) { match self { TransactionError::Rejected => output.push(Felt252::from(0)), TransactionError::Reverted(err) => { output.push(Felt252::from(1)); - err.data.as_str().serialize_as_felt252(output); + err.data.as_str().serialize_into_felt252_vec(output); } } } diff --git a/crates/sncast/src/response/errors.rs b/crates/sncast/src/response/errors.rs index c6b1c05100..32927bfa1a 100644 --- a/crates/sncast/src/response/errors.rs +++ b/crates/sncast/src/response/errors.rs @@ -22,23 +22,23 @@ pub enum StarknetCommandError { } impl SerializeAsFelt252Vec for StarknetCommandError { - fn serialize_as_felt252(self, output: &mut Vec) { + fn serialize_into_felt252_vec(self, output: &mut Vec) { match self { StarknetCommandError::UnknownError(err) => { output.push(Felt252::from(0)); - err.to_string().as_str().serialize_as_felt252(output); + err.to_string().as_str().serialize_into_felt252_vec(output); } StarknetCommandError::ContractArtifactsNotFound(err) => { output.push(Felt252::from(1)); - err.data.as_str().serialize_as_felt252(output); + err.data.as_str().serialize_into_felt252_vec(output); } StarknetCommandError::WaitForTransactionError(err) => { output.push(Felt252::from(2)); - err.serialize_as_felt252(output); + err.serialize_into_felt252_vec(output); } StarknetCommandError::ProviderError(err) => { output.push(Felt252::from(3)); - err.serialize_as_felt252(output); + err.serialize_into_felt252_vec(output); } } } @@ -63,16 +63,16 @@ pub enum SNCastProviderError { } impl SerializeAsFelt252Vec for SNCastProviderError { - fn serialize_as_felt252(self, output: &mut Vec) { + fn serialize_into_felt252_vec(self, output: &mut Vec) { match self { SNCastProviderError::StarknetError(err) => { output.push(Felt252::from(0)); - err.serialize_as_felt252(output); + err.serialize_into_felt252_vec(output); } SNCastProviderError::RateLimited => output.push(Felt252::from(1)), SNCastProviderError::UnknownError(err) => { output.push(Felt252::from(2)); - err.to_string().as_str().serialize_as_felt252(output); + err.to_string().as_str().serialize_into_felt252_vec(output); } } } @@ -179,7 +179,7 @@ impl From for SNCastStarknetError { } impl SerializeAsFelt252Vec for SNCastStarknetError { - fn serialize_as_felt252(self, output: &mut Vec) { + fn serialize_into_felt252_vec(self, output: &mut Vec) { match self { SNCastStarknetError::FailedToReceiveTransaction => output.push(Felt252::from(0)), SNCastStarknetError::ContractNotFound => output.push(Felt252::from(1)), @@ -189,12 +189,14 @@ impl SerializeAsFelt252Vec for SNCastStarknetError { SNCastStarknetError::TransactionHashNotFound => output.push(Felt252::from(5)), SNCastStarknetError::ContractError(err) => { output.push(Felt252::from(6)); - err.revert_error.as_str().serialize_as_felt252(output); + err.revert_error.as_str().serialize_into_felt252_vec(output); } SNCastStarknetError::TransactionExecutionError(err) => { output.push(Felt252::from(7)); output.push(Felt252::from(err.transaction_index)); - err.execution_error.as_str().serialize_as_felt252(output); + err.execution_error + .as_str() + .serialize_into_felt252_vec(output); } SNCastStarknetError::ClassAlreadyDeclared => output.push(Felt252::from(8)), SNCastStarknetError::InvalidTransactionNonce => output.push(Felt252::from(9)), @@ -202,7 +204,7 @@ impl SerializeAsFelt252Vec for SNCastStarknetError { SNCastStarknetError::InsufficientAccountBalance => output.push(Felt252::from(11)), SNCastStarknetError::ValidationFailure(err) => { output.push(Felt252::from(12)); - err.as_str().serialize_as_felt252(output); + err.as_str().serialize_into_felt252_vec(output); } SNCastStarknetError::CompilationFailed => output.push(Felt252::from(13)), SNCastStarknetError::ContractClassSizeIsTooLarge => output.push(Felt252::from(14)), @@ -213,7 +215,7 @@ impl SerializeAsFelt252Vec for SNCastStarknetError { SNCastStarknetError::UnsupportedContractClassVersion => output.push(Felt252::from(19)), SNCastStarknetError::UnexpectedError(err) => { output.push(Felt252::from(20)); - err.to_string().as_str().serialize_as_felt252(output); + err.to_string().as_str().serialize_into_felt252_vec(output); } } } diff --git a/crates/sncast/src/response/structs.rs b/crates/sncast/src/response/structs.rs index dc7354adf9..b4ca0a7da6 100644 --- a/crates/sncast/src/response/structs.rs +++ b/crates/sncast/src/response/structs.rs @@ -46,7 +46,7 @@ pub struct CallResponse { impl CommandResponse for CallResponse {} impl SerializeAsFelt252Vec for CallResponse { - fn serialize_as_felt252(self, output: &mut Vec) { + fn serialize_into_felt252_vec(self, output: &mut Vec) { output.push(Felt252::from(self.response.len())); output.extend(self.response.iter().map(|el| Felt252::from_(el.0))); } @@ -59,7 +59,7 @@ pub struct InvokeResponse { impl CommandResponse for InvokeResponse {} impl SerializeAsFelt252Vec for InvokeResponse { - fn serialize_as_felt252(self, output: &mut Vec) { + fn serialize_into_felt252_vec(self, output: &mut Vec) { output.push(Felt252::from_(self.transaction_hash.0)); } } @@ -72,7 +72,7 @@ pub struct DeployResponse { impl CommandResponse for DeployResponse {} impl SerializeAsFelt252Vec for DeployResponse { - fn serialize_as_felt252(self, output: &mut Vec) { + fn serialize_into_felt252_vec(self, output: &mut Vec) { output.extend([ Felt252::from_(self.contract_address.0), Felt252::from_(self.transaction_hash.0), @@ -88,7 +88,7 @@ pub struct DeclareResponse { impl CommandResponse for DeclareResponse {} impl SerializeAsFelt252Vec for DeclareResponse { - fn serialize_as_felt252(self, output: &mut Vec) { + fn serialize_into_felt252_vec(self, output: &mut Vec) { output.extend([ Felt252::from_(self.class_hash.0), Felt252::from_(self.transaction_hash.0),