use alloc::{format, string::String, vec::Vec};
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use serde_with::serde_as;
use crate::{
serde::{byte_array::base64, unsigned_field_element::UfeHex},
types::FieldElement,
};
use super::{serde_impls::NumAsHex, *};
#[cfg(all(not(no_rc), not(no_sync), target_has_atomic = "ptr"))]
pub type OwnedPtr<T> = alloc::sync::Arc<T>;
#[cfg(not(all(not(no_rc), not(no_sync), target_has_atomic = "ptr")))]
pub type OwnedPtr<T> = alloc::boxed::Box<T>;
const QUERY_VERSION_OFFSET: FieldElement = FieldElement::from_mont([
18446744073700081665,
17407,
18446744073709551584,
576460752142434320,
]);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum BlockStatus {
#[serde(rename = "PENDING")]
Pending,
#[serde(rename = "ACCEPTED_ON_L2")]
AcceptedOnL2,
#[serde(rename = "ACCEPTED_ON_L1")]
AcceptedOnL1,
#[serde(rename = "REJECTED")]
Rejected,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum BlockTag {
#[serde(rename = "latest")]
Latest,
#[serde(rename = "pending")]
Pending,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct BlockWithTxHashes {
pub status: BlockStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub parent_hash: FieldElement,
pub block_number: u64,
#[serde_as(as = "UfeHex")]
pub new_root: FieldElement,
pub timestamp: u64,
#[serde_as(as = "UfeHex")]
pub sequencer_address: FieldElement,
pub l1_gas_price: ResourcePrice,
pub starknet_version: String,
#[serde_as(as = "Vec<UfeHex>")]
pub transactions: Vec<FieldElement>,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct BlockWithTxs {
pub status: BlockStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub parent_hash: FieldElement,
pub block_number: u64,
#[serde_as(as = "UfeHex")]
pub new_root: FieldElement,
pub timestamp: u64,
#[serde_as(as = "UfeHex")]
pub sequencer_address: FieldElement,
pub l1_gas_price: ResourcePrice,
pub starknet_version: String,
pub transactions: Vec<Transaction>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BroadcastedDeclareTransactionV1 {
pub sender_address: FieldElement,
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub contract_class: OwnedPtr<CompressedLegacyContractClass>,
pub is_query: bool,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BroadcastedDeclareTransactionV2 {
pub sender_address: FieldElement,
pub compiled_class_hash: FieldElement,
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub contract_class: OwnedPtr<FlattenedSierraClass>,
pub is_query: bool,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BroadcastedDeployAccountTransaction {
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub contract_address_salt: FieldElement,
pub constructor_calldata: Vec<FieldElement>,
pub class_hash: FieldElement,
pub is_query: bool,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BroadcastedInvokeTransaction {
pub sender_address: FieldElement,
pub calldata: Vec<FieldElement>,
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub is_query: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum CallType {
#[serde(rename = "DELEGATE")]
Delegate,
#[serde(rename = "LIBRARY_CALL")]
LibraryCall,
#[serde(rename = "CALL")]
Call,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct CompressedLegacyContractClass {
#[serde(with = "base64")]
pub program: Vec<u8>,
pub entry_points_by_type: LegacyEntryPointsByType,
#[serde(skip_serializing_if = "Option::is_none")]
pub abi: Option<Vec<LegacyContractAbiEntry>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct ContractErrorData {
pub revert_error: String,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct ContractStorageDiffItem {
#[serde_as(as = "UfeHex")]
pub address: FieldElement,
pub storage_entries: Vec<StorageEntry>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum DataAvailabilityMode {
#[serde(rename = "L1")]
L1,
#[serde(rename = "L2")]
L2,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DeclareTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub finality_status: TransactionFinalityStatus,
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub execution_resources: ExecutionResources,
pub execution_result: ExecutionResult,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DeclareTransactionTrace {
pub validate_invocation: Option<FunctionInvocation>,
pub fee_transfer_invocation: Option<FunctionInvocation>,
pub state_diff: Option<StateDiff>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DeclareTransactionV0 {
pub transaction_hash: FieldElement,
pub sender_address: FieldElement,
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub class_hash: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DeclareTransactionV1 {
pub transaction_hash: FieldElement,
pub sender_address: FieldElement,
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub class_hash: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DeclareTransactionV2 {
pub transaction_hash: FieldElement,
pub sender_address: FieldElement,
pub compiled_class_hash: FieldElement,
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub class_hash: FieldElement,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct DeclaredClassItem {
#[serde_as(as = "UfeHex")]
pub class_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub compiled_class_hash: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DeployAccountTransaction {
pub transaction_hash: FieldElement,
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub contract_address_salt: FieldElement,
pub constructor_calldata: Vec<FieldElement>,
pub class_hash: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DeployAccountTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub finality_status: TransactionFinalityStatus,
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub execution_resources: ExecutionResources,
pub execution_result: ExecutionResult,
pub contract_address: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DeployAccountTransactionTrace {
pub validate_invocation: Option<FunctionInvocation>,
pub constructor_invocation: FunctionInvocation,
pub fee_transfer_invocation: Option<FunctionInvocation>,
pub state_diff: Option<StateDiff>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DeployTransaction {
pub transaction_hash: FieldElement,
pub version: u64,
pub contract_address_salt: FieldElement,
pub constructor_calldata: Vec<FieldElement>,
pub class_hash: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DeployTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub finality_status: TransactionFinalityStatus,
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub execution_resources: ExecutionResources,
pub execution_result: ExecutionResult,
pub contract_address: FieldElement,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct DeployedContractItem {
#[serde_as(as = "UfeHex")]
pub address: FieldElement,
#[serde_as(as = "UfeHex")]
pub class_hash: FieldElement,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct EmittedEvent {
#[serde_as(as = "UfeHex")]
pub from_address: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub keys: Vec<FieldElement>,
#[serde_as(as = "Vec<UfeHex>")]
pub data: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub block_hash: FieldElement,
pub block_number: u64,
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum EntryPointType {
#[serde(rename = "EXTERNAL")]
External,
#[serde(rename = "L1_HANDLER")]
L1Handler,
#[serde(rename = "CONSTRUCTOR")]
Constructor,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct EntryPointsByType {
#[serde(rename = "CONSTRUCTOR")]
pub constructor: Vec<SierraEntryPoint>,
#[serde(rename = "EXTERNAL")]
pub external: Vec<SierraEntryPoint>,
#[serde(rename = "L1_HANDLER")]
pub l1_handler: Vec<SierraEntryPoint>,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct Event {
#[serde_as(as = "UfeHex")]
pub from_address: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub keys: Vec<FieldElement>,
#[serde_as(as = "Vec<UfeHex>")]
pub data: Vec<FieldElement>,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct EventFilter {
#[serde(skip_serializing_if = "Option::is_none")]
pub from_block: Option<BlockId>,
#[serde(skip_serializing_if = "Option::is_none")]
pub to_block: Option<BlockId>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde_as(as = "Option<UfeHex>")]
pub address: Option<FieldElement>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde_as(as = "Option<Vec<Vec<UfeHex>>>")]
pub keys: Option<Vec<Vec<FieldElement>>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct EventFilterWithPage {
#[serde(flatten)]
pub event_filter: EventFilter,
#[serde(flatten)]
pub result_page_request: ResultPageRequest,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct EventsChunk {
pub events: Vec<EmittedEvent>,
#[serde(skip_serializing_if = "Option::is_none")]
pub continuation_token: Option<String>,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct ExecutionResources {
#[serde_as(as = "NumAsHex")]
pub steps: u64,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde_as(as = "Option<NumAsHex>")]
pub memory_holes: Option<u64>,
#[serde_as(as = "NumAsHex")]
pub range_check_builtin_applications: u64,
#[serde_as(as = "NumAsHex")]
pub pedersen_builtin_applications: u64,
#[serde_as(as = "NumAsHex")]
pub poseidon_builtin_applications: u64,
#[serde_as(as = "NumAsHex")]
pub ec_op_builtin_applications: u64,
#[serde_as(as = "NumAsHex")]
pub ecdsa_builtin_applications: u64,
#[serde_as(as = "NumAsHex")]
pub bitwise_builtin_applications: u64,
#[serde_as(as = "NumAsHex")]
pub keccak_builtin_applications: u64,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct FeeEstimate {
#[serde_as(as = "NumAsHex")]
pub gas_consumed: u64,
#[serde_as(as = "NumAsHex")]
pub gas_price: u64,
#[serde_as(as = "NumAsHex")]
pub overall_fee: u64,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct FlattenedSierraClass {
#[serde_as(as = "Vec<UfeHex>")]
pub sierra_program: Vec<FieldElement>,
pub contract_class_version: String,
pub entry_points_by_type: EntryPointsByType,
pub abi: String,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct FunctionCall {
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub entry_point_selector: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub calldata: Vec<FieldElement>,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct FunctionInvocation {
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub entry_point_selector: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub calldata: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub caller_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub class_hash: FieldElement,
pub entry_point_type: EntryPointType,
pub call_type: CallType,
#[serde_as(as = "Vec<UfeHex>")]
pub result: Vec<FieldElement>,
pub calls: Vec<FunctionInvocation>,
pub events: Vec<OrderedEvent>,
pub messages: Vec<OrderedMessage>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum FunctionStateMutability {
#[serde(rename = "view")]
View,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct InvokeTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub finality_status: TransactionFinalityStatus,
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub execution_resources: ExecutionResources,
pub execution_result: ExecutionResult,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct InvokeTransactionTrace {
pub validate_invocation: Option<FunctionInvocation>,
pub execute_invocation: ExecuteInvocation,
pub fee_transfer_invocation: Option<FunctionInvocation>,
pub state_diff: Option<StateDiff>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct InvokeTransactionV0 {
pub transaction_hash: FieldElement,
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub contract_address: FieldElement,
pub entry_point_selector: FieldElement,
pub calldata: Vec<FieldElement>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct InvokeTransactionV1 {
pub transaction_hash: FieldElement,
pub sender_address: FieldElement,
pub calldata: Vec<FieldElement>,
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct L1HandlerTransaction {
pub transaction_hash: FieldElement,
pub version: u64,
pub nonce: u64,
pub contract_address: FieldElement,
pub entry_point_selector: FieldElement,
pub calldata: Vec<FieldElement>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct L1HandlerTransactionReceipt {
pub message_hash: Hash256,
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub finality_status: TransactionFinalityStatus,
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub execution_resources: ExecutionResources,
pub execution_result: ExecutionResult,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct L1HandlerTransactionTrace {
pub function_invocation: FunctionInvocation,
pub state_diff: Option<StateDiff>,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct LegacyContractEntryPoint {
#[serde_as(as = "NumAsHex")]
pub offset: u64,
#[serde_as(as = "UfeHex")]
pub selector: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct LegacyEntryPointsByType {
#[serde(rename = "CONSTRUCTOR")]
pub constructor: Vec<LegacyContractEntryPoint>,
#[serde(rename = "EXTERNAL")]
pub external: Vec<LegacyContractEntryPoint>,
#[serde(rename = "L1_HANDLER")]
pub l1_handler: Vec<LegacyContractEntryPoint>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct LegacyEventAbiEntry {
pub r#type: LegacyEventAbiType,
pub name: String,
pub keys: Vec<LegacyTypedParameter>,
pub data: Vec<LegacyTypedParameter>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum LegacyEventAbiType {
#[serde(rename = "event")]
Event,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct LegacyFunctionAbiEntry {
pub r#type: LegacyFunctionAbiType,
pub name: String,
pub inputs: Vec<LegacyTypedParameter>,
pub outputs: Vec<LegacyTypedParameter>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "stateMutability")]
pub state_mutability: Option<FunctionStateMutability>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum LegacyFunctionAbiType {
#[serde(rename = "function")]
Function,
#[serde(rename = "l1_handler")]
L1Handler,
#[serde(rename = "constructor")]
Constructor,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct LegacyStructAbiEntry {
pub r#type: LegacyStructAbiType,
pub name: String,
pub size: u64,
pub members: Vec<LegacyStructMember>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum LegacyStructAbiType {
#[serde(rename = "struct")]
Struct,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct LegacyStructMember {
pub name: String,
pub r#type: String,
pub offset: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct LegacyTypedParameter {
pub name: String,
pub r#type: String,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct MsgFromL1 {
pub from_address: EthAddress,
#[serde_as(as = "UfeHex")]
pub to_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub entry_point_selector: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub payload: Vec<FieldElement>,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct MsgToL1 {
#[serde_as(as = "UfeHex")]
pub from_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub to_address: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub payload: Vec<FieldElement>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct NoTraceAvailableErrorData {
pub status: SequencerTransactionStatus,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct NonceUpdate {
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub nonce: FieldElement,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct OrderedEvent {
pub order: u64,
#[serde_as(as = "Vec<UfeHex>")]
pub keys: Vec<FieldElement>,
#[serde_as(as = "Vec<UfeHex>")]
pub data: Vec<FieldElement>,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct OrderedMessage {
pub order: u64,
#[serde_as(as = "UfeHex")]
pub from_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub to_address: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub payload: Vec<FieldElement>,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct PendingBlockWithTxHashes {
#[serde_as(as = "Vec<UfeHex>")]
pub transactions: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub parent_hash: FieldElement,
pub timestamp: u64,
#[serde_as(as = "UfeHex")]
pub sequencer_address: FieldElement,
pub l1_gas_price: ResourcePrice,
pub starknet_version: String,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct PendingBlockWithTxs {
pub transactions: Vec<Transaction>,
#[serde_as(as = "UfeHex")]
pub parent_hash: FieldElement,
pub timestamp: u64,
#[serde_as(as = "UfeHex")]
pub sequencer_address: FieldElement,
pub l1_gas_price: ResourcePrice,
pub starknet_version: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PendingDeclareTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub execution_resources: ExecutionResources,
pub execution_result: ExecutionResult,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PendingDeployAccountTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub execution_resources: ExecutionResources,
pub execution_result: ExecutionResult,
pub contract_address: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PendingInvokeTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub execution_resources: ExecutionResources,
pub execution_result: ExecutionResult,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PendingL1HandlerTransactionReceipt {
pub message_hash: Hash256,
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub execution_resources: ExecutionResources,
pub execution_result: ExecutionResult,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct PendingStateUpdate {
#[serde_as(as = "UfeHex")]
pub old_root: FieldElement,
pub state_diff: StateDiff,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct ReplacedClassItem {
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub class_hash: FieldElement,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct ResourceLimits {
#[serde_as(as = "NumAsHex")]
pub max_amount: u64,
#[serde_as(as = "NumAsHex")]
pub max_price_per_unit: u64,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct ResourcePrice {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde_as(as = "Option<NumAsHex>")]
pub price_in_strk: Option<u64>,
#[serde_as(as = "NumAsHex")]
pub price_in_wei: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct ResultPageRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub continuation_token: Option<String>,
pub chunk_size: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct RevertedInvocation {
pub revert_reason: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum SequencerTransactionStatus {
#[serde(rename = "RECEIVED")]
Received,
#[serde(rename = "REJECTED")]
Rejected,
#[serde(rename = "ACCEPTED_ON_L2")]
AcceptedOnL2,
#[serde(rename = "ACCEPTED_ON_L1")]
AcceptedOnL1,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct SierraEntryPoint {
#[serde_as(as = "UfeHex")]
pub selector: FieldElement,
pub function_idx: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct SimulatedTransaction {
pub transaction_trace: TransactionTrace,
pub fee_estimation: FeeEstimate,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum SimulationFlag {
#[serde(rename = "SKIP_VALIDATE")]
SkipValidate,
#[serde(rename = "SKIP_FEE_CHARGE")]
SkipFeeCharge,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum StarknetError {
FailedToReceiveTransaction,
ContractNotFound,
BlockNotFound,
InvalidTransactionIndex,
ClassHashNotFound,
TransactionHashNotFound,
PageSizeTooBig,
NoBlocks,
InvalidContinuationToken,
TooManyKeysInFilter,
ContractError(ContractErrorData),
ClassAlreadyDeclared,
InvalidTransactionNonce,
InsufficientMaxFee,
InsufficientAccountBalance,
ValidationFailure,
CompilationFailed,
ContractClassSizeIsTooLarge,
NonAccount,
DuplicateTx,
CompiledClassHashMismatch,
UnsupportedTxVersion,
UnsupportedContractClassVersion,
UnexpectedError(String),
NoTraceAvailable(NoTraceAvailableErrorData),
InvalidTransactionHash,
}
#[cfg(feature = "std")]
impl std::error::Error for StarknetError {}
impl core::fmt::Display for StarknetError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
Self::FailedToReceiveTransaction => write!(f, "FailedToReceiveTransaction"),
Self::ContractNotFound => write!(f, "ContractNotFound"),
Self::BlockNotFound => write!(f, "BlockNotFound"),
Self::InvalidTransactionIndex => write!(f, "InvalidTransactionIndex"),
Self::ClassHashNotFound => write!(f, "ClassHashNotFound"),
Self::TransactionHashNotFound => write!(f, "TransactionHashNotFound"),
Self::PageSizeTooBig => write!(f, "PageSizeTooBig"),
Self::NoBlocks => write!(f, "NoBlocks"),
Self::InvalidContinuationToken => write!(f, "InvalidContinuationToken"),
Self::TooManyKeysInFilter => write!(f, "TooManyKeysInFilter"),
Self::ContractError(_) => write!(f, "ContractError"),
Self::ClassAlreadyDeclared => write!(f, "ClassAlreadyDeclared"),
Self::InvalidTransactionNonce => write!(f, "InvalidTransactionNonce"),
Self::InsufficientMaxFee => write!(f, "InsufficientMaxFee"),
Self::InsufficientAccountBalance => write!(f, "InsufficientAccountBalance"),
Self::ValidationFailure => write!(f, "ValidationFailure"),
Self::CompilationFailed => write!(f, "CompilationFailed"),
Self::ContractClassSizeIsTooLarge => write!(f, "ContractClassSizeIsTooLarge"),
Self::NonAccount => write!(f, "NonAccount"),
Self::DuplicateTx => write!(f, "DuplicateTx"),
Self::CompiledClassHashMismatch => write!(f, "CompiledClassHashMismatch"),
Self::UnsupportedTxVersion => write!(f, "UnsupportedTxVersion"),
Self::UnsupportedContractClassVersion => write!(f, "UnsupportedContractClassVersion"),
Self::UnexpectedError(_) => write!(f, "UnexpectedError"),
Self::NoTraceAvailable(_) => write!(f, "NoTraceAvailable"),
Self::InvalidTransactionHash => write!(f, "InvalidTransactionHash"),
}
}
}
impl StarknetError {
pub fn message(&self) -> &'static str {
match self {
Self::FailedToReceiveTransaction => "Failed to write transaction",
Self::ContractNotFound => "Contract not found",
Self::BlockNotFound => "Block not found",
Self::InvalidTransactionIndex => "Invalid transaction index in a block",
Self::ClassHashNotFound => "Class hash not found",
Self::TransactionHashNotFound => "Transaction hash not found",
Self::PageSizeTooBig => "Requested page size is too big",
Self::NoBlocks => "There are no blocks",
Self::InvalidContinuationToken => "The supplied continuation token is invalid or unknown",
Self::TooManyKeysInFilter => "Too many keys provided in a filter",
Self::ContractError(_) => "Contract error",
Self::ClassAlreadyDeclared => "Class already declared",
Self::InvalidTransactionNonce => "Invalid transaction nonce",
Self::InsufficientMaxFee => "Max fee is smaller than the minimal transaction cost (validation plus fee transfer)",
Self::InsufficientAccountBalance => "Account balance is smaller than the transaction's max_fee",
Self::ValidationFailure => "Account validation failed",
Self::CompilationFailed => "Compilation failed",
Self::ContractClassSizeIsTooLarge => "Contract class size it too large",
Self::NonAccount => "Sender address in not an account contract",
Self::DuplicateTx => "A transaction with the same hash already exists in the mempool",
Self::CompiledClassHashMismatch => "the compiled class hash did not match the one supplied in the transaction",
Self::UnsupportedTxVersion => "the transaction version is not supported",
Self::UnsupportedContractClassVersion => "the contract class version is not supported",
Self::UnexpectedError(_) => "An unexpected error occurred",
Self::NoTraceAvailable(_) => "No trace available for transaction",
Self::InvalidTransactionHash => "Invalid transaction hash",
}
}
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct StateDiff {
pub storage_diffs: Vec<ContractStorageDiffItem>,
#[serde_as(as = "Vec<UfeHex>")]
pub deprecated_declared_classes: Vec<FieldElement>,
pub declared_classes: Vec<DeclaredClassItem>,
pub deployed_contracts: Vec<DeployedContractItem>,
pub replaced_classes: Vec<ReplacedClassItem>,
pub nonces: Vec<NonceUpdate>,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct StateUpdate {
#[serde_as(as = "UfeHex")]
pub block_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub old_root: FieldElement,
#[serde_as(as = "UfeHex")]
pub new_root: FieldElement,
pub state_diff: StateDiff,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct StorageEntry {
#[serde_as(as = "UfeHex")]
pub key: FieldElement,
#[serde_as(as = "UfeHex")]
pub value: FieldElement,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct SyncStatus {
#[serde_as(as = "UfeHex")]
pub starting_block_hash: FieldElement,
pub starting_block_num: u64,
#[serde_as(as = "UfeHex")]
pub current_block_hash: FieldElement,
pub current_block_num: u64,
#[serde_as(as = "UfeHex")]
pub highest_block_hash: FieldElement,
pub highest_block_num: u64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum TransactionExecutionStatus {
#[serde(rename = "SUCCEEDED")]
Succeeded,
#[serde(rename = "REVERTED")]
Reverted,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum TransactionFinalityStatus {
#[serde(rename = "ACCEPTED_ON_L2")]
AcceptedOnL2,
#[serde(rename = "ACCEPTED_ON_L1")]
AcceptedOnL1,
}
#[serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct TransactionTraceWithHash {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
pub trace_root: TransactionTrace,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AddDeclareTransactionRequest {
pub declare_transaction: BroadcastedDeclareTransaction,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AddDeclareTransactionRequestRef<'a> {
pub declare_transaction: &'a BroadcastedDeclareTransaction,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AddDeployAccountTransactionRequest {
pub deploy_account_transaction: BroadcastedDeployAccountTransaction,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AddDeployAccountTransactionRequestRef<'a> {
pub deploy_account_transaction: &'a BroadcastedDeployAccountTransaction,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AddInvokeTransactionRequest {
pub invoke_transaction: BroadcastedInvokeTransaction,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AddInvokeTransactionRequestRef<'a> {
pub invoke_transaction: &'a BroadcastedInvokeTransaction,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BlockHashAndNumberRequest;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BlockNumberRequest;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CallRequest {
pub request: FunctionCall,
pub block_id: BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CallRequestRef<'a> {
pub request: &'a FunctionCall,
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ChainIdRequest;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EstimateFeeRequest {
pub request: Vec<BroadcastedTransaction>,
pub block_id: BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EstimateFeeRequestRef<'a> {
pub request: &'a [BroadcastedTransaction],
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EstimateMessageFeeRequest {
pub message: MsgFromL1,
pub block_id: BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EstimateMessageFeeRequestRef<'a> {
pub message: &'a MsgFromL1,
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetBlockTransactionCountRequest {
pub block_id: BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetBlockTransactionCountRequestRef<'a> {
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetBlockWithTxHashesRequest {
pub block_id: BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetBlockWithTxHashesRequestRef<'a> {
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetBlockWithTxsRequest {
pub block_id: BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetBlockWithTxsRequestRef<'a> {
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetClassAtRequest {
pub block_id: BlockId,
pub contract_address: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetClassAtRequestRef<'a> {
pub block_id: &'a BlockId,
pub contract_address: &'a FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetClassHashAtRequest {
pub block_id: BlockId,
pub contract_address: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetClassHashAtRequestRef<'a> {
pub block_id: &'a BlockId,
pub contract_address: &'a FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetClassRequest {
pub block_id: BlockId,
pub class_hash: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetClassRequestRef<'a> {
pub block_id: &'a BlockId,
pub class_hash: &'a FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetEventsRequest {
pub filter: EventFilterWithPage,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetEventsRequestRef<'a> {
pub filter: &'a EventFilterWithPage,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetNonceRequest {
pub block_id: BlockId,
pub contract_address: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetNonceRequestRef<'a> {
pub block_id: &'a BlockId,
pub contract_address: &'a FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetStateUpdateRequest {
pub block_id: BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetStateUpdateRequestRef<'a> {
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetStorageAtRequest {
pub contract_address: FieldElement,
pub key: FieldElement,
pub block_id: BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetStorageAtRequestRef<'a> {
pub contract_address: &'a FieldElement,
pub key: &'a FieldElement,
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetTransactionByBlockIdAndIndexRequest {
pub block_id: BlockId,
pub index: u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetTransactionByBlockIdAndIndexRequestRef<'a> {
pub block_id: &'a BlockId,
pub index: &'a u64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetTransactionByHashRequest {
pub transaction_hash: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetTransactionByHashRequestRef<'a> {
pub transaction_hash: &'a FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetTransactionReceiptRequest {
pub transaction_hash: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetTransactionReceiptRequestRef<'a> {
pub transaction_hash: &'a FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetTransactionStatusRequest {
pub transaction_hash: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetTransactionStatusRequestRef<'a> {
pub transaction_hash: &'a FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SimulateTransactionsRequest {
pub block_id: BlockId,
pub transactions: Vec<BroadcastedTransaction>,
pub simulation_flags: Vec<SimulationFlag>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SimulateTransactionsRequestRef<'a> {
pub block_id: &'a BlockId,
pub transactions: &'a [BroadcastedTransaction],
pub simulation_flags: &'a [SimulationFlag],
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SpecVersionRequest;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SyncingRequest;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TraceBlockTransactionsRequest {
pub block_id: BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TraceBlockTransactionsRequestRef<'a> {
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TraceTransactionRequest {
pub transaction_hash: FieldElement,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TraceTransactionRequestRef<'a> {
pub transaction_hash: &'a FieldElement,
}
impl Serialize for BroadcastedDeclareTransactionV1 {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub sender_address: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub max_fee: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub version: &'a FieldElement,
#[serde_as(as = "[UfeHex]")]
pub signature: &'a [FieldElement],
#[serde_as(as = "UfeHex")]
pub nonce: &'a FieldElement,
pub contract_class: &'a CompressedLegacyContractClass,
}
let r#type = "DECLARE";
let version = &(if self.is_query {
FieldElement::ONE + QUERY_VERSION_OFFSET
} else {
FieldElement::ONE
});
let tagged = Tagged {
r#type,
sender_address: &self.sender_address,
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
contract_class: &self.contract_class,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for BroadcastedDeclareTransactionV1 {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub sender_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub max_fee: FieldElement,
#[serde_as(as = "UfeHex")]
pub version: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub signature: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub nonce: FieldElement,
pub contract_class: CompressedLegacyContractClass,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DECLARE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
let is_query = if tagged.version == FieldElement::ONE {
false
} else if tagged.version == FieldElement::ONE + QUERY_VERSION_OFFSET {
true
} else {
return Err(serde::de::Error::custom("invalid `version` value"));
};
Ok(Self {
sender_address: tagged.sender_address,
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
contract_class: OwnedPtr::new(tagged.contract_class),
is_query,
})
}
}
impl Serialize for BroadcastedDeclareTransactionV2 {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub sender_address: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub compiled_class_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub max_fee: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub version: &'a FieldElement,
#[serde_as(as = "[UfeHex]")]
pub signature: &'a [FieldElement],
#[serde_as(as = "UfeHex")]
pub nonce: &'a FieldElement,
pub contract_class: &'a FlattenedSierraClass,
}
let r#type = "DECLARE";
let version = &(if self.is_query {
FieldElement::TWO + QUERY_VERSION_OFFSET
} else {
FieldElement::TWO
});
let tagged = Tagged {
r#type,
sender_address: &self.sender_address,
compiled_class_hash: &self.compiled_class_hash,
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
contract_class: &self.contract_class,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for BroadcastedDeclareTransactionV2 {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub sender_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub compiled_class_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub max_fee: FieldElement,
#[serde_as(as = "UfeHex")]
pub version: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub signature: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub nonce: FieldElement,
pub contract_class: FlattenedSierraClass,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DECLARE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
let is_query = if tagged.version == FieldElement::TWO {
false
} else if tagged.version == FieldElement::TWO + QUERY_VERSION_OFFSET {
true
} else {
return Err(serde::de::Error::custom("invalid `version` value"));
};
Ok(Self {
sender_address: tagged.sender_address,
compiled_class_hash: tagged.compiled_class_hash,
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
contract_class: OwnedPtr::new(tagged.contract_class),
is_query,
})
}
}
impl Serialize for BroadcastedDeployAccountTransaction {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub max_fee: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub version: &'a FieldElement,
#[serde_as(as = "[UfeHex]")]
pub signature: &'a [FieldElement],
#[serde_as(as = "UfeHex")]
pub nonce: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub contract_address_salt: &'a FieldElement,
#[serde_as(as = "[UfeHex]")]
pub constructor_calldata: &'a [FieldElement],
#[serde_as(as = "UfeHex")]
pub class_hash: &'a FieldElement,
}
let r#type = "DEPLOY_ACCOUNT";
let version = &(if self.is_query {
FieldElement::ONE + QUERY_VERSION_OFFSET
} else {
FieldElement::ONE
});
let tagged = Tagged {
r#type,
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
contract_address_salt: &self.contract_address_salt,
constructor_calldata: &self.constructor_calldata,
class_hash: &self.class_hash,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for BroadcastedDeployAccountTransaction {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub max_fee: FieldElement,
#[serde_as(as = "UfeHex")]
pub version: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub signature: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub nonce: FieldElement,
#[serde_as(as = "UfeHex")]
pub contract_address_salt: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub constructor_calldata: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub class_hash: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DEPLOY_ACCOUNT" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
let is_query = if tagged.version == FieldElement::ONE {
false
} else if tagged.version == FieldElement::ONE + QUERY_VERSION_OFFSET {
true
} else {
return Err(serde::de::Error::custom("invalid `version` value"));
};
Ok(Self {
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
contract_address_salt: tagged.contract_address_salt,
constructor_calldata: tagged.constructor_calldata,
class_hash: tagged.class_hash,
is_query,
})
}
}
impl Serialize for BroadcastedInvokeTransaction {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub sender_address: &'a FieldElement,
#[serde_as(as = "[UfeHex]")]
pub calldata: &'a [FieldElement],
#[serde_as(as = "UfeHex")]
pub max_fee: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub version: &'a FieldElement,
#[serde_as(as = "[UfeHex]")]
pub signature: &'a [FieldElement],
#[serde_as(as = "UfeHex")]
pub nonce: &'a FieldElement,
}
let r#type = "INVOKE";
let version = &(if self.is_query {
FieldElement::ONE + QUERY_VERSION_OFFSET
} else {
FieldElement::ONE
});
let tagged = Tagged {
r#type,
sender_address: &self.sender_address,
calldata: &self.calldata,
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for BroadcastedInvokeTransaction {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub sender_address: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub calldata: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub max_fee: FieldElement,
#[serde_as(as = "UfeHex")]
pub version: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub signature: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub nonce: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "INVOKE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
let is_query = if tagged.version == FieldElement::ONE {
false
} else if tagged.version == FieldElement::ONE + QUERY_VERSION_OFFSET {
true
} else {
return Err(serde::de::Error::custom("invalid `version` value"));
};
Ok(Self {
sender_address: tagged.sender_address,
calldata: tagged.calldata,
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
is_query,
})
}
}
impl Serialize for DeclareTransactionReceipt {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: &'a FieldElement,
pub finality_status: &'a TransactionFinalityStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: &'a FieldElement,
pub block_number: &'a u64,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
pub execution_resources: &'a ExecutionResources,
#[serde(flatten)]
pub execution_result: &'a ExecutionResult,
}
let r#type = "DECLARE";
let tagged = Tagged {
r#type,
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
finality_status: &self.finality_status,
block_hash: &self.block_hash,
block_number: &self.block_number,
messages_sent: &self.messages_sent,
events: &self.events,
execution_resources: &self.execution_resources,
execution_result: &self.execution_result,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for DeclareTransactionReceipt {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: FieldElement,
pub finality_status: TransactionFinalityStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub execution_resources: ExecutionResources,
#[serde(flatten)]
pub execution_result: ExecutionResult,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DECLARE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
transaction_hash: tagged.transaction_hash,
actual_fee: tagged.actual_fee,
finality_status: tagged.finality_status,
block_hash: tagged.block_hash,
block_number: tagged.block_number,
messages_sent: tagged.messages_sent,
events: tagged.events,
execution_resources: tagged.execution_resources,
execution_result: tagged.execution_result,
})
}
}
impl Serialize for DeclareTransactionTrace {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
struct Tagged<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub validate_invocation: &'a Option<FunctionInvocation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fee_transfer_invocation: &'a Option<FunctionInvocation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state_diff: &'a Option<StateDiff>,
pub r#type: &'a str,
}
let r#type = "DECLARE";
let tagged = Tagged {
validate_invocation: &self.validate_invocation,
fee_transfer_invocation: &self.fee_transfer_invocation,
state_diff: &self.state_diff,
r#type,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for DeclareTransactionTrace {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
#[serde(skip_serializing_if = "Option::is_none")]
pub validate_invocation: Option<FunctionInvocation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fee_transfer_invocation: Option<FunctionInvocation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state_diff: Option<StateDiff>,
pub r#type: Option<String>,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DECLARE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
validate_invocation: tagged.validate_invocation,
fee_transfer_invocation: tagged.fee_transfer_invocation,
state_diff: tagged.state_diff,
})
}
}
impl Serialize for DeclareTransactionV0 {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub sender_address: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub max_fee: &'a FieldElement,
#[serde_as(as = "NumAsHex")]
pub version: &'a u64,
#[serde_as(as = "[UfeHex]")]
pub signature: &'a [FieldElement],
#[serde_as(as = "UfeHex")]
pub class_hash: &'a FieldElement,
}
let r#type = "DECLARE";
let version = &0;
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
r#type,
sender_address: &self.sender_address,
max_fee: &self.max_fee,
version,
signature: &self.signature,
class_hash: &self.class_hash,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for DeclareTransactionV0 {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub sender_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub max_fee: FieldElement,
#[serde_as(as = "Option<NumAsHex>")]
pub version: Option<u64>,
#[serde_as(as = "Vec<UfeHex>")]
pub signature: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub class_hash: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DECLARE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
if let Some(tag_field) = &tagged.version {
if tag_field != &0 {
return Err(serde::de::Error::custom("invalid `version` value"));
}
}
Ok(Self {
transaction_hash: tagged.transaction_hash,
sender_address: tagged.sender_address,
max_fee: tagged.max_fee,
signature: tagged.signature,
class_hash: tagged.class_hash,
})
}
}
impl Serialize for DeclareTransactionV1 {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub sender_address: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub max_fee: &'a FieldElement,
#[serde_as(as = "NumAsHex")]
pub version: &'a u64,
#[serde_as(as = "[UfeHex]")]
pub signature: &'a [FieldElement],
#[serde_as(as = "UfeHex")]
pub nonce: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub class_hash: &'a FieldElement,
}
let r#type = "DECLARE";
let version = &1;
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
r#type,
sender_address: &self.sender_address,
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
class_hash: &self.class_hash,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for DeclareTransactionV1 {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub sender_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub max_fee: FieldElement,
#[serde_as(as = "Option<NumAsHex>")]
pub version: Option<u64>,
#[serde_as(as = "Vec<UfeHex>")]
pub signature: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub nonce: FieldElement,
#[serde_as(as = "UfeHex")]
pub class_hash: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DECLARE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
if let Some(tag_field) = &tagged.version {
if tag_field != &1 {
return Err(serde::de::Error::custom("invalid `version` value"));
}
}
Ok(Self {
transaction_hash: tagged.transaction_hash,
sender_address: tagged.sender_address,
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
class_hash: tagged.class_hash,
})
}
}
impl Serialize for DeclareTransactionV2 {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub sender_address: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub compiled_class_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub max_fee: &'a FieldElement,
#[serde_as(as = "NumAsHex")]
pub version: &'a u64,
#[serde_as(as = "[UfeHex]")]
pub signature: &'a [FieldElement],
#[serde_as(as = "UfeHex")]
pub nonce: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub class_hash: &'a FieldElement,
}
let r#type = "DECLARE";
let version = &2;
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
r#type,
sender_address: &self.sender_address,
compiled_class_hash: &self.compiled_class_hash,
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
class_hash: &self.class_hash,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for DeclareTransactionV2 {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub sender_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub compiled_class_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub max_fee: FieldElement,
#[serde_as(as = "Option<NumAsHex>")]
pub version: Option<u64>,
#[serde_as(as = "Vec<UfeHex>")]
pub signature: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub nonce: FieldElement,
#[serde_as(as = "UfeHex")]
pub class_hash: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DECLARE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
if let Some(tag_field) = &tagged.version {
if tag_field != &2 {
return Err(serde::de::Error::custom("invalid `version` value"));
}
}
Ok(Self {
transaction_hash: tagged.transaction_hash,
sender_address: tagged.sender_address,
compiled_class_hash: tagged.compiled_class_hash,
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
class_hash: tagged.class_hash,
})
}
}
impl Serialize for DeployAccountTransaction {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub max_fee: &'a FieldElement,
#[serde_as(as = "NumAsHex")]
pub version: &'a u64,
#[serde_as(as = "[UfeHex]")]
pub signature: &'a [FieldElement],
#[serde_as(as = "UfeHex")]
pub nonce: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub contract_address_salt: &'a FieldElement,
#[serde_as(as = "[UfeHex]")]
pub constructor_calldata: &'a [FieldElement],
#[serde_as(as = "UfeHex")]
pub class_hash: &'a FieldElement,
}
let r#type = "DEPLOY_ACCOUNT";
let version = &1;
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
r#type,
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
contract_address_salt: &self.contract_address_salt,
constructor_calldata: &self.constructor_calldata,
class_hash: &self.class_hash,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for DeployAccountTransaction {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub max_fee: FieldElement,
#[serde_as(as = "Option<NumAsHex>")]
pub version: Option<u64>,
#[serde_as(as = "Vec<UfeHex>")]
pub signature: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub nonce: FieldElement,
#[serde_as(as = "UfeHex")]
pub contract_address_salt: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub constructor_calldata: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub class_hash: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DEPLOY_ACCOUNT" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
if let Some(tag_field) = &tagged.version {
if tag_field != &1 {
return Err(serde::de::Error::custom("invalid `version` value"));
}
}
Ok(Self {
transaction_hash: tagged.transaction_hash,
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
contract_address_salt: tagged.contract_address_salt,
constructor_calldata: tagged.constructor_calldata,
class_hash: tagged.class_hash,
})
}
}
impl Serialize for DeployAccountTransactionReceipt {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: &'a FieldElement,
pub finality_status: &'a TransactionFinalityStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: &'a FieldElement,
pub block_number: &'a u64,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
pub execution_resources: &'a ExecutionResources,
#[serde(flatten)]
pub execution_result: &'a ExecutionResult,
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub contract_address: &'a FieldElement,
}
let r#type = "DEPLOY_ACCOUNT";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
finality_status: &self.finality_status,
block_hash: &self.block_hash,
block_number: &self.block_number,
messages_sent: &self.messages_sent,
events: &self.events,
execution_resources: &self.execution_resources,
execution_result: &self.execution_result,
r#type,
contract_address: &self.contract_address,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for DeployAccountTransactionReceipt {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: FieldElement,
pub finality_status: TransactionFinalityStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub execution_resources: ExecutionResources,
#[serde(flatten)]
pub execution_result: ExecutionResult,
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DEPLOY_ACCOUNT" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
transaction_hash: tagged.transaction_hash,
actual_fee: tagged.actual_fee,
finality_status: tagged.finality_status,
block_hash: tagged.block_hash,
block_number: tagged.block_number,
messages_sent: tagged.messages_sent,
events: tagged.events,
execution_resources: tagged.execution_resources,
execution_result: tagged.execution_result,
contract_address: tagged.contract_address,
})
}
}
impl Serialize for DeployAccountTransactionTrace {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
struct Tagged<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub validate_invocation: &'a Option<FunctionInvocation>,
pub constructor_invocation: &'a FunctionInvocation,
#[serde(skip_serializing_if = "Option::is_none")]
pub fee_transfer_invocation: &'a Option<FunctionInvocation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state_diff: &'a Option<StateDiff>,
pub r#type: &'a str,
}
let r#type = "DEPLOY_ACCOUNT";
let tagged = Tagged {
validate_invocation: &self.validate_invocation,
constructor_invocation: &self.constructor_invocation,
fee_transfer_invocation: &self.fee_transfer_invocation,
state_diff: &self.state_diff,
r#type,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for DeployAccountTransactionTrace {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
#[serde(skip_serializing_if = "Option::is_none")]
pub validate_invocation: Option<FunctionInvocation>,
pub constructor_invocation: FunctionInvocation,
#[serde(skip_serializing_if = "Option::is_none")]
pub fee_transfer_invocation: Option<FunctionInvocation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state_diff: Option<StateDiff>,
pub r#type: Option<String>,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DEPLOY_ACCOUNT" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
validate_invocation: tagged.validate_invocation,
constructor_invocation: tagged.constructor_invocation,
fee_transfer_invocation: tagged.fee_transfer_invocation,
state_diff: tagged.state_diff,
})
}
}
impl Serialize for DeployTransaction {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
#[serde_as(as = "NumAsHex")]
pub version: &'a u64,
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub contract_address_salt: &'a FieldElement,
#[serde_as(as = "[UfeHex]")]
pub constructor_calldata: &'a [FieldElement],
#[serde_as(as = "UfeHex")]
pub class_hash: &'a FieldElement,
}
let r#type = "DEPLOY";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
version: &self.version,
r#type,
contract_address_salt: &self.contract_address_salt,
constructor_calldata: &self.constructor_calldata,
class_hash: &self.class_hash,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for DeployTransaction {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
#[serde_as(as = "NumAsHex")]
pub version: u64,
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub contract_address_salt: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub constructor_calldata: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub class_hash: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DEPLOY" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
transaction_hash: tagged.transaction_hash,
version: tagged.version,
contract_address_salt: tagged.contract_address_salt,
constructor_calldata: tagged.constructor_calldata,
class_hash: tagged.class_hash,
})
}
}
impl Serialize for DeployTransactionReceipt {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: &'a FieldElement,
pub finality_status: &'a TransactionFinalityStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: &'a FieldElement,
pub block_number: &'a u64,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
pub execution_resources: &'a ExecutionResources,
#[serde(flatten)]
pub execution_result: &'a ExecutionResult,
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub contract_address: &'a FieldElement,
}
let r#type = "DEPLOY";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
finality_status: &self.finality_status,
block_hash: &self.block_hash,
block_number: &self.block_number,
messages_sent: &self.messages_sent,
events: &self.events,
execution_resources: &self.execution_resources,
execution_result: &self.execution_result,
r#type,
contract_address: &self.contract_address,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for DeployTransactionReceipt {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: FieldElement,
pub finality_status: TransactionFinalityStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub execution_resources: ExecutionResources,
#[serde(flatten)]
pub execution_result: ExecutionResult,
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DEPLOY" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
transaction_hash: tagged.transaction_hash,
actual_fee: tagged.actual_fee,
finality_status: tagged.finality_status,
block_hash: tagged.block_hash,
block_number: tagged.block_number,
messages_sent: tagged.messages_sent,
events: tagged.events,
execution_resources: tagged.execution_resources,
execution_result: tagged.execution_result,
contract_address: tagged.contract_address,
})
}
}
impl Serialize for InvokeTransactionReceipt {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: &'a FieldElement,
pub finality_status: &'a TransactionFinalityStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: &'a FieldElement,
pub block_number: &'a u64,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
pub execution_resources: &'a ExecutionResources,
#[serde(flatten)]
pub execution_result: &'a ExecutionResult,
}
let r#type = "INVOKE";
let tagged = Tagged {
r#type,
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
finality_status: &self.finality_status,
block_hash: &self.block_hash,
block_number: &self.block_number,
messages_sent: &self.messages_sent,
events: &self.events,
execution_resources: &self.execution_resources,
execution_result: &self.execution_result,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for InvokeTransactionReceipt {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: FieldElement,
pub finality_status: TransactionFinalityStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub execution_resources: ExecutionResources,
#[serde(flatten)]
pub execution_result: ExecutionResult,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "INVOKE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
transaction_hash: tagged.transaction_hash,
actual_fee: tagged.actual_fee,
finality_status: tagged.finality_status,
block_hash: tagged.block_hash,
block_number: tagged.block_number,
messages_sent: tagged.messages_sent,
events: tagged.events,
execution_resources: tagged.execution_resources,
execution_result: tagged.execution_result,
})
}
}
impl Serialize for InvokeTransactionTrace {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
struct Tagged<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub validate_invocation: &'a Option<FunctionInvocation>,
pub execute_invocation: &'a ExecuteInvocation,
#[serde(skip_serializing_if = "Option::is_none")]
pub fee_transfer_invocation: &'a Option<FunctionInvocation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state_diff: &'a Option<StateDiff>,
pub r#type: &'a str,
}
let r#type = "INVOKE";
let tagged = Tagged {
validate_invocation: &self.validate_invocation,
execute_invocation: &self.execute_invocation,
fee_transfer_invocation: &self.fee_transfer_invocation,
state_diff: &self.state_diff,
r#type,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for InvokeTransactionTrace {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
#[serde(skip_serializing_if = "Option::is_none")]
pub validate_invocation: Option<FunctionInvocation>,
pub execute_invocation: ExecuteInvocation,
#[serde(skip_serializing_if = "Option::is_none")]
pub fee_transfer_invocation: Option<FunctionInvocation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state_diff: Option<StateDiff>,
pub r#type: Option<String>,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "INVOKE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
validate_invocation: tagged.validate_invocation,
execute_invocation: tagged.execute_invocation,
fee_transfer_invocation: tagged.fee_transfer_invocation,
state_diff: tagged.state_diff,
})
}
}
impl Serialize for InvokeTransactionV0 {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub max_fee: &'a FieldElement,
#[serde_as(as = "NumAsHex")]
pub version: &'a u64,
#[serde_as(as = "[UfeHex]")]
pub signature: &'a [FieldElement],
#[serde_as(as = "UfeHex")]
pub contract_address: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub entry_point_selector: &'a FieldElement,
#[serde_as(as = "[UfeHex]")]
pub calldata: &'a [FieldElement],
}
let r#type = "INVOKE";
let version = &0;
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
r#type,
max_fee: &self.max_fee,
version,
signature: &self.signature,
contract_address: &self.contract_address,
entry_point_selector: &self.entry_point_selector,
calldata: &self.calldata,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for InvokeTransactionV0 {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub max_fee: FieldElement,
#[serde_as(as = "Option<NumAsHex>")]
pub version: Option<u64>,
#[serde_as(as = "Vec<UfeHex>")]
pub signature: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub entry_point_selector: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub calldata: Vec<FieldElement>,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "INVOKE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
if let Some(tag_field) = &tagged.version {
if tag_field != &0 {
return Err(serde::de::Error::custom("invalid `version` value"));
}
}
Ok(Self {
transaction_hash: tagged.transaction_hash,
max_fee: tagged.max_fee,
signature: tagged.signature,
contract_address: tagged.contract_address,
entry_point_selector: tagged.entry_point_selector,
calldata: tagged.calldata,
})
}
}
impl Serialize for InvokeTransactionV1 {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub sender_address: &'a FieldElement,
#[serde_as(as = "[UfeHex]")]
pub calldata: &'a [FieldElement],
#[serde_as(as = "UfeHex")]
pub max_fee: &'a FieldElement,
#[serde_as(as = "NumAsHex")]
pub version: &'a u64,
#[serde_as(as = "[UfeHex]")]
pub signature: &'a [FieldElement],
#[serde_as(as = "UfeHex")]
pub nonce: &'a FieldElement,
}
let r#type = "INVOKE";
let version = &1;
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
r#type,
sender_address: &self.sender_address,
calldata: &self.calldata,
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for InvokeTransactionV1 {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub sender_address: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub calldata: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub max_fee: FieldElement,
#[serde_as(as = "Option<NumAsHex>")]
pub version: Option<u64>,
#[serde_as(as = "Vec<UfeHex>")]
pub signature: Vec<FieldElement>,
#[serde_as(as = "UfeHex")]
pub nonce: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "INVOKE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
if let Some(tag_field) = &tagged.version {
if tag_field != &1 {
return Err(serde::de::Error::custom("invalid `version` value"));
}
}
Ok(Self {
transaction_hash: tagged.transaction_hash,
sender_address: tagged.sender_address,
calldata: tagged.calldata,
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
})
}
}
impl Serialize for L1HandlerTransaction {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
#[serde_as(as = "NumAsHex")]
pub version: &'a u64,
pub r#type: &'a str,
#[serde_as(as = "NumAsHex")]
pub nonce: &'a u64,
#[serde_as(as = "UfeHex")]
pub contract_address: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub entry_point_selector: &'a FieldElement,
#[serde_as(as = "[UfeHex]")]
pub calldata: &'a [FieldElement],
}
let r#type = "L1_HANDLER";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
version: &self.version,
r#type,
nonce: &self.nonce,
contract_address: &self.contract_address,
entry_point_selector: &self.entry_point_selector,
calldata: &self.calldata,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for L1HandlerTransaction {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
#[serde_as(as = "NumAsHex")]
pub version: u64,
pub r#type: Option<String>,
#[serde_as(as = "NumAsHex")]
pub nonce: u64,
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub entry_point_selector: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub calldata: Vec<FieldElement>,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "L1_HANDLER" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
transaction_hash: tagged.transaction_hash,
version: tagged.version,
nonce: tagged.nonce,
contract_address: tagged.contract_address,
entry_point_selector: tagged.entry_point_selector,
calldata: tagged.calldata,
})
}
}
impl Serialize for L1HandlerTransactionReceipt {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
pub r#type: &'a str,
pub message_hash: &'a Hash256,
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: &'a FieldElement,
pub finality_status: &'a TransactionFinalityStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: &'a FieldElement,
pub block_number: &'a u64,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
pub execution_resources: &'a ExecutionResources,
#[serde(flatten)]
pub execution_result: &'a ExecutionResult,
}
let r#type = "L1_HANDLER";
let tagged = Tagged {
r#type,
message_hash: &self.message_hash,
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
finality_status: &self.finality_status,
block_hash: &self.block_hash,
block_number: &self.block_number,
messages_sent: &self.messages_sent,
events: &self.events,
execution_resources: &self.execution_resources,
execution_result: &self.execution_result,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for L1HandlerTransactionReceipt {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
pub r#type: Option<String>,
pub message_hash: Hash256,
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: FieldElement,
pub finality_status: TransactionFinalityStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub execution_resources: ExecutionResources,
#[serde(flatten)]
pub execution_result: ExecutionResult,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "L1_HANDLER" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
message_hash: tagged.message_hash,
transaction_hash: tagged.transaction_hash,
actual_fee: tagged.actual_fee,
finality_status: tagged.finality_status,
block_hash: tagged.block_hash,
block_number: tagged.block_number,
messages_sent: tagged.messages_sent,
events: tagged.events,
execution_resources: tagged.execution_resources,
execution_result: tagged.execution_result,
})
}
}
impl Serialize for L1HandlerTransactionTrace {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
struct Tagged<'a> {
pub function_invocation: &'a FunctionInvocation,
#[serde(skip_serializing_if = "Option::is_none")]
pub state_diff: &'a Option<StateDiff>,
pub r#type: &'a str,
}
let r#type = "L1_HANDLER";
let tagged = Tagged {
function_invocation: &self.function_invocation,
state_diff: &self.state_diff,
r#type,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for L1HandlerTransactionTrace {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
pub function_invocation: FunctionInvocation,
#[serde(skip_serializing_if = "Option::is_none")]
pub state_diff: Option<StateDiff>,
pub r#type: Option<String>,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "L1_HANDLER" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
function_invocation: tagged.function_invocation,
state_diff: tagged.state_diff,
})
}
}
impl Serialize for PendingDeclareTransactionReceipt {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: &'a FieldElement,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
pub finality_status: &'a TransactionFinalityStatus,
pub execution_resources: &'a ExecutionResources,
#[serde(flatten)]
pub execution_result: &'a ExecutionResult,
}
let r#type = "DECLARE";
let finality_status = &TransactionFinalityStatus::AcceptedOnL2;
let tagged = Tagged {
r#type,
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
messages_sent: &self.messages_sent,
events: &self.events,
finality_status,
execution_resources: &self.execution_resources,
execution_result: &self.execution_result,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for PendingDeclareTransactionReceipt {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: FieldElement,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub finality_status: TransactionFinalityStatus,
pub execution_resources: ExecutionResources,
#[serde(flatten)]
pub execution_result: ExecutionResult,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DECLARE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
if tagged.finality_status != TransactionFinalityStatus::AcceptedOnL2 {
return Err(serde::de::Error::custom("invalid `finality_status` value"));
}
Ok(Self {
transaction_hash: tagged.transaction_hash,
actual_fee: tagged.actual_fee,
messages_sent: tagged.messages_sent,
events: tagged.events,
execution_resources: tagged.execution_resources,
execution_result: tagged.execution_result,
})
}
}
impl Serialize for PendingDeployAccountTransactionReceipt {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: &'a FieldElement,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
pub finality_status: &'a TransactionFinalityStatus,
pub execution_resources: &'a ExecutionResources,
#[serde(flatten)]
pub execution_result: &'a ExecutionResult,
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub contract_address: &'a FieldElement,
}
let finality_status = &TransactionFinalityStatus::AcceptedOnL2;
let r#type = "DEPLOY_ACCOUNT";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
messages_sent: &self.messages_sent,
events: &self.events,
finality_status,
execution_resources: &self.execution_resources,
execution_result: &self.execution_result,
r#type,
contract_address: &self.contract_address,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for PendingDeployAccountTransactionReceipt {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: FieldElement,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub finality_status: TransactionFinalityStatus,
pub execution_resources: ExecutionResources,
#[serde(flatten)]
pub execution_result: ExecutionResult,
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
if tagged.finality_status != TransactionFinalityStatus::AcceptedOnL2 {
return Err(serde::de::Error::custom("invalid `finality_status` value"));
}
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DEPLOY_ACCOUNT" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
transaction_hash: tagged.transaction_hash,
actual_fee: tagged.actual_fee,
messages_sent: tagged.messages_sent,
events: tagged.events,
execution_resources: tagged.execution_resources,
execution_result: tagged.execution_result,
contract_address: tagged.contract_address,
})
}
}
impl Serialize for PendingInvokeTransactionReceipt {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: &'a FieldElement,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
pub finality_status: &'a TransactionFinalityStatus,
pub execution_resources: &'a ExecutionResources,
#[serde(flatten)]
pub execution_result: &'a ExecutionResult,
}
let r#type = "INVOKE";
let finality_status = &TransactionFinalityStatus::AcceptedOnL2;
let tagged = Tagged {
r#type,
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
messages_sent: &self.messages_sent,
events: &self.events,
finality_status,
execution_resources: &self.execution_resources,
execution_result: &self.execution_result,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for PendingInvokeTransactionReceipt {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: FieldElement,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub finality_status: TransactionFinalityStatus,
pub execution_resources: ExecutionResources,
#[serde(flatten)]
pub execution_result: ExecutionResult,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "INVOKE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
if tagged.finality_status != TransactionFinalityStatus::AcceptedOnL2 {
return Err(serde::de::Error::custom("invalid `finality_status` value"));
}
Ok(Self {
transaction_hash: tagged.transaction_hash,
actual_fee: tagged.actual_fee,
messages_sent: tagged.messages_sent,
events: tagged.events,
execution_resources: tagged.execution_resources,
execution_result: tagged.execution_result,
})
}
}
impl Serialize for PendingL1HandlerTransactionReceipt {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
pub r#type: &'a str,
pub message_hash: &'a Hash256,
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: &'a FieldElement,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
pub finality_status: &'a TransactionFinalityStatus,
pub execution_resources: &'a ExecutionResources,
#[serde(flatten)]
pub execution_result: &'a ExecutionResult,
}
let r#type = "L1_HANDLER";
let finality_status = &TransactionFinalityStatus::AcceptedOnL2;
let tagged = Tagged {
r#type,
message_hash: &self.message_hash,
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
messages_sent: &self.messages_sent,
events: &self.events,
finality_status,
execution_resources: &self.execution_resources,
execution_result: &self.execution_result,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for PendingL1HandlerTransactionReceipt {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
struct Tagged {
pub r#type: Option<String>,
pub message_hash: Hash256,
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: FieldElement,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub finality_status: TransactionFinalityStatus,
pub execution_resources: ExecutionResources,
#[serde(flatten)]
pub execution_result: ExecutionResult,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.r#type {
if tag_field != "L1_HANDLER" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
if tagged.finality_status != TransactionFinalityStatus::AcceptedOnL2 {
return Err(serde::de::Error::custom("invalid `finality_status` value"));
}
Ok(Self {
message_hash: tagged.message_hash,
transaction_hash: tagged.transaction_hash,
actual_fee: tagged.actual_fee,
messages_sent: tagged.messages_sent,
events: tagged.events,
execution_resources: tagged.execution_resources,
execution_result: tagged.execution_result,
})
}
}
impl Serialize for AddDeclareTransactionRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub declare_transaction: &'a BroadcastedDeclareTransaction,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
declare_transaction: &self.declare_transaction,
})?;
seq.end()
}
}
impl<'a> Serialize for AddDeclareTransactionRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub declare_transaction: &'a BroadcastedDeclareTransaction,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
declare_transaction: self.declare_transaction,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for AddDeclareTransactionRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub declare_transaction: BroadcastedDeclareTransaction,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub declare_transaction: BroadcastedDeclareTransaction,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
declare_transaction: field0.declare_transaction,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
declare_transaction: object.declare_transaction,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for AddDeployAccountTransactionRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub deploy_account_transaction: &'a BroadcastedDeployAccountTransaction,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
deploy_account_transaction: &self.deploy_account_transaction,
})?;
seq.end()
}
}
impl<'a> Serialize for AddDeployAccountTransactionRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub deploy_account_transaction: &'a BroadcastedDeployAccountTransaction,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
deploy_account_transaction: self.deploy_account_transaction,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for AddDeployAccountTransactionRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub deploy_account_transaction: BroadcastedDeployAccountTransaction,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub deploy_account_transaction: BroadcastedDeployAccountTransaction,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
deploy_account_transaction: field0.deploy_account_transaction,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
deploy_account_transaction: object.deploy_account_transaction,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for AddInvokeTransactionRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub invoke_transaction: &'a BroadcastedInvokeTransaction,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
invoke_transaction: &self.invoke_transaction,
})?;
seq.end()
}
}
impl<'a> Serialize for AddInvokeTransactionRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub invoke_transaction: &'a BroadcastedInvokeTransaction,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
invoke_transaction: self.invoke_transaction,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for AddInvokeTransactionRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub invoke_transaction: BroadcastedInvokeTransaction,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub invoke_transaction: BroadcastedInvokeTransaction,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
invoke_transaction: field0.invoke_transaction,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
invoke_transaction: object.invoke_transaction,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for BlockHashAndNumberRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
use serde::ser::SerializeSeq;
let seq = serializer.serialize_seq(Some(0))?;
seq.end()
}
}
impl<'de> Deserialize<'de> for BlockHashAndNumberRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let elements = Vec::<()>::deserialize(deserializer)?;
if !elements.is_empty() {
return Err(serde::de::Error::custom("invalid sequence length"));
}
Ok(Self)
}
}
impl Serialize for BlockNumberRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
use serde::ser::SerializeSeq;
let seq = serializer.serialize_seq(Some(0))?;
seq.end()
}
}
impl<'de> Deserialize<'de> for BlockNumberRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let elements = Vec::<()>::deserialize(deserializer)?;
if !elements.is_empty() {
return Err(serde::de::Error::custom("invalid sequence length"));
}
Ok(Self)
}
}
impl Serialize for CallRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub request: &'a FunctionCall,
}
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
request: &self.request,
})?;
seq.serialize_element(&Field1 {
block_id: &self.block_id,
})?;
seq.end()
}
}
impl<'a> Serialize for CallRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub request: &'a FunctionCall,
}
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
request: self.request,
})?;
seq.serialize_element(&Field1 {
block_id: self.block_id,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for CallRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub request: FunctionCall,
pub block_id: BlockId,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub request: FunctionCall,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field1 {
pub block_id: BlockId,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field1 = serde_json::from_value::<Field1>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
request: field0.request,
block_id: field1.block_id,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
request: object.request,
block_id: object.block_id,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for ChainIdRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
use serde::ser::SerializeSeq;
let seq = serializer.serialize_seq(Some(0))?;
seq.end()
}
}
impl<'de> Deserialize<'de> for ChainIdRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let elements = Vec::<()>::deserialize(deserializer)?;
if !elements.is_empty() {
return Err(serde::de::Error::custom("invalid sequence length"));
}
Ok(Self)
}
}
impl Serialize for EstimateFeeRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub request: &'a [BroadcastedTransaction],
}
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
request: &self.request,
})?;
seq.serialize_element(&Field1 {
block_id: &self.block_id,
})?;
seq.end()
}
}
impl<'a> Serialize for EstimateFeeRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub request: &'a [BroadcastedTransaction],
}
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
request: self.request,
})?;
seq.serialize_element(&Field1 {
block_id: self.block_id,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for EstimateFeeRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub request: Vec<BroadcastedTransaction>,
pub block_id: BlockId,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub request: Vec<BroadcastedTransaction>,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field1 {
pub block_id: BlockId,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field1 = serde_json::from_value::<Field1>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
request: field0.request,
block_id: field1.block_id,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
request: object.request,
block_id: object.block_id,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for EstimateMessageFeeRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub message: &'a MsgFromL1,
}
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
message: &self.message,
})?;
seq.serialize_element(&Field1 {
block_id: &self.block_id,
})?;
seq.end()
}
}
impl<'a> Serialize for EstimateMessageFeeRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub message: &'a MsgFromL1,
}
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
message: self.message,
})?;
seq.serialize_element(&Field1 {
block_id: self.block_id,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for EstimateMessageFeeRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub message: MsgFromL1,
pub block_id: BlockId,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub message: MsgFromL1,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field1 {
pub block_id: BlockId,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field1 = serde_json::from_value::<Field1>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
message: field0.message,
block_id: field1.block_id,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
message: object.message,
block_id: object.block_id,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for GetBlockTransactionCountRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: &self.block_id,
})?;
seq.end()
}
}
impl<'a> Serialize for GetBlockTransactionCountRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: self.block_id,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for GetBlockTransactionCountRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub block_id: BlockId,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub block_id: BlockId,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
block_id: field0.block_id,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
block_id: object.block_id,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for GetBlockWithTxHashesRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: &self.block_id,
})?;
seq.end()
}
}
impl<'a> Serialize for GetBlockWithTxHashesRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: self.block_id,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for GetBlockWithTxHashesRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub block_id: BlockId,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub block_id: BlockId,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
block_id: field0.block_id,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
block_id: object.block_id,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for GetBlockWithTxsRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: &self.block_id,
})?;
seq.end()
}
}
impl<'a> Serialize for GetBlockWithTxsRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: self.block_id,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for GetBlockWithTxsRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub block_id: BlockId,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub block_id: BlockId,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
block_id: field0.block_id,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
block_id: object.block_id,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for GetClassAtRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
#[serde_as(as = "UfeHex")]
pub contract_address: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: &self.block_id,
})?;
seq.serialize_element(&Field1 {
contract_address: &self.contract_address,
})?;
seq.end()
}
}
impl<'a> Serialize for GetClassAtRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
#[serde_as(as = "UfeHex")]
pub contract_address: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: self.block_id,
})?;
seq.serialize_element(&Field1 {
contract_address: self.contract_address,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for GetClassAtRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub block_id: BlockId,
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub block_id: BlockId,
}
#[serde_as]
#[derive(Deserialize)]
#[serde(transparent)]
struct Field1 {
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field1 = serde_json::from_value::<Field1>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
block_id: field0.block_id,
contract_address: field1.contract_address,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
block_id: object.block_id,
contract_address: object.contract_address,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for GetClassHashAtRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
#[serde_as(as = "UfeHex")]
pub contract_address: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: &self.block_id,
})?;
seq.serialize_element(&Field1 {
contract_address: &self.contract_address,
})?;
seq.end()
}
}
impl<'a> Serialize for GetClassHashAtRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
#[serde_as(as = "UfeHex")]
pub contract_address: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: self.block_id,
})?;
seq.serialize_element(&Field1 {
contract_address: self.contract_address,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for GetClassHashAtRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub block_id: BlockId,
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub block_id: BlockId,
}
#[serde_as]
#[derive(Deserialize)]
#[serde(transparent)]
struct Field1 {
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field1 = serde_json::from_value::<Field1>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
block_id: field0.block_id,
contract_address: field1.contract_address,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
block_id: object.block_id,
contract_address: object.contract_address,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for GetClassRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
#[serde_as(as = "UfeHex")]
pub class_hash: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: &self.block_id,
})?;
seq.serialize_element(&Field1 {
class_hash: &self.class_hash,
})?;
seq.end()
}
}
impl<'a> Serialize for GetClassRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
#[serde_as(as = "UfeHex")]
pub class_hash: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: self.block_id,
})?;
seq.serialize_element(&Field1 {
class_hash: self.class_hash,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for GetClassRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub block_id: BlockId,
#[serde_as(as = "UfeHex")]
pub class_hash: FieldElement,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub block_id: BlockId,
}
#[serde_as]
#[derive(Deserialize)]
#[serde(transparent)]
struct Field1 {
#[serde_as(as = "UfeHex")]
pub class_hash: FieldElement,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field1 = serde_json::from_value::<Field1>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
block_id: field0.block_id,
class_hash: field1.class_hash,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
block_id: object.block_id,
class_hash: object.class_hash,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for GetEventsRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub filter: &'a EventFilterWithPage,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
filter: &self.filter,
})?;
seq.end()
}
}
impl<'a> Serialize for GetEventsRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub filter: &'a EventFilterWithPage,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
filter: self.filter,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for GetEventsRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub filter: EventFilterWithPage,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub filter: EventFilterWithPage,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
filter: field0.filter,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
filter: object.filter,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for GetNonceRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
#[serde_as(as = "UfeHex")]
pub contract_address: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: &self.block_id,
})?;
seq.serialize_element(&Field1 {
contract_address: &self.contract_address,
})?;
seq.end()
}
}
impl<'a> Serialize for GetNonceRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
#[serde_as(as = "UfeHex")]
pub contract_address: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: self.block_id,
})?;
seq.serialize_element(&Field1 {
contract_address: self.contract_address,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for GetNonceRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub block_id: BlockId,
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub block_id: BlockId,
}
#[serde_as]
#[derive(Deserialize)]
#[serde(transparent)]
struct Field1 {
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field1 = serde_json::from_value::<Field1>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
block_id: field0.block_id,
contract_address: field1.contract_address,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
block_id: object.block_id,
contract_address: object.contract_address,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for GetStateUpdateRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: &self.block_id,
})?;
seq.end()
}
}
impl<'a> Serialize for GetStateUpdateRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: self.block_id,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for GetStateUpdateRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub block_id: BlockId,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub block_id: BlockId,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
block_id: field0.block_id,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
block_id: object.block_id,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for GetStorageAtRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
#[serde_as(as = "UfeHex")]
pub contract_address: &'a FieldElement,
}
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
#[serde_as(as = "UfeHex")]
pub key: &'a FieldElement,
}
#[derive(Serialize)]
#[serde(transparent)]
struct Field2<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
contract_address: &self.contract_address,
})?;
seq.serialize_element(&Field1 { key: &self.key })?;
seq.serialize_element(&Field2 {
block_id: &self.block_id,
})?;
seq.end()
}
}
impl<'a> Serialize for GetStorageAtRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
#[serde_as(as = "UfeHex")]
pub contract_address: &'a FieldElement,
}
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
#[serde_as(as = "UfeHex")]
pub key: &'a FieldElement,
}
#[derive(Serialize)]
#[serde(transparent)]
struct Field2<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
contract_address: self.contract_address,
})?;
seq.serialize_element(&Field1 { key: self.key })?;
seq.serialize_element(&Field2 {
block_id: self.block_id,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for GetStorageAtRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub key: FieldElement,
pub block_id: BlockId,
}
#[serde_as]
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
#[serde_as(as = "UfeHex")]
pub contract_address: FieldElement,
}
#[serde_as]
#[derive(Deserialize)]
#[serde(transparent)]
struct Field1 {
#[serde_as(as = "UfeHex")]
pub key: FieldElement,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field2 {
pub block_id: BlockId,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field2 = serde_json::from_value::<Field2>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
let field1 = serde_json::from_value::<Field1>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
contract_address: field0.contract_address,
key: field1.key,
block_id: field2.block_id,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
contract_address: object.contract_address,
key: object.key,
block_id: object.block_id,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for GetTransactionByBlockIdAndIndexRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
pub index: &'a u64,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: &self.block_id,
})?;
seq.serialize_element(&Field1 { index: &self.index })?;
seq.end()
}
}
impl<'a> Serialize for GetTransactionByBlockIdAndIndexRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
pub index: &'a u64,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: self.block_id,
})?;
seq.serialize_element(&Field1 { index: self.index })?;
seq.end()
}
}
impl<'de> Deserialize<'de> for GetTransactionByBlockIdAndIndexRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub block_id: BlockId,
pub index: u64,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub block_id: BlockId,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field1 {
pub index: u64,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field1 = serde_json::from_value::<Field1>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
block_id: field0.block_id,
index: field1.index,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
block_id: object.block_id,
index: object.index,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for GetTransactionByHashRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
transaction_hash: &self.transaction_hash,
})?;
seq.end()
}
}
impl<'a> Serialize for GetTransactionByHashRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
transaction_hash: self.transaction_hash,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for GetTransactionByHashRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
}
#[serde_as]
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
transaction_hash: field0.transaction_hash,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
transaction_hash: object.transaction_hash,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for GetTransactionReceiptRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
transaction_hash: &self.transaction_hash,
})?;
seq.end()
}
}
impl<'a> Serialize for GetTransactionReceiptRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
transaction_hash: self.transaction_hash,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for GetTransactionReceiptRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
}
#[serde_as]
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
transaction_hash: field0.transaction_hash,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
transaction_hash: object.transaction_hash,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for GetTransactionStatusRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
transaction_hash: &self.transaction_hash,
})?;
seq.end()
}
}
impl<'a> Serialize for GetTransactionStatusRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
transaction_hash: self.transaction_hash,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for GetTransactionStatusRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
}
#[serde_as]
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
transaction_hash: field0.transaction_hash,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
transaction_hash: object.transaction_hash,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for SimulateTransactionsRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
pub transactions: &'a [BroadcastedTransaction],
}
#[derive(Serialize)]
#[serde(transparent)]
struct Field2<'a> {
pub simulation_flags: &'a [SimulationFlag],
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: &self.block_id,
})?;
seq.serialize_element(&Field1 {
transactions: &self.transactions,
})?;
seq.serialize_element(&Field2 {
simulation_flags: &self.simulation_flags,
})?;
seq.end()
}
}
impl<'a> Serialize for SimulateTransactionsRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
#[derive(Serialize)]
#[serde(transparent)]
struct Field1<'a> {
pub transactions: &'a [BroadcastedTransaction],
}
#[derive(Serialize)]
#[serde(transparent)]
struct Field2<'a> {
pub simulation_flags: &'a [SimulationFlag],
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: self.block_id,
})?;
seq.serialize_element(&Field1 {
transactions: self.transactions,
})?;
seq.serialize_element(&Field2 {
simulation_flags: self.simulation_flags,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for SimulateTransactionsRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub block_id: BlockId,
pub transactions: Vec<BroadcastedTransaction>,
pub simulation_flags: Vec<SimulationFlag>,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub block_id: BlockId,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field1 {
pub transactions: Vec<BroadcastedTransaction>,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field2 {
pub simulation_flags: Vec<SimulationFlag>,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field2 = serde_json::from_value::<Field2>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
let field1 = serde_json::from_value::<Field1>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
block_id: field0.block_id,
transactions: field1.transactions,
simulation_flags: field2.simulation_flags,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
block_id: object.block_id,
transactions: object.transactions,
simulation_flags: object.simulation_flags,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for SpecVersionRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
use serde::ser::SerializeSeq;
let seq = serializer.serialize_seq(Some(0))?;
seq.end()
}
}
impl<'de> Deserialize<'de> for SpecVersionRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let elements = Vec::<()>::deserialize(deserializer)?;
if !elements.is_empty() {
return Err(serde::de::Error::custom("invalid sequence length"));
}
Ok(Self)
}
}
impl Serialize for SyncingRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
use serde::ser::SerializeSeq;
let seq = serializer.serialize_seq(Some(0))?;
seq.end()
}
}
impl<'de> Deserialize<'de> for SyncingRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let elements = Vec::<()>::deserialize(deserializer)?;
if !elements.is_empty() {
return Err(serde::de::Error::custom("invalid sequence length"));
}
Ok(Self)
}
}
impl Serialize for TraceBlockTransactionsRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: &self.block_id,
})?;
seq.end()
}
}
impl<'a> Serialize for TraceBlockTransactionsRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
pub block_id: &'a BlockId,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
block_id: self.block_id,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for TraceBlockTransactionsRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
pub block_id: BlockId,
}
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
pub block_id: BlockId,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
block_id: field0.block_id,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
block_id: object.block_id,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}
impl Serialize for TraceTransactionRequest {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
transaction_hash: &self.transaction_hash,
})?;
seq.end()
}
}
impl<'a> Serialize for TraceTransactionRequestRef<'a> {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
#[serde(transparent)]
struct Field0<'a> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
}
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(None)?;
seq.serialize_element(&Field0 {
transaction_hash: self.transaction_hash,
})?;
seq.end()
}
}
impl<'de> Deserialize<'de> for TraceTransactionRequest {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
#[serde_as]
#[derive(Deserialize)]
struct AsObject {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
}
#[serde_as]
#[derive(Deserialize)]
#[serde(transparent)]
struct Field0 {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
}
let temp = serde_json::Value::deserialize(deserializer)?;
if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
let field0 = serde_json::from_value::<Field0>(
elements
.pop()
.ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
)
.map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
Ok(Self {
transaction_hash: field0.transaction_hash,
})
} else if let Ok(object) = AsObject::deserialize(&temp) {
Ok(Self {
transaction_hash: object.transaction_hash,
})
} else {
Err(serde::de::Error::custom("invalid sequence length"))
}
}
}