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, 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,
#[serde_as(as = "Vec<UfeHex>")]
pub transactions: Vec<FieldElement>,
}
#[serde_as]
#[derive(Debug, Clone, 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 transactions: Vec<Transaction>,
}
#[derive(Debug, Clone)]
pub struct BroadcastedDeclareTransactionV1 {
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub contract_class: OwnedPtr<CompressedLegacyContractClass>,
pub sender_address: FieldElement,
pub is_query: bool,
}
#[derive(Debug, Clone)]
pub struct BroadcastedDeclareTransactionV2 {
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub contract_class: OwnedPtr<FlattenedSierraClass>,
pub sender_address: FieldElement,
pub compiled_class_hash: FieldElement,
pub is_query: bool,
}
#[derive(Debug, Clone)]
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)]
pub struct BroadcastedInvokeTransactionV0 {
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub contract_address: FieldElement,
pub entry_point_selector: FieldElement,
pub calldata: Vec<FieldElement>,
pub is_query: bool,
}
#[derive(Debug, Clone)]
pub struct BroadcastedInvokeTransactionV1 {
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub sender_address: FieldElement,
pub calldata: Vec<FieldElement>,
pub is_query: bool,
}
#[derive(Debug, Clone, 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>>,
}
#[serde_as]
#[derive(Debug, Clone, 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)]
pub struct DeclareTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub status: TransactionStatus,
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
}
#[derive(Debug, Clone)]
pub struct DeclareTransactionV0 {
pub transaction_hash: FieldElement,
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub class_hash: FieldElement,
pub sender_address: FieldElement,
}
#[derive(Debug, Clone)]
pub struct DeclareTransactionV1 {
pub transaction_hash: FieldElement,
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub class_hash: FieldElement,
pub sender_address: FieldElement,
}
#[derive(Debug, Clone)]
pub struct DeclareTransactionV2 {
pub transaction_hash: FieldElement,
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub class_hash: FieldElement,
pub sender_address: FieldElement,
pub compiled_class_hash: FieldElement,
}
#[serde_as]
#[derive(Debug, Clone, 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)]
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)]
pub struct DeployAccountTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub status: TransactionStatus,
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub contract_address: FieldElement,
}
#[derive(Debug, Clone)]
pub struct DeployTransaction {
pub transaction_hash: FieldElement,
pub class_hash: FieldElement,
pub version: u64,
pub contract_address_salt: FieldElement,
pub constructor_calldata: Vec<FieldElement>,
}
#[derive(Debug, Clone)]
pub struct DeployTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub status: TransactionStatus,
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub contract_address: FieldElement,
}
#[serde_as]
#[derive(Debug, Clone, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum FunctionStateMutability {
#[serde(rename = "view")]
View,
}
#[derive(Debug, Clone)]
pub struct InvokeTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub status: TransactionStatus,
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
}
#[derive(Debug, Clone)]
pub struct InvokeTransactionV0 {
pub transaction_hash: FieldElement,
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub contract_address: FieldElement,
pub entry_point_selector: FieldElement,
pub calldata: Vec<FieldElement>,
}
#[derive(Debug, Clone)]
pub struct InvokeTransactionV1 {
pub transaction_hash: FieldElement,
pub max_fee: FieldElement,
pub signature: Vec<FieldElement>,
pub nonce: FieldElement,
pub sender_address: FieldElement,
pub calldata: Vec<FieldElement>,
}
#[derive(Debug, Clone)]
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)]
pub struct L1HandlerTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub status: TransactionStatus,
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
}
#[serde_as]
#[derive(Debug, Clone, 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, 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, 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, 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, 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, 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, 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, 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>,
}
#[serde_as]
#[derive(Debug, Clone, 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, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct PendingBlockWithTxHashes {
#[serde_as(as = "Vec<UfeHex>")]
pub transactions: Vec<FieldElement>,
pub timestamp: u64,
#[serde_as(as = "UfeHex")]
pub sequencer_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub parent_hash: FieldElement,
}
#[serde_as]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct PendingBlockWithTxs {
pub transactions: Vec<Transaction>,
pub timestamp: u64,
#[serde_as(as = "UfeHex")]
pub sequencer_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub parent_hash: FieldElement,
}
#[derive(Debug, Clone)]
pub struct PendingDeclareTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
}
#[derive(Debug, Clone)]
pub struct PendingDeployAccountTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
}
#[derive(Debug, Clone)]
pub struct PendingDeployTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
pub contract_address: FieldElement,
}
#[derive(Debug, Clone)]
pub struct PendingInvokeTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
}
#[derive(Debug, Clone)]
pub struct PendingL1HandlerTransactionReceipt {
pub transaction_hash: FieldElement,
pub actual_fee: FieldElement,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
}
#[serde_as]
#[derive(Debug, Clone, 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, 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,
}
#[derive(Debug, Clone, 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,
}
#[serde_as]
#[derive(Debug, Clone, 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, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum StarknetError {
FailedToReceiveTransaction,
ContractNotFound,
BlockNotFound,
TransactionHashNotFound,
InvalidTransactionIndex,
ClassHashNotFound,
PageSizeTooBig,
NoBlocks,
InvalidContinuationToken,
TooManyKeysInFilter,
ContractError,
InvalidContractClass,
ClassAlreadyDeclared,
}
#[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::TransactionHashNotFound => write!(f, "TransactionHashNotFound"),
Self::InvalidTransactionIndex => write!(f, "InvalidTransactionIndex"),
Self::ClassHashNotFound => write!(f, "ClassHashNotFound"),
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::InvalidContractClass => write!(f, "InvalidContractClass"),
Self::ClassAlreadyDeclared => write!(f, "ClassAlreadyDeclared"),
}
}
}
#[serde_as]
#[derive(Debug, Clone, 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, 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 new_root: FieldElement,
#[serde_as(as = "UfeHex")]
pub old_root: FieldElement,
pub state_diff: StateDiff,
}
#[serde_as]
#[derive(Debug, Clone, 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, Serialize, Deserialize)]
#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
pub struct SyncStatus {
#[serde_as(as = "UfeHex")]
pub starting_block_hash: FieldElement,
#[serde_as(as = "NumAsHex")]
pub starting_block_num: u64,
#[serde_as(as = "UfeHex")]
pub current_block_hash: FieldElement,
#[serde_as(as = "NumAsHex")]
pub current_block_num: u64,
#[serde_as(as = "UfeHex")]
pub highest_block_hash: FieldElement,
#[serde_as(as = "NumAsHex")]
pub highest_block_num: u64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum TransactionStatus {
#[serde(rename = "PENDING")]
Pending,
#[serde(rename = "ACCEPTED_ON_L2")]
AcceptedOnL2,
#[serde(rename = "ACCEPTED_ON_L1")]
AcceptedOnL1,
#[serde(rename = "REJECTED")]
Rejected,
}
#[derive(Debug, Clone)]
pub struct AddDeclareTransactionRequest {
pub declare_transaction: BroadcastedDeclareTransaction,
}
#[derive(Debug, Clone)]
pub struct AddDeclareTransactionRequestRef<'a> {
pub declare_transaction: &'a BroadcastedDeclareTransaction,
}
#[derive(Debug, Clone)]
pub struct AddDeployAccountTransactionRequest {
pub deploy_account_transaction: BroadcastedDeployAccountTransaction,
}
#[derive(Debug, Clone)]
pub struct AddDeployAccountTransactionRequestRef<'a> {
pub deploy_account_transaction: &'a BroadcastedDeployAccountTransaction,
}
#[derive(Debug, Clone)]
pub struct AddInvokeTransactionRequest {
pub invoke_transaction: BroadcastedInvokeTransaction,
}
#[derive(Debug, Clone)]
pub struct AddInvokeTransactionRequestRef<'a> {
pub invoke_transaction: &'a BroadcastedInvokeTransaction,
}
#[derive(Debug, Clone)]
pub struct BlockHashAndNumberRequest;
#[derive(Debug, Clone)]
pub struct BlockNumberRequest;
#[derive(Debug, Clone)]
pub struct CallRequest {
pub request: FunctionCall,
pub block_id: BlockId,
}
#[derive(Debug, Clone)]
pub struct CallRequestRef<'a> {
pub request: &'a FunctionCall,
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone)]
pub struct ChainIdRequest;
#[derive(Debug, Clone)]
pub struct EstimateFeeRequest {
pub request: Vec<BroadcastedTransaction>,
pub block_id: BlockId,
}
#[derive(Debug, Clone)]
pub struct EstimateFeeRequestRef<'a> {
pub request: &'a [BroadcastedTransaction],
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone)]
pub struct GetBlockTransactionCountRequest {
pub block_id: BlockId,
}
#[derive(Debug, Clone)]
pub struct GetBlockTransactionCountRequestRef<'a> {
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone)]
pub struct GetBlockWithTxHashesRequest {
pub block_id: BlockId,
}
#[derive(Debug, Clone)]
pub struct GetBlockWithTxHashesRequestRef<'a> {
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone)]
pub struct GetBlockWithTxsRequest {
pub block_id: BlockId,
}
#[derive(Debug, Clone)]
pub struct GetBlockWithTxsRequestRef<'a> {
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone)]
pub struct GetClassAtRequest {
pub block_id: BlockId,
pub contract_address: FieldElement,
}
#[derive(Debug, Clone)]
pub struct GetClassAtRequestRef<'a> {
pub block_id: &'a BlockId,
pub contract_address: &'a FieldElement,
}
#[derive(Debug, Clone)]
pub struct GetClassHashAtRequest {
pub block_id: BlockId,
pub contract_address: FieldElement,
}
#[derive(Debug, Clone)]
pub struct GetClassHashAtRequestRef<'a> {
pub block_id: &'a BlockId,
pub contract_address: &'a FieldElement,
}
#[derive(Debug, Clone)]
pub struct GetClassRequest {
pub block_id: BlockId,
pub class_hash: FieldElement,
}
#[derive(Debug, Clone)]
pub struct GetClassRequestRef<'a> {
pub block_id: &'a BlockId,
pub class_hash: &'a FieldElement,
}
#[derive(Debug, Clone)]
pub struct GetEventsRequest {
pub filter: EventFilterWithPage,
}
#[derive(Debug, Clone)]
pub struct GetEventsRequestRef<'a> {
pub filter: &'a EventFilterWithPage,
}
#[derive(Debug, Clone)]
pub struct GetNonceRequest {
pub block_id: BlockId,
pub contract_address: FieldElement,
}
#[derive(Debug, Clone)]
pub struct GetNonceRequestRef<'a> {
pub block_id: &'a BlockId,
pub contract_address: &'a FieldElement,
}
#[derive(Debug, Clone)]
pub struct GetStateUpdateRequest {
pub block_id: BlockId,
}
#[derive(Debug, Clone)]
pub struct GetStateUpdateRequestRef<'a> {
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone)]
pub struct GetStorageAtRequest {
pub contract_address: FieldElement,
pub key: FieldElement,
pub block_id: BlockId,
}
#[derive(Debug, Clone)]
pub struct GetStorageAtRequestRef<'a> {
pub contract_address: &'a FieldElement,
pub key: &'a FieldElement,
pub block_id: &'a BlockId,
}
#[derive(Debug, Clone)]
pub struct GetTransactionByBlockIdAndIndexRequest {
pub block_id: BlockId,
pub index: u64,
}
#[derive(Debug, Clone)]
pub struct GetTransactionByBlockIdAndIndexRequestRef<'a> {
pub block_id: &'a BlockId,
pub index: &'a u64,
}
#[derive(Debug, Clone)]
pub struct GetTransactionByHashRequest {
pub transaction_hash: FieldElement,
}
#[derive(Debug, Clone)]
pub struct GetTransactionByHashRequestRef<'a> {
pub transaction_hash: &'a FieldElement,
}
#[derive(Debug, Clone)]
pub struct GetTransactionReceiptRequest {
pub transaction_hash: FieldElement,
}
#[derive(Debug, Clone)]
pub struct GetTransactionReceiptRequestRef<'a> {
pub transaction_hash: &'a FieldElement,
}
#[derive(Debug, Clone)]
pub struct PendingTransactionsRequest;
#[derive(Debug, Clone)]
pub struct SyncingRequest;
impl Serialize for BroadcastedDeclareTransactionV1 {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
#[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 r#type: &'a str,
pub contract_class: &'a CompressedLegacyContractClass,
#[serde_as(as = "UfeHex")]
pub sender_address: &'a FieldElement,
}
let version = &(if self.is_query {
FieldElement::ONE + QUERY_VERSION_OFFSET
} else {
FieldElement::ONE
});
let r#type = "DECLARE";
let tagged = Tagged {
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
r#type,
contract_class: &self.contract_class,
sender_address: &self.sender_address,
};
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 {
#[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 r#type: Option<String>,
pub contract_class: CompressedLegacyContractClass,
#[serde_as(as = "UfeHex")]
pub sender_address: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
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"));
};
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DECLARE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
contract_class: OwnedPtr::new(tagged.contract_class),
sender_address: tagged.sender_address,
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> {
#[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 r#type: &'a str,
pub contract_class: &'a FlattenedSierraClass,
#[serde_as(as = "UfeHex")]
pub sender_address: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub compiled_class_hash: &'a FieldElement,
}
let version = &(if self.is_query {
FieldElement::TWO + QUERY_VERSION_OFFSET
} else {
FieldElement::TWO
});
let r#type = "DECLARE";
let tagged = Tagged {
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
r#type,
contract_class: &self.contract_class,
sender_address: &self.sender_address,
compiled_class_hash: &self.compiled_class_hash,
};
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 {
#[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 r#type: Option<String>,
pub contract_class: FlattenedSierraClass,
#[serde_as(as = "UfeHex")]
pub sender_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub compiled_class_hash: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
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"));
};
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DECLARE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
contract_class: OwnedPtr::new(tagged.contract_class),
sender_address: tagged.sender_address,
compiled_class_hash: tagged.compiled_class_hash,
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> {
#[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 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 version = &(if self.is_query {
FieldElement::ONE + QUERY_VERSION_OFFSET
} else {
FieldElement::ONE
});
let r#type = "DEPLOY_ACCOUNT";
let tagged = Tagged {
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
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 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 {
#[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 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)?;
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"));
};
if let Some(tag_field) = &tagged.r#type {
if tag_field != "DEPLOY_ACCOUNT" {
return Err(serde::de::Error::custom("invalid `type` 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 BroadcastedInvokeTransactionV0 {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
#[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 r#type: &'a str,
#[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 version = &(if self.is_query {
FieldElement::ZERO + QUERY_VERSION_OFFSET
} else {
FieldElement::ZERO
});
let r#type = "INVOKE";
let tagged = Tagged {
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
r#type,
contract_address: &self.contract_address,
entry_point_selector: &self.entry_point_selector,
calldata: &self.calldata,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for BroadcastedInvokeTransactionV0 {
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 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 r#type: Option<String>,
#[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)?;
let is_query = if tagged.version == FieldElement::ZERO {
false
} else if tagged.version == FieldElement::ZERO + QUERY_VERSION_OFFSET {
true
} else {
return Err(serde::de::Error::custom("invalid `version` value"));
};
if let Some(tag_field) = &tagged.r#type {
if tag_field != "INVOKE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
contract_address: tagged.contract_address,
entry_point_selector: tagged.entry_point_selector,
calldata: tagged.calldata,
is_query,
})
}
}
impl Serialize for BroadcastedInvokeTransactionV1 {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
#[serde_as]
#[derive(Serialize)]
struct Tagged<'a> {
#[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 r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub sender_address: &'a FieldElement,
#[serde_as(as = "[UfeHex]")]
pub calldata: &'a [FieldElement],
}
let version = &(if self.is_query {
FieldElement::ONE + QUERY_VERSION_OFFSET
} else {
FieldElement::ONE
});
let r#type = "INVOKE";
let tagged = Tagged {
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
r#type,
sender_address: &self.sender_address,
calldata: &self.calldata,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for BroadcastedInvokeTransactionV1 {
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 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 r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub sender_address: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub calldata: Vec<FieldElement>,
}
let tagged = Tagged::deserialize(deserializer)?;
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"));
};
if let Some(tag_field) = &tagged.r#type {
if tag_field != "INVOKE" {
return Err(serde::de::Error::custom("invalid `type` value"));
}
}
Ok(Self {
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
sender_address: tagged.sender_address,
calldata: tagged.calldata,
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 status: &'a TransactionStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: &'a FieldElement,
pub block_number: &'a u64,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
}
let r#type = "DECLARE";
let tagged = Tagged {
r#type,
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
status: &self.status,
block_hash: &self.block_hash,
block_number: &self.block_number,
messages_sent: &self.messages_sent,
events: &self.events,
};
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 status: TransactionStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
}
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,
status: tagged.status,
block_hash: tagged.block_hash,
block_number: tagged.block_number,
messages_sent: tagged.messages_sent,
events: tagged.events,
})
}
}
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,
#[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,
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub class_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub sender_address: &'a FieldElement,
}
let version = &0;
let r#type = "DECLARE";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
r#type,
class_hash: &self.class_hash,
sender_address: &self.sender_address,
};
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,
#[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,
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub class_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub sender_address: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.version {
if tag_field != &0 {
return Err(serde::de::Error::custom("invalid `version` value"));
}
}
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,
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
class_hash: tagged.class_hash,
sender_address: tagged.sender_address,
})
}
}
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,
#[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,
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub class_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub sender_address: &'a FieldElement,
}
let version = &1;
let r#type = "DECLARE";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
r#type,
class_hash: &self.class_hash,
sender_address: &self.sender_address,
};
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,
#[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,
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub class_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub sender_address: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.version {
if tag_field != &1 {
return Err(serde::de::Error::custom("invalid `version` value"));
}
}
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,
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
class_hash: tagged.class_hash,
sender_address: tagged.sender_address,
})
}
}
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,
#[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,
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub class_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub sender_address: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub compiled_class_hash: &'a FieldElement,
}
let version = &2;
let r#type = "DECLARE";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
r#type,
class_hash: &self.class_hash,
sender_address: &self.sender_address,
compiled_class_hash: &self.compiled_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,
#[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,
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub class_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub sender_address: FieldElement,
#[serde_as(as = "UfeHex")]
pub compiled_class_hash: FieldElement,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.version {
if tag_field != &2 {
return Err(serde::de::Error::custom("invalid `version` value"));
}
}
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,
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
class_hash: tagged.class_hash,
sender_address: tagged.sender_address,
compiled_class_hash: tagged.compiled_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,
#[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,
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 version = &1;
let r#type = "DEPLOY_ACCOUNT";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
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 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,
#[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,
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.version {
if tag_field != &1 {
return Err(serde::de::Error::custom("invalid `version` 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,
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 status: &'a TransactionStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: &'a FieldElement,
pub block_number: &'a u64,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
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,
status: &self.status,
block_hash: &self.block_hash,
block_number: &self.block_number,
messages_sent: &self.messages_sent,
events: &self.events,
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 status: TransactionStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
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,
status: tagged.status,
block_hash: tagged.block_hash,
block_number: tagged.block_number,
messages_sent: tagged.messages_sent,
events: tagged.events,
contract_address: tagged.contract_address,
})
}
}
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 = "UfeHex")]
pub class_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],
}
let r#type = "DEPLOY";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
class_hash: &self.class_hash,
version: &self.version,
r#type,
contract_address_salt: &self.contract_address_salt,
constructor_calldata: &self.constructor_calldata,
};
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 = "UfeHex")]
pub class_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>,
}
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,
class_hash: tagged.class_hash,
version: tagged.version,
contract_address_salt: tagged.contract_address_salt,
constructor_calldata: tagged.constructor_calldata,
})
}
}
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 status: &'a TransactionStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: &'a FieldElement,
pub block_number: &'a u64,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
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,
status: &self.status,
block_hash: &self.block_hash,
block_number: &self.block_number,
messages_sent: &self.messages_sent,
events: &self.events,
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 status: TransactionStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
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,
status: tagged.status,
block_hash: tagged.block_hash,
block_number: tagged.block_number,
messages_sent: tagged.messages_sent,
events: tagged.events,
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 status: &'a TransactionStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: &'a FieldElement,
pub block_number: &'a u64,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
}
let r#type = "INVOKE";
let tagged = Tagged {
r#type,
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
status: &self.status,
block_hash: &self.block_hash,
block_number: &self.block_number,
messages_sent: &self.messages_sent,
events: &self.events,
};
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 status: TransactionStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
}
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,
status: tagged.status,
block_hash: tagged.block_hash,
block_number: tagged.block_number,
messages_sent: tagged.messages_sent,
events: tagged.events,
})
}
}
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,
#[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,
pub r#type: &'a str,
#[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 version = &0;
let r#type = "INVOKE";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
r#type,
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,
#[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,
pub r#type: Option<String>,
#[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.version {
if tag_field != &0 {
return Err(serde::de::Error::custom("invalid `version` value"));
}
}
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,
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
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,
#[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,
pub r#type: &'a str,
#[serde_as(as = "UfeHex")]
pub sender_address: &'a FieldElement,
#[serde_as(as = "[UfeHex]")]
pub calldata: &'a [FieldElement],
}
let version = &1;
let r#type = "INVOKE";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
max_fee: &self.max_fee,
version,
signature: &self.signature,
nonce: &self.nonce,
r#type,
sender_address: &self.sender_address,
calldata: &self.calldata,
};
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,
#[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,
pub r#type: Option<String>,
#[serde_as(as = "UfeHex")]
pub sender_address: FieldElement,
#[serde_as(as = "Vec<UfeHex>")]
pub calldata: Vec<FieldElement>,
}
let tagged = Tagged::deserialize(deserializer)?;
if let Some(tag_field) = &tagged.version {
if tag_field != &1 {
return Err(serde::de::Error::custom("invalid `version` value"));
}
}
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,
max_fee: tagged.max_fee,
signature: tagged.signature,
nonce: tagged.nonce,
sender_address: tagged.sender_address,
calldata: tagged.calldata,
})
}
}
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,
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: &'a FieldElement,
pub status: &'a TransactionStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: &'a FieldElement,
pub block_number: &'a u64,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
}
let r#type = "L1_HANDLER";
let tagged = Tagged {
r#type,
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
status: &self.status,
block_hash: &self.block_hash,
block_number: &self.block_number,
messages_sent: &self.messages_sent,
events: &self.events,
};
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>,
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: FieldElement,
pub status: TransactionStatus,
#[serde_as(as = "UfeHex")]
pub block_hash: FieldElement,
pub block_number: u64,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
}
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,
actual_fee: tagged.actual_fee,
status: tagged.status,
block_hash: tagged.block_hash,
block_number: tagged.block_number,
messages_sent: tagged.messages_sent,
events: tagged.events,
})
}
}
impl Serialize for PendingDeclareTransactionReceipt {
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 r#type: &'a str,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
}
let r#type = "DECLARE";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
r#type,
messages_sent: &self.messages_sent,
events: &self.events,
};
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 {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: FieldElement,
pub r#type: Option<String>,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
}
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,
messages_sent: tagged.messages_sent,
events: tagged.events,
})
}
}
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 r#type: &'a str,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
}
let r#type = "DEPLOY_ACCOUNT";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
r#type,
messages_sent: &self.messages_sent,
events: &self.events,
};
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 r#type: Option<String>,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
}
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,
messages_sent: tagged.messages_sent,
events: tagged.events,
})
}
}
impl Serialize for PendingDeployTransactionReceipt {
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 r#type: &'a str,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
#[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,
r#type,
messages_sent: &self.messages_sent,
events: &self.events,
contract_address: &self.contract_address,
};
Tagged::serialize(&tagged, serializer)
}
}
impl<'de> Deserialize<'de> for PendingDeployTransactionReceipt {
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 r#type: Option<String>,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
#[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,
messages_sent: tagged.messages_sent,
events: tagged.events,
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> {
#[serde_as(as = "UfeHex")]
pub transaction_hash: &'a FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: &'a FieldElement,
pub r#type: &'a str,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
}
let r#type = "INVOKE";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
r#type,
messages_sent: &self.messages_sent,
events: &self.events,
};
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 {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: FieldElement,
pub r#type: Option<String>,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
}
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,
messages_sent: tagged.messages_sent,
events: tagged.events,
})
}
}
impl Serialize for PendingL1HandlerTransactionReceipt {
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 r#type: &'a str,
pub messages_sent: &'a [MsgToL1],
pub events: &'a [Event],
}
let r#type = "L1_HANDLER";
let tagged = Tagged {
transaction_hash: &self.transaction_hash,
actual_fee: &self.actual_fee,
r#type,
messages_sent: &self.messages_sent,
events: &self.events,
};
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 {
#[serde_as(as = "UfeHex")]
pub transaction_hash: FieldElement,
#[serde_as(as = "UfeHex")]
pub actual_fee: FieldElement,
pub r#type: Option<String>,
pub messages_sent: Vec<MsgToL1>,
pub events: Vec<Event>,
}
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,
actual_fee: tagged.actual_fee,
messages_sent: tagged.messages_sent,
events: tagged.events,
})
}
}
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 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 PendingTransactionsRequest {
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 PendingTransactionsRequest {
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)
}
}