1#![allow(missing_docs)]
35#![allow(clippy::doc_markdown)]
36#![allow(clippy::missing_const_for_fn)]
37
38use alloc::{format, string::*, vec::*};
39
40use indexmap::IndexMap;
41use serde::{Deserialize, Deserializer, Serialize, Serializer};
42use serde_with::serde_as;
43
44use crate::serde::byte_array::base64;
45
46use super::{
47 serde_impls::{MerkleNodeMap, NumAsHex, OwnedContractExecutionError},
48 *,
49};
50
51#[cfg(target_has_atomic = "ptr")]
52pub type OwnedPtr<T> = alloc::sync::Arc<T>;
53#[cfg(not(target_has_atomic = "ptr"))]
54pub type OwnedPtr<T> = alloc::boxed::Box<T>;
55
56#[cfg(feature = "std")]
57type RandomState = std::hash::RandomState;
58#[cfg(not(feature = "std"))]
59type RandomState = foldhash::fast::RandomState;
60
61const QUERY_VERSION_OFFSET: Felt = Felt::from_raw([
62 576460752142434320,
63 18446744073709551584,
64 17407,
65 18446744073700081665,
66]);
67
68pub type BroadcastedInvokeTransaction = BroadcastedInvokeTransactionV3;
69pub type BroadcastedDeployAccountTransaction = BroadcastedDeployAccountTransactionV3;
70pub type BroadcastedDeclareTransaction = BroadcastedDeclareTransactionV3;
71
72#[serde_as]
74#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
75#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
76pub struct BinaryNode {
77 #[serde_as(as = "UfeHex")]
79 pub left: Felt,
80 #[serde_as(as = "UfeHex")]
82 pub right: Felt,
83}
84
85#[serde_as]
87#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
88#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
89pub struct BlockHeader {
90 #[serde_as(as = "UfeHex")]
92 pub block_hash: Felt,
93 #[serde_as(as = "UfeHex")]
95 pub parent_hash: Felt,
96 pub block_number: u64,
98 #[serde_as(as = "UfeHex")]
100 pub new_root: Felt,
101 pub timestamp: u64,
103 #[serde_as(as = "UfeHex")]
105 pub sequencer_address: Felt,
106 pub l1_gas_price: ResourcePrice,
108 pub l2_gas_price: ResourcePrice,
110 pub l1_data_gas_price: ResourcePrice,
112 pub l1_da_mode: L1DataAvailabilityMode,
114 pub starknet_version: String,
116}
117
118#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
122pub enum BlockStatus {
123 #[serde(rename = "PENDING")]
124 Pending,
125 #[serde(rename = "ACCEPTED_ON_L2")]
126 AcceptedOnL2,
127 #[serde(rename = "ACCEPTED_ON_L1")]
128 AcceptedOnL1,
129 #[serde(rename = "REJECTED")]
130 Rejected,
131}
132
133#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
137pub enum BlockTag {
138 #[serde(rename = "latest")]
139 Latest,
140 #[serde(rename = "pending")]
141 Pending,
142}
143
144#[serde_as]
148#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
149#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
150pub struct BlockWithReceipts {
151 pub status: BlockStatus,
153 #[serde_as(as = "UfeHex")]
155 pub block_hash: Felt,
156 #[serde_as(as = "UfeHex")]
158 pub parent_hash: Felt,
159 pub block_number: u64,
161 #[serde_as(as = "UfeHex")]
163 pub new_root: Felt,
164 pub timestamp: u64,
166 #[serde_as(as = "UfeHex")]
168 pub sequencer_address: Felt,
169 pub l1_gas_price: ResourcePrice,
171 pub l2_gas_price: ResourcePrice,
173 pub l1_data_gas_price: ResourcePrice,
175 pub l1_da_mode: L1DataAvailabilityMode,
177 pub starknet_version: String,
179 pub transactions: Vec<TransactionWithReceipt>,
181}
182
183#[serde_as]
187#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
188#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
189pub struct BlockWithTxHashes {
190 pub status: BlockStatus,
192 #[serde_as(as = "UfeHex")]
194 pub block_hash: Felt,
195 #[serde_as(as = "UfeHex")]
197 pub parent_hash: Felt,
198 pub block_number: u64,
200 #[serde_as(as = "UfeHex")]
202 pub new_root: Felt,
203 pub timestamp: u64,
205 #[serde_as(as = "UfeHex")]
207 pub sequencer_address: Felt,
208 pub l1_gas_price: ResourcePrice,
210 pub l2_gas_price: ResourcePrice,
212 pub l1_data_gas_price: ResourcePrice,
214 pub l1_da_mode: L1DataAvailabilityMode,
216 pub starknet_version: String,
218 #[serde_as(as = "Vec<UfeHex>")]
220 pub transactions: Vec<Felt>,
221}
222
223#[serde_as]
227#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
228#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
229pub struct BlockWithTxs {
230 pub status: BlockStatus,
232 #[serde_as(as = "UfeHex")]
234 pub block_hash: Felt,
235 #[serde_as(as = "UfeHex")]
237 pub parent_hash: Felt,
238 pub block_number: u64,
240 #[serde_as(as = "UfeHex")]
242 pub new_root: Felt,
243 pub timestamp: u64,
245 #[serde_as(as = "UfeHex")]
247 pub sequencer_address: Felt,
248 pub l1_gas_price: ResourcePrice,
250 pub l2_gas_price: ResourcePrice,
252 pub l1_data_gas_price: ResourcePrice,
254 pub l1_da_mode: L1DataAvailabilityMode,
256 pub starknet_version: String,
258 pub transactions: Vec<Transaction>,
260}
261
262#[derive(Debug, Clone, PartialEq, Eq)]
266pub struct BroadcastedDeclareTransactionV3 {
267 pub sender_address: Felt,
269 pub compiled_class_hash: Felt,
271 pub signature: Vec<Felt>,
273 pub nonce: Felt,
275 pub contract_class: OwnedPtr<FlattenedSierraClass>,
277 pub resource_bounds: ResourceBoundsMapping,
279 pub tip: u64,
281 pub paymaster_data: Vec<Felt>,
283 pub account_deployment_data: Vec<Felt>,
285 pub nonce_data_availability_mode: DataAvailabilityMode,
287 pub fee_data_availability_mode: DataAvailabilityMode,
289 pub is_query: bool,
291}
292
293#[derive(Debug, Clone, PartialEq, Eq)]
294pub struct BroadcastedDeployAccountTransactionV3 {
295 pub signature: Vec<Felt>,
297 pub nonce: Felt,
299 pub contract_address_salt: Felt,
301 pub constructor_calldata: Vec<Felt>,
303 pub class_hash: Felt,
305 pub resource_bounds: ResourceBoundsMapping,
307 pub tip: u64,
309 pub paymaster_data: Vec<Felt>,
311 pub nonce_data_availability_mode: DataAvailabilityMode,
313 pub fee_data_availability_mode: DataAvailabilityMode,
315 pub is_query: bool,
317}
318
319#[derive(Debug, Clone, PartialEq, Eq)]
320pub struct BroadcastedInvokeTransactionV3 {
321 pub sender_address: Felt,
323 pub calldata: Vec<Felt>,
326 pub signature: Vec<Felt>,
328 pub nonce: Felt,
330 pub resource_bounds: ResourceBoundsMapping,
332 pub tip: u64,
334 pub paymaster_data: Vec<Felt>,
336 pub account_deployment_data: Vec<Felt>,
338 pub nonce_data_availability_mode: DataAvailabilityMode,
340 pub fee_data_availability_mode: DataAvailabilityMode,
342 pub is_query: bool,
344}
345
346#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
347pub enum CallType {
348 #[serde(rename = "LIBRARY_CALL")]
349 LibraryCall,
350 #[serde(rename = "CALL")]
351 Call,
352 #[serde(rename = "DELEGATE")]
353 Delegate,
354}
355
356#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
360#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
361pub struct CompressedLegacyContractClass {
362 #[serde(with = "base64")]
364 pub program: Vec<u8>,
365 pub entry_points_by_type: LegacyEntryPointsByType,
367 #[serde(skip_serializing_if = "Option::is_none")]
369 pub abi: Option<Vec<LegacyContractAbiEntry>>,
370}
371
372#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
374#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
375pub struct ContractErrorData {
376 pub revert_error: ContractExecutionError,
378}
379
380#[serde_as]
383#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
384#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
385pub struct ContractLeafData {
386 #[serde_as(as = "UfeHex")]
387 pub nonce: Felt,
388 #[serde_as(as = "UfeHex")]
389 pub class_hash: Felt,
390 #[serde(skip_serializing_if = "Option::is_none")]
391 #[serde_as(as = "Option<UfeHex>")]
392 pub storage_root: Option<Felt>,
393}
394
395#[serde_as]
397#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
398#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
399pub struct ContractStorageDiffItem {
400 #[serde_as(as = "UfeHex")]
402 pub address: Felt,
403 pub storage_entries: Vec<StorageEntry>,
405}
406
407#[serde_as]
408#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
409#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
410pub struct ContractStorageKeys {
411 #[serde_as(as = "UfeHex")]
412 pub contract_address: Felt,
413 #[serde_as(as = "Vec<UfeHex>")]
414 pub storage_keys: Vec<Felt>,
415}
416
417#[serde_as]
418#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
419#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
420pub struct ContractsProof {
421 #[serde_as(as = "MerkleNodeMap")]
423 pub nodes: IndexMap<Felt, MerkleNode, RandomState>,
424 pub contract_leaves_data: Vec<ContractLeafData>,
425}
426
427#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
432pub enum DataAvailabilityMode {
433 #[serde(rename = "L1")]
434 L1,
435 #[serde(rename = "L2")]
436 L2,
437}
438
439#[derive(Debug, Clone, PartialEq, Eq)]
441pub struct DeclareTransactionReceipt {
442 pub transaction_hash: Felt,
444 pub actual_fee: FeePayment,
446 pub finality_status: TransactionFinalityStatus,
448 pub messages_sent: Vec<MsgToL1>,
450 pub events: Vec<Event>,
452 pub execution_resources: ExecutionResources,
454 pub execution_result: ExecutionResult,
455}
456
457#[derive(Debug, Clone, PartialEq, Eq)]
459pub struct DeclareTransactionTrace {
460 pub validate_invocation: Option<FunctionInvocation>,
461 pub fee_transfer_invocation: Option<FunctionInvocation>,
462 pub state_diff: Option<StateDiff>,
464 pub execution_resources: ExecutionResources,
466}
467
468#[derive(Debug, Clone, PartialEq, Eq)]
472pub struct DeclareTransactionV0 {
473 pub transaction_hash: Felt,
475 pub sender_address: Felt,
477 pub max_fee: Felt,
479 pub signature: Vec<Felt>,
481 pub class_hash: Felt,
483}
484
485#[derive(Debug, Clone, PartialEq, Eq)]
487pub struct DeclareTransactionV0Content {
488 pub sender_address: Felt,
490 pub max_fee: Felt,
492 pub signature: Vec<Felt>,
494 pub class_hash: Felt,
496}
497
498#[derive(Debug, Clone, PartialEq, Eq)]
502pub struct DeclareTransactionV1 {
503 pub transaction_hash: Felt,
505 pub sender_address: Felt,
507 pub max_fee: Felt,
509 pub signature: Vec<Felt>,
511 pub nonce: Felt,
513 pub class_hash: Felt,
515}
516
517#[derive(Debug, Clone, PartialEq, Eq)]
519pub struct DeclareTransactionV1Content {
520 pub sender_address: Felt,
522 pub max_fee: Felt,
524 pub signature: Vec<Felt>,
526 pub nonce: Felt,
528 pub class_hash: Felt,
530}
531
532#[derive(Debug, Clone, PartialEq, Eq)]
536pub struct DeclareTransactionV2 {
537 pub transaction_hash: Felt,
539 pub sender_address: Felt,
541 pub compiled_class_hash: Felt,
543 pub max_fee: Felt,
545 pub signature: Vec<Felt>,
547 pub nonce: Felt,
549 pub class_hash: Felt,
551}
552
553#[derive(Debug, Clone, PartialEq, Eq)]
555pub struct DeclareTransactionV2Content {
556 pub sender_address: Felt,
558 pub compiled_class_hash: Felt,
560 pub max_fee: Felt,
562 pub signature: Vec<Felt>,
564 pub nonce: Felt,
566 pub class_hash: Felt,
568}
569
570#[derive(Debug, Clone, PartialEq, Eq)]
574pub struct DeclareTransactionV3 {
575 pub transaction_hash: Felt,
577 pub sender_address: Felt,
579 pub compiled_class_hash: Felt,
581 pub signature: Vec<Felt>,
583 pub nonce: Felt,
585 pub class_hash: Felt,
587 pub resource_bounds: ResourceBoundsMapping,
589 pub tip: u64,
591 pub paymaster_data: Vec<Felt>,
593 pub account_deployment_data: Vec<Felt>,
595 pub nonce_data_availability_mode: DataAvailabilityMode,
597 pub fee_data_availability_mode: DataAvailabilityMode,
599}
600
601#[derive(Debug, Clone, PartialEq, Eq)]
603pub struct DeclareTransactionV3Content {
604 pub sender_address: Felt,
606 pub compiled_class_hash: Felt,
608 pub signature: Vec<Felt>,
610 pub nonce: Felt,
612 pub class_hash: Felt,
614 pub resource_bounds: ResourceBoundsMapping,
616 pub tip: u64,
618 pub paymaster_data: Vec<Felt>,
620 pub account_deployment_data: Vec<Felt>,
622 pub nonce_data_availability_mode: DataAvailabilityMode,
624 pub fee_data_availability_mode: DataAvailabilityMode,
626}
627
628#[serde_as]
632#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
633#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
634pub struct DeclaredClassItem {
635 #[serde_as(as = "UfeHex")]
637 pub class_hash: Felt,
638 #[serde_as(as = "UfeHex")]
640 pub compiled_class_hash: Felt,
641}
642
643#[derive(Debug, Clone, PartialEq, Eq)]
645pub struct DeployAccountTransactionReceipt {
646 pub transaction_hash: Felt,
648 pub actual_fee: FeePayment,
650 pub finality_status: TransactionFinalityStatus,
652 pub messages_sent: Vec<MsgToL1>,
654 pub events: Vec<Event>,
656 pub execution_resources: ExecutionResources,
658 pub execution_result: ExecutionResult,
659 pub contract_address: Felt,
661}
662
663#[derive(Debug, Clone, PartialEq, Eq)]
665pub struct DeployAccountTransactionTrace {
666 pub validate_invocation: Option<FunctionInvocation>,
667 pub constructor_invocation: FunctionInvocation,
670 pub fee_transfer_invocation: Option<FunctionInvocation>,
671 pub state_diff: Option<StateDiff>,
673 pub execution_resources: ExecutionResources,
675}
676
677#[derive(Debug, Clone, PartialEq, Eq)]
681pub struct DeployAccountTransactionV1 {
682 pub transaction_hash: Felt,
684 pub max_fee: Felt,
686 pub signature: Vec<Felt>,
688 pub nonce: Felt,
690 pub contract_address_salt: Felt,
692 pub constructor_calldata: Vec<Felt>,
694 pub class_hash: Felt,
696}
697
698#[derive(Debug, Clone, PartialEq, Eq)]
702pub struct DeployAccountTransactionV1Content {
703 pub max_fee: Felt,
705 pub signature: Vec<Felt>,
707 pub nonce: Felt,
709 pub contract_address_salt: Felt,
711 pub constructor_calldata: Vec<Felt>,
713 pub class_hash: Felt,
715}
716
717#[derive(Debug, Clone, PartialEq, Eq)]
721pub struct DeployAccountTransactionV3 {
722 pub transaction_hash: Felt,
724 pub signature: Vec<Felt>,
726 pub nonce: Felt,
728 pub contract_address_salt: Felt,
730 pub constructor_calldata: Vec<Felt>,
732 pub class_hash: Felt,
734 pub resource_bounds: ResourceBoundsMapping,
736 pub tip: u64,
738 pub paymaster_data: Vec<Felt>,
740 pub nonce_data_availability_mode: DataAvailabilityMode,
742 pub fee_data_availability_mode: DataAvailabilityMode,
744}
745
746#[derive(Debug, Clone, PartialEq, Eq)]
750pub struct DeployAccountTransactionV3Content {
751 pub signature: Vec<Felt>,
753 pub nonce: Felt,
755 pub contract_address_salt: Felt,
757 pub constructor_calldata: Vec<Felt>,
759 pub class_hash: Felt,
761 pub resource_bounds: ResourceBoundsMapping,
763 pub tip: u64,
765 pub paymaster_data: Vec<Felt>,
767 pub nonce_data_availability_mode: DataAvailabilityMode,
769 pub fee_data_availability_mode: DataAvailabilityMode,
771}
772
773#[derive(Debug, Clone, PartialEq, Eq)]
778pub struct DeployTransaction {
779 pub transaction_hash: Felt,
781 pub version: Felt,
783 pub contract_address_salt: Felt,
785 pub constructor_calldata: Vec<Felt>,
787 pub class_hash: Felt,
789}
790
791#[derive(Debug, Clone, PartialEq, Eq)]
793pub struct DeployTransactionContent {
794 pub version: Felt,
796 pub contract_address_salt: Felt,
798 pub constructor_calldata: Vec<Felt>,
800 pub class_hash: Felt,
802}
803
804#[derive(Debug, Clone, PartialEq, Eq)]
806pub struct DeployTransactionReceipt {
807 pub transaction_hash: Felt,
809 pub actual_fee: FeePayment,
811 pub finality_status: TransactionFinalityStatus,
813 pub messages_sent: Vec<MsgToL1>,
815 pub events: Vec<Event>,
817 pub execution_resources: ExecutionResources,
819 pub execution_result: ExecutionResult,
820 pub contract_address: Felt,
822}
823
824#[serde_as]
826#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
827#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
828pub struct DeployedContractItem {
829 #[serde_as(as = "UfeHex")]
831 pub address: Felt,
832 #[serde_as(as = "UfeHex")]
834 pub class_hash: Felt,
835}
836
837#[serde_as]
839#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
840#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
841pub struct EdgeNode {
842 #[serde_as(as = "UfeHex")]
845 pub path: Felt,
846 pub length: u64,
848 #[serde_as(as = "UfeHex")]
850 pub child: Felt,
851}
852
853#[serde_as]
858#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
859#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
860pub struct EmittedEvent {
861 #[serde_as(as = "UfeHex")]
863 pub from_address: Felt,
864 #[serde_as(as = "Vec<UfeHex>")]
866 pub keys: Vec<Felt>,
867 #[serde_as(as = "Vec<UfeHex>")]
869 pub data: Vec<Felt>,
870 #[serde(skip_serializing_if = "Option::is_none")]
872 #[serde_as(as = "Option<UfeHex>")]
873 pub block_hash: Option<Felt>,
874 #[serde(skip_serializing_if = "Option::is_none")]
876 pub block_number: Option<u64>,
877 #[serde_as(as = "UfeHex")]
879 pub transaction_hash: Felt,
880}
881
882#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
883pub enum EntryPointType {
884 #[serde(rename = "EXTERNAL")]
885 External,
886 #[serde(rename = "L1_HANDLER")]
887 L1Handler,
888 #[serde(rename = "CONSTRUCTOR")]
889 Constructor,
890}
891
892#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
894#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
895pub struct EntryPointsByType {
896 #[serde(rename = "CONSTRUCTOR")]
898 pub constructor: Vec<SierraEntryPoint>,
899 #[serde(rename = "EXTERNAL")]
901 pub external: Vec<SierraEntryPoint>,
902 #[serde(rename = "L1_HANDLER")]
904 pub l1_handler: Vec<SierraEntryPoint>,
905}
906
907#[serde_as]
911#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
912#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
913pub struct Event {
914 #[serde_as(as = "UfeHex")]
916 pub from_address: Felt,
917 #[serde_as(as = "Vec<UfeHex>")]
919 pub keys: Vec<Felt>,
920 #[serde_as(as = "Vec<UfeHex>")]
922 pub data: Vec<Felt>,
923}
924
925#[serde_as]
929#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
930#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
931pub struct EventFilter {
932 #[serde(skip_serializing_if = "Option::is_none")]
934 pub from_block: Option<BlockId>,
935 #[serde(skip_serializing_if = "Option::is_none")]
937 pub to_block: Option<BlockId>,
938 #[serde(skip_serializing_if = "Option::is_none")]
940 #[serde_as(as = "Option<UfeHex>")]
941 pub address: Option<Felt>,
942 #[serde(skip_serializing_if = "Option::is_none")]
944 #[serde_as(as = "Option<Vec<Vec<UfeHex>>>")]
945 pub keys: Option<Vec<Vec<Felt>>>,
946}
947
948#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
950#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
951pub struct EventFilterWithPage {
952 #[serde(flatten)]
953 pub event_filter: EventFilter,
954 #[serde(flatten)]
955 pub result_page_request: ResultPageRequest,
956}
957
958#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
960#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
961pub struct EventsChunk {
962 pub events: Vec<EmittedEvent>,
964 #[serde(skip_serializing_if = "Option::is_none")]
967 pub continuation_token: Option<String>,
968}
969
970#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
974#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
975pub struct ExecutionResources {
976 pub l1_gas: u64,
979 pub l1_data_gas: u64,
981 pub l2_gas: u64,
983}
984
985#[serde_as]
987#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
988#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
989pub struct FeeEstimate {
990 #[serde_as(as = "NumAsHex")]
993 pub l1_gas_consumed: u64,
994 #[serde_as(as = "NumAsHex")]
997 pub l1_gas_price: u128,
998 #[serde_as(as = "NumAsHex")]
1000 pub l2_gas_consumed: u64,
1001 #[serde_as(as = "NumAsHex")]
1004 pub l2_gas_price: u128,
1005 #[serde_as(as = "NumAsHex")]
1007 pub l1_data_gas_consumed: u64,
1008 #[serde_as(as = "NumAsHex")]
1011 pub l1_data_gas_price: u128,
1012 #[serde_as(as = "NumAsHex")]
1016 pub overall_fee: u128,
1017 pub unit: PriceUnit,
1019}
1020
1021#[serde_as]
1025#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1026#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1027pub struct FeePayment {
1028 #[serde_as(as = "UfeHex")]
1030 pub amount: Felt,
1031 pub unit: PriceUnit,
1033}
1034
1035#[serde_as]
1037#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1038#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1039pub struct FlattenedSierraClass {
1040 #[serde_as(as = "Vec<UfeHex>")]
1042 pub sierra_program: Vec<Felt>,
1043 pub contract_class_version: String,
1045 pub entry_points_by_type: EntryPointsByType,
1047 pub abi: String,
1049}
1050
1051#[serde_as]
1055#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1056#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1057pub struct FunctionCall {
1058 #[serde_as(as = "UfeHex")]
1060 pub contract_address: Felt,
1061 #[serde_as(as = "UfeHex")]
1063 pub entry_point_selector: Felt,
1064 #[serde_as(as = "Vec<UfeHex>")]
1066 pub calldata: Vec<Felt>,
1067}
1068
1069#[serde_as]
1070#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1071#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1072pub struct FunctionInvocation {
1073 #[serde_as(as = "UfeHex")]
1075 pub contract_address: Felt,
1076 #[serde_as(as = "UfeHex")]
1078 pub entry_point_selector: Felt,
1079 #[serde_as(as = "Vec<UfeHex>")]
1081 pub calldata: Vec<Felt>,
1082 #[serde_as(as = "UfeHex")]
1084 pub caller_address: Felt,
1085 #[serde_as(as = "UfeHex")]
1087 pub class_hash: Felt,
1088 pub entry_point_type: EntryPointType,
1089 pub call_type: CallType,
1090 #[serde_as(as = "Vec<UfeHex>")]
1092 pub result: Vec<Felt>,
1093 pub calls: Vec<FunctionInvocation>,
1095 pub events: Vec<OrderedEvent>,
1097 pub messages: Vec<OrderedMessage>,
1099 pub execution_resources: InnerCallExecutionResources,
1101 pub is_reverted: bool,
1103}
1104
1105#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1107pub enum FunctionStateMutability {
1108 #[serde(rename = "view")]
1109 View,
1110}
1111
1112#[serde_as]
1113#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1114#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1115pub struct GlobalRoots {
1116 #[serde_as(as = "UfeHex")]
1117 pub contracts_tree_root: Felt,
1118 #[serde_as(as = "UfeHex")]
1119 pub classes_tree_root: Felt,
1120 #[serde_as(as = "UfeHex")]
1123 pub block_hash: Felt,
1124}
1125
1126#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1131#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1132pub struct InnerCallExecutionResources {
1133 pub l1_gas: u64,
1136 pub l2_gas: u64,
1138}
1139
1140#[serde_as]
1141#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1142#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1143pub struct InnerContractExecutionError {
1144 #[serde_as(as = "UfeHex")]
1145 pub contract_address: Felt,
1146 #[serde_as(as = "UfeHex")]
1147 pub class_hash: Felt,
1148 #[serde_as(as = "UfeHex")]
1149 pub selector: Felt,
1150 #[serde_as(as = "OwnedContractExecutionError")]
1151 pub error: OwnedPtr<ContractExecutionError>,
1152}
1153
1154#[derive(Debug, Clone, PartialEq, Eq)]
1156pub struct InvokeTransactionReceipt {
1157 pub transaction_hash: Felt,
1159 pub actual_fee: FeePayment,
1161 pub finality_status: TransactionFinalityStatus,
1163 pub messages_sent: Vec<MsgToL1>,
1165 pub events: Vec<Event>,
1167 pub execution_resources: ExecutionResources,
1169 pub execution_result: ExecutionResult,
1170}
1171
1172#[derive(Debug, Clone, PartialEq, Eq)]
1174pub struct InvokeTransactionTrace {
1175 pub validate_invocation: Option<FunctionInvocation>,
1176 pub execute_invocation: ExecuteInvocation,
1177 pub fee_transfer_invocation: Option<FunctionInvocation>,
1178 pub state_diff: Option<StateDiff>,
1180 pub execution_resources: ExecutionResources,
1182}
1183
1184#[derive(Debug, Clone, PartialEq, Eq)]
1188pub struct InvokeTransactionV0 {
1189 pub transaction_hash: Felt,
1191 pub max_fee: Felt,
1193 pub signature: Vec<Felt>,
1195 pub contract_address: Felt,
1197 pub entry_point_selector: Felt,
1199 pub calldata: Vec<Felt>,
1201}
1202
1203#[derive(Debug, Clone, PartialEq, Eq)]
1207pub struct InvokeTransactionV0Content {
1208 pub max_fee: Felt,
1210 pub signature: Vec<Felt>,
1212 pub contract_address: Felt,
1214 pub entry_point_selector: Felt,
1216 pub calldata: Vec<Felt>,
1218}
1219
1220#[derive(Debug, Clone, PartialEq, Eq)]
1224pub struct InvokeTransactionV1 {
1225 pub transaction_hash: Felt,
1227 pub sender_address: Felt,
1229 pub calldata: Vec<Felt>,
1232 pub max_fee: Felt,
1234 pub signature: Vec<Felt>,
1236 pub nonce: Felt,
1238}
1239
1240#[derive(Debug, Clone, PartialEq, Eq)]
1244pub struct InvokeTransactionV1Content {
1245 pub sender_address: Felt,
1247 pub calldata: Vec<Felt>,
1250 pub max_fee: Felt,
1252 pub signature: Vec<Felt>,
1254 pub nonce: Felt,
1256}
1257
1258#[derive(Debug, Clone, PartialEq, Eq)]
1262pub struct InvokeTransactionV3 {
1263 pub transaction_hash: Felt,
1265 pub sender_address: Felt,
1267 pub calldata: Vec<Felt>,
1270 pub signature: Vec<Felt>,
1272 pub nonce: Felt,
1274 pub resource_bounds: ResourceBoundsMapping,
1276 pub tip: u64,
1278 pub paymaster_data: Vec<Felt>,
1280 pub account_deployment_data: Vec<Felt>,
1282 pub nonce_data_availability_mode: DataAvailabilityMode,
1284 pub fee_data_availability_mode: DataAvailabilityMode,
1286}
1287
1288#[derive(Debug, Clone, PartialEq, Eq)]
1292pub struct InvokeTransactionV3Content {
1293 pub sender_address: Felt,
1295 pub calldata: Vec<Felt>,
1298 pub signature: Vec<Felt>,
1300 pub nonce: Felt,
1302 pub resource_bounds: ResourceBoundsMapping,
1304 pub tip: u64,
1306 pub paymaster_data: Vec<Felt>,
1308 pub account_deployment_data: Vec<Felt>,
1310 pub nonce_data_availability_mode: DataAvailabilityMode,
1312 pub fee_data_availability_mode: DataAvailabilityMode,
1314}
1315
1316#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1318pub enum L1DataAvailabilityMode {
1319 #[serde(rename = "BLOB")]
1320 Blob,
1321 #[serde(rename = "CALLDATA")]
1322 Calldata,
1323}
1324
1325#[derive(Debug, Clone, PartialEq, Eq)]
1329pub struct L1HandlerTransaction {
1330 pub transaction_hash: Felt,
1332 pub version: Felt,
1334 pub nonce: u64,
1337 pub contract_address: Felt,
1339 pub entry_point_selector: Felt,
1341 pub calldata: Vec<Felt>,
1343}
1344
1345#[derive(Debug, Clone, PartialEq, Eq)]
1349pub struct L1HandlerTransactionContent {
1350 pub version: Felt,
1352 pub nonce: u64,
1355 pub contract_address: Felt,
1357 pub entry_point_selector: Felt,
1359 pub calldata: Vec<Felt>,
1361}
1362
1363#[derive(Debug, Clone, PartialEq, Eq)]
1367pub struct L1HandlerTransactionReceipt {
1368 pub message_hash: Hash256,
1370 pub transaction_hash: Felt,
1372 pub actual_fee: FeePayment,
1374 pub finality_status: TransactionFinalityStatus,
1376 pub messages_sent: Vec<MsgToL1>,
1378 pub events: Vec<Event>,
1380 pub execution_resources: ExecutionResources,
1382 pub execution_result: ExecutionResult,
1383}
1384
1385#[derive(Debug, Clone, PartialEq, Eq)]
1387pub struct L1HandlerTransactionTrace {
1388 pub function_invocation: FunctionInvocation,
1391 pub state_diff: Option<StateDiff>,
1393 pub execution_resources: ExecutionResources,
1395}
1396
1397#[serde_as]
1399#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1400#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1401pub struct LegacyContractEntryPoint {
1402 #[serde_as(as = "NumAsHex")]
1404 pub offset: u64,
1405 #[serde_as(as = "UfeHex")]
1407 pub selector: Felt,
1408}
1409
1410#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1412#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1413pub struct LegacyEntryPointsByType {
1414 #[serde(rename = "CONSTRUCTOR")]
1416 pub constructor: Vec<LegacyContractEntryPoint>,
1417 #[serde(rename = "EXTERNAL")]
1419 pub external: Vec<LegacyContractEntryPoint>,
1420 #[serde(rename = "L1_HANDLER")]
1422 pub l1_handler: Vec<LegacyContractEntryPoint>,
1423}
1424
1425#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1427#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1428pub struct LegacyEventAbiEntry {
1429 pub r#type: LegacyEventAbiType,
1431 pub name: String,
1433 pub keys: Vec<LegacyTypedParameter>,
1435 pub data: Vec<LegacyTypedParameter>,
1437}
1438
1439#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1441pub enum LegacyEventAbiType {
1442 #[serde(rename = "event")]
1443 Event,
1444}
1445
1446#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1448#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1449pub struct LegacyFunctionAbiEntry {
1450 pub r#type: LegacyFunctionAbiType,
1452 pub name: String,
1454 pub inputs: Vec<LegacyTypedParameter>,
1456 pub outputs: Vec<LegacyTypedParameter>,
1458 #[serde(skip_serializing_if = "Option::is_none")]
1460 #[serde(rename = "stateMutability")]
1461 pub state_mutability: Option<FunctionStateMutability>,
1462}
1463
1464#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1466pub enum LegacyFunctionAbiType {
1467 #[serde(rename = "function")]
1468 Function,
1469 #[serde(rename = "l1_handler")]
1470 L1Handler,
1471 #[serde(rename = "constructor")]
1472 Constructor,
1473}
1474
1475#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1477#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1478pub struct LegacyStructAbiEntry {
1479 pub r#type: LegacyStructAbiType,
1481 pub name: String,
1483 pub size: u64,
1485 pub members: Vec<LegacyStructMember>,
1487}
1488
1489#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1491pub enum LegacyStructAbiType {
1492 #[serde(rename = "struct")]
1493 Struct,
1494}
1495
1496#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1498#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1499pub struct LegacyStructMember {
1500 pub name: String,
1502 pub r#type: String,
1504 pub offset: u64,
1506}
1507
1508#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1510#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1511pub struct LegacyTypedParameter {
1512 pub name: String,
1514 pub r#type: String,
1516}
1517
1518#[serde_as]
1520#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1521#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1522pub struct MsgFromL1 {
1523 pub from_address: EthAddress,
1525 #[serde_as(as = "UfeHex")]
1527 pub to_address: Felt,
1528 #[serde_as(as = "UfeHex")]
1530 pub entry_point_selector: Felt,
1531 #[serde_as(as = "Vec<UfeHex>")]
1533 pub payload: Vec<Felt>,
1534}
1535
1536#[serde_as]
1538#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1539#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1540pub struct MsgToL1 {
1541 #[serde_as(as = "UfeHex")]
1543 pub from_address: Felt,
1544 #[serde_as(as = "UfeHex")]
1546 pub to_address: Felt,
1547 #[serde_as(as = "Vec<UfeHex>")]
1549 pub payload: Vec<Felt>,
1550}
1551
1552#[serde_as]
1554#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1555#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1556pub struct NewTransactionStatus {
1557 #[serde_as(as = "UfeHex")]
1558 pub transaction_hash: Felt,
1559 pub status: TransactionStatus,
1560}
1561
1562#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1565#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1566pub struct NoTraceAvailableErrorData {
1567 pub status: SequencerTransactionStatus,
1568}
1569
1570#[serde_as]
1574#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1575#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1576pub struct NonceUpdate {
1577 #[serde_as(as = "UfeHex")]
1579 pub contract_address: Felt,
1580 #[serde_as(as = "UfeHex")]
1582 pub nonce: Felt,
1583}
1584
1585#[serde_as]
1589#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1590#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1591pub struct OrderedEvent {
1592 pub order: u64,
1594 #[serde_as(as = "Vec<UfeHex>")]
1596 pub keys: Vec<Felt>,
1597 #[serde_as(as = "Vec<UfeHex>")]
1599 pub data: Vec<Felt>,
1600}
1601
1602#[serde_as]
1606#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1607#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1608pub struct OrderedMessage {
1609 pub order: u64,
1611 #[serde_as(as = "UfeHex")]
1613 pub from_address: Felt,
1614 #[serde_as(as = "UfeHex")]
1616 pub to_address: Felt,
1617 #[serde_as(as = "Vec<UfeHex>")]
1619 pub payload: Vec<Felt>,
1620}
1621
1622#[serde_as]
1627#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1628#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1629pub struct PendingBlockWithReceipts {
1630 pub transactions: Vec<TransactionWithReceipt>,
1632 #[serde_as(as = "UfeHex")]
1634 pub parent_hash: Felt,
1635 pub timestamp: u64,
1637 #[serde_as(as = "UfeHex")]
1639 pub sequencer_address: Felt,
1640 pub l1_gas_price: ResourcePrice,
1642 pub l2_gas_price: ResourcePrice,
1644 pub l1_data_gas_price: ResourcePrice,
1646 pub l1_da_mode: L1DataAvailabilityMode,
1648 pub starknet_version: String,
1650}
1651
1652#[serde_as]
1657#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1658#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1659pub struct PendingBlockWithTxHashes {
1660 #[serde_as(as = "Vec<UfeHex>")]
1662 pub transactions: Vec<Felt>,
1663 #[serde_as(as = "UfeHex")]
1665 pub parent_hash: Felt,
1666 pub timestamp: u64,
1668 #[serde_as(as = "UfeHex")]
1670 pub sequencer_address: Felt,
1671 pub l1_gas_price: ResourcePrice,
1673 pub l2_gas_price: ResourcePrice,
1675 pub l1_data_gas_price: ResourcePrice,
1677 pub l1_da_mode: L1DataAvailabilityMode,
1679 pub starknet_version: String,
1681}
1682
1683#[serde_as]
1688#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1689#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1690pub struct PendingBlockWithTxs {
1691 pub transactions: Vec<Transaction>,
1693 #[serde_as(as = "UfeHex")]
1695 pub parent_hash: Felt,
1696 pub timestamp: u64,
1698 #[serde_as(as = "UfeHex")]
1700 pub sequencer_address: Felt,
1701 pub l1_gas_price: ResourcePrice,
1703 pub l2_gas_price: ResourcePrice,
1705 pub l1_data_gas_price: ResourcePrice,
1707 pub l1_da_mode: L1DataAvailabilityMode,
1709 pub starknet_version: String,
1711}
1712
1713#[serde_as]
1717#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1718#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1719pub struct PendingStateUpdate {
1720 #[serde_as(as = "UfeHex")]
1722 pub old_root: Felt,
1723 pub state_diff: StateDiff,
1725}
1726
1727#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1729pub enum PriceUnit {
1730 #[serde(rename = "WEI")]
1731 Wei,
1732 #[serde(rename = "FRI")]
1733 Fri,
1734}
1735
1736#[serde_as]
1740#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1741#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1742pub struct ReorgData {
1743 #[serde_as(as = "UfeHex")]
1745 pub starting_block_hash: Felt,
1746 pub starting_block_number: u64,
1748 #[serde_as(as = "UfeHex")]
1750 pub ending_block_hash: Felt,
1751 pub ending_block_number: u64,
1753}
1754
1755#[serde_as]
1759#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1760#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1761pub struct ReplacedClassItem {
1762 #[serde_as(as = "UfeHex")]
1764 pub contract_address: Felt,
1765 #[serde_as(as = "UfeHex")]
1767 pub class_hash: Felt,
1768}
1769
1770#[serde_as]
1771#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1772#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1773pub struct ResourceBounds {
1774 #[serde_as(as = "NumAsHex")]
1776 pub max_amount: u64,
1777 #[serde_as(as = "NumAsHex")]
1779 pub max_price_per_unit: u128,
1780}
1781
1782#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1783#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1784pub struct ResourceBoundsMapping {
1785 pub l1_gas: ResourceBounds,
1787 pub l1_data_gas: ResourceBounds,
1789 pub l2_gas: ResourceBounds,
1791}
1792
1793#[serde_as]
1794#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1795#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1796pub struct ResourcePrice {
1797 #[serde_as(as = "UfeHex")]
1799 pub price_in_fri: Felt,
1800 #[serde_as(as = "UfeHex")]
1802 pub price_in_wei: Felt,
1803}
1804
1805#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1807#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1808pub struct ResultPageRequest {
1809 #[serde(skip_serializing_if = "Option::is_none")]
1812 pub continuation_token: Option<String>,
1813 pub chunk_size: u64,
1815}
1816
1817#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1818#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1819pub struct RevertedInvocation {
1820 pub revert_reason: String,
1822}
1823
1824#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1829pub enum SequencerTransactionStatus {
1830 #[serde(rename = "RECEIVED")]
1831 Received,
1832 #[serde(rename = "REJECTED")]
1833 Rejected,
1834 #[serde(rename = "ACCEPTED_ON_L2")]
1835 AcceptedOnL2,
1836 #[serde(rename = "ACCEPTED_ON_L1")]
1837 AcceptedOnL1,
1838}
1839
1840#[serde_as]
1842#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1843#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1844pub struct SierraEntryPoint {
1845 #[serde_as(as = "UfeHex")]
1847 pub selector: Felt,
1848 pub function_idx: u64,
1850}
1851
1852#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1853#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
1854pub struct SimulatedTransaction {
1855 pub transaction_trace: TransactionTrace,
1857 pub fee_estimation: FeeEstimate,
1859}
1860
1861#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1866pub enum SimulationFlag {
1867 #[serde(rename = "SKIP_VALIDATE")]
1868 SkipValidate,
1869 #[serde(rename = "SKIP_FEE_CHARGE")]
1870 SkipFeeCharge,
1871}
1872
1873#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1876pub enum SimulationFlagForEstimateFee {
1877 #[serde(rename = "SKIP_VALIDATE")]
1878 SkipValidate,
1879}
1880
1881#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1883pub enum StarknetError {
1884 FailedToReceiveTransaction,
1886 ContractNotFound,
1888 EntrypointNotFound,
1890 BlockNotFound,
1892 InvalidTransactionIndex,
1894 ClassHashNotFound,
1896 TransactionHashNotFound,
1898 PageSizeTooBig,
1900 NoBlocks,
1902 InvalidContinuationToken,
1904 TooManyKeysInFilter,
1906 ContractError(ContractErrorData),
1908 TransactionExecutionError(TransactionExecutionErrorData),
1910 StorageProofNotSupported,
1912 ClassAlreadyDeclared,
1914 InvalidTransactionNonce,
1916 InsufficientResourcesForValidate,
1918 InsufficientAccountBalance,
1921 ValidationFailure(String),
1923 CompilationFailed(String),
1925 ContractClassSizeIsTooLarge,
1927 NonAccount,
1929 DuplicateTx,
1931 CompiledClassHashMismatch,
1933 UnsupportedTxVersion,
1935 UnsupportedContractClassVersion,
1937 UnexpectedError(String),
1939 NoTraceAvailable(NoTraceAvailableErrorData),
1941 InvalidSubscriptionId,
1943 TooManyAddressesInFilter,
1945 TooManyBlocksBack,
1947}
1948
1949#[cfg(feature = "std")]
1950impl std::error::Error for StarknetError {}
1951
1952impl core::fmt::Display for StarknetError {
1953 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
1954 match self {
1955 Self::FailedToReceiveTransaction => write!(f, "FailedToReceiveTransaction"),
1956 Self::ContractNotFound => write!(f, "ContractNotFound"),
1957 Self::EntrypointNotFound => write!(f, "EntrypointNotFound"),
1958 Self::BlockNotFound => write!(f, "BlockNotFound"),
1959 Self::InvalidTransactionIndex => write!(f, "InvalidTransactionIndex"),
1960 Self::ClassHashNotFound => write!(f, "ClassHashNotFound"),
1961 Self::TransactionHashNotFound => write!(f, "TransactionHashNotFound"),
1962 Self::PageSizeTooBig => write!(f, "PageSizeTooBig"),
1963 Self::NoBlocks => write!(f, "NoBlocks"),
1964 Self::InvalidContinuationToken => write!(f, "InvalidContinuationToken"),
1965 Self::TooManyKeysInFilter => write!(f, "TooManyKeysInFilter"),
1966 Self::ContractError(e) => write!(f, "ContractError: {e:?}"),
1967 Self::TransactionExecutionError(e) => write!(f, "TransactionExecutionError: {e:?}"),
1968 Self::StorageProofNotSupported => write!(f, "StorageProofNotSupported"),
1969 Self::ClassAlreadyDeclared => write!(f, "ClassAlreadyDeclared"),
1970 Self::InvalidTransactionNonce => write!(f, "InvalidTransactionNonce"),
1971 Self::InsufficientResourcesForValidate => write!(f, "InsufficientResourcesForValidate"),
1972 Self::InsufficientAccountBalance => write!(f, "InsufficientAccountBalance"),
1973 Self::ValidationFailure(e) => write!(f, "ValidationFailure: {e:?}"),
1974 Self::CompilationFailed(e) => write!(f, "CompilationFailed: {e:?}"),
1975 Self::ContractClassSizeIsTooLarge => write!(f, "ContractClassSizeIsTooLarge"),
1976 Self::NonAccount => write!(f, "NonAccount"),
1977 Self::DuplicateTx => write!(f, "DuplicateTx"),
1978 Self::CompiledClassHashMismatch => write!(f, "CompiledClassHashMismatch"),
1979 Self::UnsupportedTxVersion => write!(f, "UnsupportedTxVersion"),
1980 Self::UnsupportedContractClassVersion => write!(f, "UnsupportedContractClassVersion"),
1981 Self::UnexpectedError(e) => write!(f, "UnexpectedError: {e:?}"),
1982 Self::NoTraceAvailable(e) => write!(f, "NoTraceAvailable: {e:?}"),
1983 Self::InvalidSubscriptionId => write!(f, "InvalidSubscriptionId"),
1984 Self::TooManyAddressesInFilter => write!(f, "TooManyAddressesInFilter"),
1985 Self::TooManyBlocksBack => write!(f, "TooManyBlocksBack"),
1986 }
1987 }
1988}
1989
1990impl StarknetError {
1991 pub const fn code(&self) -> u32 {
1992 match self {
1993 Self::FailedToReceiveTransaction => 1,
1994 Self::ContractNotFound => 20,
1995 Self::EntrypointNotFound => 21,
1996 Self::BlockNotFound => 24,
1997 Self::InvalidTransactionIndex => 27,
1998 Self::ClassHashNotFound => 28,
1999 Self::TransactionHashNotFound => 29,
2000 Self::PageSizeTooBig => 31,
2001 Self::NoBlocks => 32,
2002 Self::InvalidContinuationToken => 33,
2003 Self::TooManyKeysInFilter => 34,
2004 Self::ContractError(_) => 40,
2005 Self::TransactionExecutionError(_) => 41,
2006 Self::StorageProofNotSupported => 42,
2007 Self::ClassAlreadyDeclared => 51,
2008 Self::InvalidTransactionNonce => 52,
2009 Self::InsufficientResourcesForValidate => 53,
2010 Self::InsufficientAccountBalance => 54,
2011 Self::ValidationFailure(_) => 55,
2012 Self::CompilationFailed(_) => 56,
2013 Self::ContractClassSizeIsTooLarge => 57,
2014 Self::NonAccount => 58,
2015 Self::DuplicateTx => 59,
2016 Self::CompiledClassHashMismatch => 60,
2017 Self::UnsupportedTxVersion => 61,
2018 Self::UnsupportedContractClassVersion => 62,
2019 Self::UnexpectedError(_) => 63,
2020 Self::NoTraceAvailable(_) => 10,
2021 Self::InvalidSubscriptionId => 66,
2022 Self::TooManyAddressesInFilter => 67,
2023 Self::TooManyBlocksBack => 68,
2024 }
2025 }
2026
2027 pub fn message(&self) -> &'static str {
2028 match self {
2029 Self::FailedToReceiveTransaction => "Failed to write transaction",
2030 Self::ContractNotFound => "Contract not found",
2031 Self::EntrypointNotFound => "Requested entrypoint does not exist in the contract",
2032 Self::BlockNotFound => "Block not found",
2033 Self::InvalidTransactionIndex => "Invalid transaction index in a block",
2034 Self::ClassHashNotFound => "Class hash not found",
2035 Self::TransactionHashNotFound => "Transaction hash not found",
2036 Self::PageSizeTooBig => "Requested page size is too big",
2037 Self::NoBlocks => "There are no blocks",
2038 Self::InvalidContinuationToken => {
2039 "The supplied continuation token is invalid or unknown"
2040 }
2041 Self::TooManyKeysInFilter => "Too many keys provided in a filter",
2042 Self::ContractError(_) => "Contract error",
2043 Self::TransactionExecutionError(_) => "Transaction execution error",
2044 Self::StorageProofNotSupported => {
2045 "the node doesn't support storage proofs for blocks that are too far in the past"
2046 }
2047 Self::ClassAlreadyDeclared => "Class already declared",
2048 Self::InvalidTransactionNonce => "Invalid transaction nonce",
2049 Self::InsufficientResourcesForValidate => {
2050 "The transaction's resources don't cover validation or the minimal transaction fee"
2051 }
2052 Self::InsufficientAccountBalance => {
2053 "Account balance is smaller than the transaction's maximal fee (calculated as the sum of each resource's limit x max price)"
2054 }
2055 Self::ValidationFailure(_) => "Account validation failed",
2056 Self::CompilationFailed(_) => "Compilation failed",
2057 Self::ContractClassSizeIsTooLarge => "Contract class size it too large",
2058 Self::NonAccount => "Sender address in not an account contract",
2059 Self::DuplicateTx => "A transaction with the same hash already exists in the mempool",
2060 Self::CompiledClassHashMismatch => {
2061 "the compiled class hash did not match the one supplied in the transaction"
2062 }
2063 Self::UnsupportedTxVersion => "the transaction version is not supported",
2064 Self::UnsupportedContractClassVersion => "the contract class version is not supported",
2065 Self::UnexpectedError(_) => "An unexpected error occurred",
2066 Self::NoTraceAvailable(_) => "No trace available for transaction",
2067 Self::InvalidSubscriptionId => "Invalid subscription id",
2068 Self::TooManyAddressesInFilter => "Too many addresses in filter sender_address filter",
2069 Self::TooManyBlocksBack => "Cannot go back more than 1024 blocks",
2070 }
2071 }
2072}
2073
2074#[serde_as]
2077#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2078#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
2079pub struct StateDiff {
2080 pub storage_diffs: Vec<ContractStorageDiffItem>,
2082 #[serde_as(as = "Vec<UfeHex>")]
2084 pub deprecated_declared_classes: Vec<Felt>,
2085 pub declared_classes: Vec<DeclaredClassItem>,
2087 pub deployed_contracts: Vec<DeployedContractItem>,
2089 pub replaced_classes: Vec<ReplacedClassItem>,
2091 pub nonces: Vec<NonceUpdate>,
2093}
2094
2095#[serde_as]
2097#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2098#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
2099pub struct StateUpdate {
2100 #[serde_as(as = "UfeHex")]
2102 pub block_hash: Felt,
2103 #[serde_as(as = "UfeHex")]
2105 pub old_root: Felt,
2106 #[serde_as(as = "UfeHex")]
2108 pub new_root: Felt,
2109 pub state_diff: StateDiff,
2111}
2112
2113#[serde_as]
2115#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2116#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
2117pub struct StorageEntry {
2118 #[serde_as(as = "UfeHex")]
2120 pub key: Felt,
2121 #[serde_as(as = "UfeHex")]
2123 pub value: Felt,
2124}
2125
2126#[serde_as]
2127#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2128#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
2129pub struct StorageProof {
2130 #[serde_as(as = "MerkleNodeMap")]
2131 pub classes_proof: IndexMap<Felt, MerkleNode, RandomState>,
2132 pub contracts_proof: ContractsProof,
2133 #[serde_as(as = "Vec<MerkleNodeMap>")]
2134 pub contracts_storage_proofs: Vec<IndexMap<Felt, MerkleNode, RandomState>>,
2135 pub global_roots: GlobalRoots,
2136}
2137
2138#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
2142pub struct SubscriptionId(pub String);
2143
2144#[serde_as]
2148#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2149#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
2150pub struct SyncStatus {
2151 #[serde_as(as = "UfeHex")]
2153 pub starting_block_hash: Felt,
2154 pub starting_block_num: u64,
2156 #[serde_as(as = "UfeHex")]
2158 pub current_block_hash: Felt,
2159 pub current_block_num: u64,
2161 #[serde_as(as = "UfeHex")]
2163 pub highest_block_hash: Felt,
2164 pub highest_block_num: u64,
2166}
2167
2168#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2170#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
2171pub struct TransactionExecutionErrorData {
2172 pub transaction_index: u64,
2174 pub execution_error: ContractExecutionError,
2176}
2177
2178#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
2182pub enum TransactionExecutionStatus {
2183 #[serde(rename = "SUCCEEDED")]
2184 Succeeded,
2185 #[serde(rename = "REVERTED")]
2186 Reverted,
2187}
2188
2189#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
2193pub enum TransactionFinalityStatus {
2194 #[serde(rename = "ACCEPTED_ON_L2")]
2195 AcceptedOnL2,
2196 #[serde(rename = "ACCEPTED_ON_L1")]
2197 AcceptedOnL1,
2198}
2199
2200#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2202pub struct TransactionReceiptWithBlockInfo {
2203 #[serde(flatten)]
2204 pub receipt: TransactionReceipt,
2205 #[serde(flatten)]
2206 pub block: ReceiptBlock,
2207}
2208
2209#[serde_as]
2211#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2212#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
2213pub struct TransactionTraceWithHash {
2214 #[serde_as(as = "UfeHex")]
2215 pub transaction_hash: Felt,
2216 pub trace_root: TransactionTrace,
2217}
2218
2219#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2221#[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
2222pub struct TransactionWithReceipt {
2223 pub transaction: TransactionContent,
2225 pub receipt: TransactionReceipt,
2227}
2228
2229#[derive(Debug, Clone, PartialEq, Eq)]
2231pub struct AddDeclareTransactionRequest {
2232 pub declare_transaction: BroadcastedDeclareTransaction,
2234}
2235
2236#[derive(Debug, Clone, PartialEq, Eq)]
2238pub struct AddDeclareTransactionRequestRef<'a> {
2239 pub declare_transaction: &'a BroadcastedDeclareTransaction,
2240}
2241
2242#[derive(Debug, Clone, PartialEq, Eq)]
2244pub struct AddDeployAccountTransactionRequest {
2245 pub deploy_account_transaction: BroadcastedDeployAccountTransaction,
2247}
2248
2249#[derive(Debug, Clone, PartialEq, Eq)]
2251pub struct AddDeployAccountTransactionRequestRef<'a> {
2252 pub deploy_account_transaction: &'a BroadcastedDeployAccountTransaction,
2253}
2254
2255#[derive(Debug, Clone, PartialEq, Eq)]
2257pub struct AddInvokeTransactionRequest {
2258 pub invoke_transaction: BroadcastedInvokeTransaction,
2260}
2261
2262#[derive(Debug, Clone, PartialEq, Eq)]
2264pub struct AddInvokeTransactionRequestRef<'a> {
2265 pub invoke_transaction: &'a BroadcastedInvokeTransaction,
2266}
2267
2268#[derive(Debug, Clone, PartialEq, Eq)]
2270pub struct BlockHashAndNumberRequest;
2271
2272#[derive(Debug, Clone, PartialEq, Eq)]
2274pub struct BlockNumberRequest;
2275
2276#[derive(Debug, Clone, PartialEq, Eq)]
2278pub struct CallRequest {
2279 pub request: FunctionCall,
2280 pub block_id: BlockId,
2283}
2284
2285#[derive(Debug, Clone, PartialEq, Eq)]
2287pub struct CallRequestRef<'a> {
2288 pub request: &'a FunctionCall,
2289 pub block_id: &'a BlockId,
2290}
2291
2292#[derive(Debug, Clone, PartialEq, Eq)]
2294pub struct ChainIdRequest;
2295
2296#[derive(Debug, Clone, PartialEq, Eq)]
2298pub struct EstimateFeeRequest {
2299 pub request: Vec<BroadcastedTransaction>,
2300 pub simulation_flags: Vec<SimulationFlagForEstimateFee>,
2302 pub block_id: BlockId,
2305}
2306
2307#[derive(Debug, Clone, PartialEq, Eq)]
2309pub struct EstimateFeeRequestRef<'a> {
2310 pub request: &'a [BroadcastedTransaction],
2311 pub simulation_flags: &'a [SimulationFlagForEstimateFee],
2312 pub block_id: &'a BlockId,
2313}
2314
2315#[derive(Debug, Clone, PartialEq, Eq)]
2317pub struct EstimateMessageFeeRequest {
2318 pub message: MsgFromL1,
2320 pub block_id: BlockId,
2323}
2324
2325#[derive(Debug, Clone, PartialEq, Eq)]
2327pub struct EstimateMessageFeeRequestRef<'a> {
2328 pub message: &'a MsgFromL1,
2329 pub block_id: &'a BlockId,
2330}
2331
2332#[derive(Debug, Clone, PartialEq, Eq)]
2334pub struct GetBlockTransactionCountRequest {
2335 pub block_id: BlockId,
2337}
2338
2339#[derive(Debug, Clone, PartialEq, Eq)]
2341pub struct GetBlockTransactionCountRequestRef<'a> {
2342 pub block_id: &'a BlockId,
2343}
2344
2345#[derive(Debug, Clone, PartialEq, Eq)]
2347pub struct GetBlockWithReceiptsRequest {
2348 pub block_id: BlockId,
2350}
2351
2352#[derive(Debug, Clone, PartialEq, Eq)]
2354pub struct GetBlockWithReceiptsRequestRef<'a> {
2355 pub block_id: &'a BlockId,
2356}
2357
2358#[derive(Debug, Clone, PartialEq, Eq)]
2360pub struct GetBlockWithTxHashesRequest {
2361 pub block_id: BlockId,
2363}
2364
2365#[derive(Debug, Clone, PartialEq, Eq)]
2367pub struct GetBlockWithTxHashesRequestRef<'a> {
2368 pub block_id: &'a BlockId,
2369}
2370
2371#[derive(Debug, Clone, PartialEq, Eq)]
2373pub struct GetBlockWithTxsRequest {
2374 pub block_id: BlockId,
2376}
2377
2378#[derive(Debug, Clone, PartialEq, Eq)]
2380pub struct GetBlockWithTxsRequestRef<'a> {
2381 pub block_id: &'a BlockId,
2382}
2383
2384#[derive(Debug, Clone, PartialEq, Eq)]
2386pub struct GetClassAtRequest {
2387 pub block_id: BlockId,
2389 pub contract_address: Felt,
2391}
2392
2393#[derive(Debug, Clone, PartialEq, Eq)]
2395pub struct GetClassAtRequestRef<'a> {
2396 pub block_id: &'a BlockId,
2397 pub contract_address: &'a Felt,
2398}
2399
2400#[derive(Debug, Clone, PartialEq, Eq)]
2402pub struct GetClassHashAtRequest {
2403 pub block_id: BlockId,
2405 pub contract_address: Felt,
2407}
2408
2409#[derive(Debug, Clone, PartialEq, Eq)]
2411pub struct GetClassHashAtRequestRef<'a> {
2412 pub block_id: &'a BlockId,
2413 pub contract_address: &'a Felt,
2414}
2415
2416#[derive(Debug, Clone, PartialEq, Eq)]
2418pub struct GetClassRequest {
2419 pub block_id: BlockId,
2421 pub class_hash: Felt,
2423}
2424
2425#[derive(Debug, Clone, PartialEq, Eq)]
2427pub struct GetClassRequestRef<'a> {
2428 pub block_id: &'a BlockId,
2429 pub class_hash: &'a Felt,
2430}
2431
2432#[derive(Debug, Clone, PartialEq, Eq)]
2434pub struct GetEventsRequest {
2435 pub filter: EventFilterWithPage,
2436}
2437
2438#[derive(Debug, Clone, PartialEq, Eq)]
2440pub struct GetEventsRequestRef<'a> {
2441 pub filter: &'a EventFilterWithPage,
2442}
2443
2444#[derive(Debug, Clone, PartialEq, Eq)]
2446pub struct GetMessagesStatusRequest {
2447 pub transaction_hash: Hash256,
2448}
2449
2450#[derive(Debug, Clone, PartialEq, Eq)]
2452pub struct GetMessagesStatusRequestRef<'a> {
2453 pub transaction_hash: &'a Hash256,
2454}
2455
2456#[derive(Debug, Clone, PartialEq, Eq)]
2458pub struct GetNonceRequest {
2459 pub block_id: BlockId,
2461 pub contract_address: Felt,
2463}
2464
2465#[derive(Debug, Clone, PartialEq, Eq)]
2467pub struct GetNonceRequestRef<'a> {
2468 pub block_id: &'a BlockId,
2469 pub contract_address: &'a Felt,
2470}
2471
2472#[derive(Debug, Clone, PartialEq, Eq)]
2474pub struct GetStateUpdateRequest {
2475 pub block_id: BlockId,
2477}
2478
2479#[derive(Debug, Clone, PartialEq, Eq)]
2481pub struct GetStateUpdateRequestRef<'a> {
2482 pub block_id: &'a BlockId,
2483}
2484
2485#[derive(Debug, Clone, PartialEq, Eq)]
2487pub struct GetStorageAtRequest {
2488 pub contract_address: Felt,
2490 pub key: Felt,
2492 pub block_id: BlockId,
2494}
2495
2496#[derive(Debug, Clone, PartialEq, Eq)]
2498pub struct GetStorageAtRequestRef<'a> {
2499 pub contract_address: &'a Felt,
2500 pub key: &'a Felt,
2501 pub block_id: &'a BlockId,
2502}
2503
2504#[derive(Debug, Clone, PartialEq, Eq)]
2506pub struct GetStorageProofRequest {
2507 pub block_id: ConfirmedBlockId,
2509 pub class_hashes: Option<Vec<Felt>>,
2511 pub contract_addresses: Option<Vec<Felt>>,
2513 pub contracts_storage_keys: Option<Vec<ContractStorageKeys>>,
2515}
2516
2517#[derive(Debug, Clone, PartialEq, Eq)]
2519pub struct GetStorageProofRequestRef<'a> {
2520 pub block_id: &'a ConfirmedBlockId,
2521 pub class_hashes: Option<&'a [Felt]>,
2522 pub contract_addresses: Option<&'a [Felt]>,
2523 pub contracts_storage_keys: Option<&'a [ContractStorageKeys]>,
2524}
2525
2526#[derive(Debug, Clone, PartialEq, Eq)]
2528pub struct GetTransactionByBlockIdAndIndexRequest {
2529 pub block_id: BlockId,
2531 pub index: u64,
2532}
2533
2534#[derive(Debug, Clone, PartialEq, Eq)]
2536pub struct GetTransactionByBlockIdAndIndexRequestRef<'a> {
2537 pub block_id: &'a BlockId,
2538 pub index: &'a u64,
2539}
2540
2541#[derive(Debug, Clone, PartialEq, Eq)]
2543pub struct GetTransactionByHashRequest {
2544 pub transaction_hash: Felt,
2545}
2546
2547#[derive(Debug, Clone, PartialEq, Eq)]
2549pub struct GetTransactionByHashRequestRef<'a> {
2550 pub transaction_hash: &'a Felt,
2551}
2552
2553#[derive(Debug, Clone, PartialEq, Eq)]
2555pub struct GetTransactionReceiptRequest {
2556 pub transaction_hash: Felt,
2557}
2558
2559#[derive(Debug, Clone, PartialEq, Eq)]
2561pub struct GetTransactionReceiptRequestRef<'a> {
2562 pub transaction_hash: &'a Felt,
2563}
2564
2565#[derive(Debug, Clone, PartialEq, Eq)]
2567pub struct GetTransactionStatusRequest {
2568 pub transaction_hash: Felt,
2569}
2570
2571#[derive(Debug, Clone, PartialEq, Eq)]
2573pub struct GetTransactionStatusRequestRef<'a> {
2574 pub transaction_hash: &'a Felt,
2575}
2576
2577#[derive(Debug, Clone, PartialEq, Eq)]
2579pub struct SimulateTransactionsRequest {
2580 pub block_id: BlockId,
2583 pub transactions: Vec<BroadcastedTransaction>,
2585 pub simulation_flags: Vec<SimulationFlag>,
2587}
2588
2589#[derive(Debug, Clone, PartialEq, Eq)]
2591pub struct SimulateTransactionsRequestRef<'a> {
2592 pub block_id: &'a BlockId,
2593 pub transactions: &'a [BroadcastedTransaction],
2594 pub simulation_flags: &'a [SimulationFlag],
2595}
2596
2597#[derive(Debug, Clone, PartialEq, Eq)]
2599pub struct SpecVersionRequest;
2600
2601#[derive(Debug, Clone, PartialEq, Eq)]
2603pub struct SubscribeEventsRequest {
2604 pub from_address: Option<Felt>,
2605 pub keys: Option<Vec<Vec<Felt>>>,
2606 pub block_id: Option<ConfirmedBlockId>,
2607}
2608
2609#[derive(Debug, Clone, PartialEq, Eq)]
2611pub struct SubscribeEventsRequestRef<'a> {
2612 pub from_address: &'a Option<Felt>,
2613 pub keys: Option<&'a [Vec<Felt>]>,
2614 pub block_id: &'a Option<ConfirmedBlockId>,
2615}
2616
2617#[derive(Debug, Clone, PartialEq, Eq)]
2619pub struct SubscribeNewHeadsRequest {
2620 pub block_id: Option<ConfirmedBlockId>,
2621}
2622
2623#[derive(Debug, Clone, PartialEq, Eq)]
2625pub struct SubscribeNewHeadsRequestRef<'a> {
2626 pub block_id: &'a Option<ConfirmedBlockId>,
2627}
2628
2629#[derive(Debug, Clone, PartialEq, Eq)]
2631pub struct SubscribePendingTransactionsRequest {
2632 pub transaction_details: Option<bool>,
2633 pub sender_address: Option<Vec<Felt>>,
2634}
2635
2636#[derive(Debug, Clone, PartialEq, Eq)]
2638pub struct SubscribePendingTransactionsRequestRef<'a> {
2639 pub transaction_details: &'a Option<bool>,
2640 pub sender_address: Option<&'a [Felt]>,
2641}
2642
2643#[derive(Debug, Clone, PartialEq, Eq)]
2645pub struct SubscribeTransactionStatusRequest {
2646 pub transaction_hash: Felt,
2647}
2648
2649#[derive(Debug, Clone, PartialEq, Eq)]
2651pub struct SubscribeTransactionStatusRequestRef<'a> {
2652 pub transaction_hash: &'a Felt,
2653}
2654
2655#[derive(Debug, Clone, PartialEq, Eq)]
2657pub struct SubscriptionEventsRequest {
2658 pub subscription_id: SubscriptionId,
2659 pub result: EmittedEvent,
2660}
2661
2662#[derive(Debug, Clone, PartialEq, Eq)]
2664pub struct SubscriptionEventsRequestRef<'a> {
2665 pub subscription_id: &'a SubscriptionId,
2666 pub result: &'a EmittedEvent,
2667}
2668
2669#[derive(Debug, Clone, PartialEq, Eq)]
2671pub struct SubscriptionNewHeadsRequest {
2672 pub subscription_id: SubscriptionId,
2673 pub result: BlockHeader,
2674}
2675
2676#[derive(Debug, Clone, PartialEq, Eq)]
2678pub struct SubscriptionNewHeadsRequestRef<'a> {
2679 pub subscription_id: &'a SubscriptionId,
2680 pub result: &'a BlockHeader,
2681}
2682
2683#[derive(Debug, Clone, PartialEq, Eq)]
2685pub struct SubscriptionPendingTransactionsRequest {
2686 pub subscription_id: SubscriptionId,
2687 pub result: TransactionOrHash,
2689}
2690
2691#[derive(Debug, Clone, PartialEq, Eq)]
2693pub struct SubscriptionPendingTransactionsRequestRef<'a> {
2694 pub subscription_id: &'a SubscriptionId,
2695 pub result: &'a TransactionOrHash,
2696}
2697
2698#[derive(Debug, Clone, PartialEq, Eq)]
2700pub struct SubscriptionReorgRequest {
2701 pub subscription_id: SubscriptionId,
2702 pub result: ReorgData,
2703}
2704
2705#[derive(Debug, Clone, PartialEq, Eq)]
2707pub struct SubscriptionReorgRequestRef<'a> {
2708 pub subscription_id: &'a SubscriptionId,
2709 pub result: &'a ReorgData,
2710}
2711
2712#[derive(Debug, Clone, PartialEq, Eq)]
2714pub struct SubscriptionTransactionStatusRequest {
2715 pub subscription_id: SubscriptionId,
2716 pub result: NewTransactionStatus,
2717}
2718
2719#[derive(Debug, Clone, PartialEq, Eq)]
2721pub struct SubscriptionTransactionStatusRequestRef<'a> {
2722 pub subscription_id: &'a SubscriptionId,
2723 pub result: &'a NewTransactionStatus,
2724}
2725
2726#[derive(Debug, Clone, PartialEq, Eq)]
2728pub struct SyncingRequest;
2729
2730#[derive(Debug, Clone, PartialEq, Eq)]
2732pub struct TraceBlockTransactionsRequest {
2733 pub block_id: BlockId,
2735}
2736
2737#[derive(Debug, Clone, PartialEq, Eq)]
2739pub struct TraceBlockTransactionsRequestRef<'a> {
2740 pub block_id: &'a BlockId,
2741}
2742
2743#[derive(Debug, Clone, PartialEq, Eq)]
2745pub struct TraceTransactionRequest {
2746 pub transaction_hash: Felt,
2747}
2748
2749#[derive(Debug, Clone, PartialEq, Eq)]
2751pub struct TraceTransactionRequestRef<'a> {
2752 pub transaction_hash: &'a Felt,
2753}
2754
2755#[derive(Debug, Clone, PartialEq, Eq)]
2757pub struct UnsubscribeRequest {
2758 pub subscription_id: SubscriptionId,
2759}
2760
2761#[derive(Debug, Clone, PartialEq, Eq)]
2763pub struct UnsubscribeRequestRef<'a> {
2764 pub subscription_id: &'a SubscriptionId,
2765}
2766
2767impl Serialize for BroadcastedDeclareTransactionV3 {
2768 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2769 #[serde_as]
2770 #[derive(Serialize)]
2771 struct Tagged<'a> {
2772 pub r#type: &'a str,
2773 #[serde_as(as = "UfeHex")]
2774 pub sender_address: &'a Felt,
2775 #[serde_as(as = "UfeHex")]
2776 pub compiled_class_hash: &'a Felt,
2777 #[serde_as(as = "UfeHex")]
2778 pub version: &'a Felt,
2779 #[serde_as(as = "[UfeHex]")]
2780 pub signature: &'a [Felt],
2781 #[serde_as(as = "UfeHex")]
2782 pub nonce: &'a Felt,
2783 pub contract_class: &'a FlattenedSierraClass,
2784 pub resource_bounds: &'a ResourceBoundsMapping,
2785 #[serde_as(as = "NumAsHex")]
2786 pub tip: &'a u64,
2787 #[serde_as(as = "[UfeHex]")]
2788 pub paymaster_data: &'a [Felt],
2789 #[serde_as(as = "[UfeHex]")]
2790 pub account_deployment_data: &'a [Felt],
2791 pub nonce_data_availability_mode: &'a DataAvailabilityMode,
2792 pub fee_data_availability_mode: &'a DataAvailabilityMode,
2793 }
2794
2795 let r#type = "DECLARE";
2796
2797 let version = &(if self.is_query {
2798 Felt::THREE + QUERY_VERSION_OFFSET
2799 } else {
2800 Felt::THREE
2801 });
2802
2803 let tagged = Tagged {
2804 r#type,
2805 sender_address: &self.sender_address,
2806 compiled_class_hash: &self.compiled_class_hash,
2807 version,
2808 signature: &self.signature,
2809 nonce: &self.nonce,
2810 contract_class: &self.contract_class,
2811 resource_bounds: &self.resource_bounds,
2812 tip: &self.tip,
2813 paymaster_data: &self.paymaster_data,
2814 account_deployment_data: &self.account_deployment_data,
2815 nonce_data_availability_mode: &self.nonce_data_availability_mode,
2816 fee_data_availability_mode: &self.fee_data_availability_mode,
2817 };
2818
2819 Tagged::serialize(&tagged, serializer)
2820 }
2821}
2822
2823impl<'de> Deserialize<'de> for BroadcastedDeclareTransactionV3 {
2824 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2825 #[serde_as]
2826 #[derive(Deserialize)]
2827 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
2828 struct Tagged {
2829 pub r#type: Option<String>,
2830 #[serde_as(as = "UfeHex")]
2831 pub sender_address: Felt,
2832 #[serde_as(as = "UfeHex")]
2833 pub compiled_class_hash: Felt,
2834 #[serde_as(as = "UfeHex")]
2835 pub version: Felt,
2836 #[serde_as(as = "Vec<UfeHex>")]
2837 pub signature: Vec<Felt>,
2838 #[serde_as(as = "UfeHex")]
2839 pub nonce: Felt,
2840 pub contract_class: FlattenedSierraClass,
2841 pub resource_bounds: ResourceBoundsMapping,
2842 #[serde_as(as = "NumAsHex")]
2843 pub tip: u64,
2844 #[serde_as(as = "Vec<UfeHex>")]
2845 pub paymaster_data: Vec<Felt>,
2846 #[serde_as(as = "Vec<UfeHex>")]
2847 pub account_deployment_data: Vec<Felt>,
2848 pub nonce_data_availability_mode: DataAvailabilityMode,
2849 pub fee_data_availability_mode: DataAvailabilityMode,
2850 }
2851
2852 let tagged = Tagged::deserialize(deserializer)?;
2853
2854 if let Some(tag_field) = &tagged.r#type {
2855 if tag_field != "DECLARE" {
2856 return Err(serde::de::Error::custom("invalid `type` value"));
2857 }
2858 }
2859
2860 let is_query = if tagged.version == Felt::THREE {
2861 false
2862 } else if tagged.version == Felt::THREE + QUERY_VERSION_OFFSET {
2863 true
2864 } else {
2865 return Err(serde::de::Error::custom("invalid `version` value"));
2866 };
2867
2868 Ok(Self {
2869 sender_address: tagged.sender_address,
2870 compiled_class_hash: tagged.compiled_class_hash,
2871 signature: tagged.signature,
2872 nonce: tagged.nonce,
2873 contract_class: OwnedPtr::new(tagged.contract_class),
2874 resource_bounds: tagged.resource_bounds,
2875 tip: tagged.tip,
2876 paymaster_data: tagged.paymaster_data,
2877 account_deployment_data: tagged.account_deployment_data,
2878 nonce_data_availability_mode: tagged.nonce_data_availability_mode,
2879 fee_data_availability_mode: tagged.fee_data_availability_mode,
2880 is_query,
2881 })
2882 }
2883}
2884
2885impl Serialize for BroadcastedDeployAccountTransactionV3 {
2886 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2887 #[serde_as]
2888 #[derive(Serialize)]
2889 struct Tagged<'a> {
2890 pub r#type: &'a str,
2891 #[serde_as(as = "UfeHex")]
2892 pub version: &'a Felt,
2893 #[serde_as(as = "[UfeHex]")]
2894 pub signature: &'a [Felt],
2895 #[serde_as(as = "UfeHex")]
2896 pub nonce: &'a Felt,
2897 #[serde_as(as = "UfeHex")]
2898 pub contract_address_salt: &'a Felt,
2899 #[serde_as(as = "[UfeHex]")]
2900 pub constructor_calldata: &'a [Felt],
2901 #[serde_as(as = "UfeHex")]
2902 pub class_hash: &'a Felt,
2903 pub resource_bounds: &'a ResourceBoundsMapping,
2904 #[serde_as(as = "NumAsHex")]
2905 pub tip: &'a u64,
2906 #[serde_as(as = "[UfeHex]")]
2907 pub paymaster_data: &'a [Felt],
2908 pub nonce_data_availability_mode: &'a DataAvailabilityMode,
2909 pub fee_data_availability_mode: &'a DataAvailabilityMode,
2910 }
2911
2912 let r#type = "DEPLOY_ACCOUNT";
2913
2914 let version = &(if self.is_query {
2915 Felt::THREE + QUERY_VERSION_OFFSET
2916 } else {
2917 Felt::THREE
2918 });
2919
2920 let tagged = Tagged {
2921 r#type,
2922 version,
2923 signature: &self.signature,
2924 nonce: &self.nonce,
2925 contract_address_salt: &self.contract_address_salt,
2926 constructor_calldata: &self.constructor_calldata,
2927 class_hash: &self.class_hash,
2928 resource_bounds: &self.resource_bounds,
2929 tip: &self.tip,
2930 paymaster_data: &self.paymaster_data,
2931 nonce_data_availability_mode: &self.nonce_data_availability_mode,
2932 fee_data_availability_mode: &self.fee_data_availability_mode,
2933 };
2934
2935 Tagged::serialize(&tagged, serializer)
2936 }
2937}
2938
2939impl<'de> Deserialize<'de> for BroadcastedDeployAccountTransactionV3 {
2940 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2941 #[serde_as]
2942 #[derive(Deserialize)]
2943 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
2944 struct Tagged {
2945 pub r#type: Option<String>,
2946 #[serde_as(as = "UfeHex")]
2947 pub version: Felt,
2948 #[serde_as(as = "Vec<UfeHex>")]
2949 pub signature: Vec<Felt>,
2950 #[serde_as(as = "UfeHex")]
2951 pub nonce: Felt,
2952 #[serde_as(as = "UfeHex")]
2953 pub contract_address_salt: Felt,
2954 #[serde_as(as = "Vec<UfeHex>")]
2955 pub constructor_calldata: Vec<Felt>,
2956 #[serde_as(as = "UfeHex")]
2957 pub class_hash: Felt,
2958 pub resource_bounds: ResourceBoundsMapping,
2959 #[serde_as(as = "NumAsHex")]
2960 pub tip: u64,
2961 #[serde_as(as = "Vec<UfeHex>")]
2962 pub paymaster_data: Vec<Felt>,
2963 pub nonce_data_availability_mode: DataAvailabilityMode,
2964 pub fee_data_availability_mode: DataAvailabilityMode,
2965 }
2966
2967 let tagged = Tagged::deserialize(deserializer)?;
2968
2969 if let Some(tag_field) = &tagged.r#type {
2970 if tag_field != "DEPLOY_ACCOUNT" {
2971 return Err(serde::de::Error::custom("invalid `type` value"));
2972 }
2973 }
2974
2975 let is_query = if tagged.version == Felt::THREE {
2976 false
2977 } else if tagged.version == Felt::THREE + QUERY_VERSION_OFFSET {
2978 true
2979 } else {
2980 return Err(serde::de::Error::custom("invalid `version` value"));
2981 };
2982
2983 Ok(Self {
2984 signature: tagged.signature,
2985 nonce: tagged.nonce,
2986 contract_address_salt: tagged.contract_address_salt,
2987 constructor_calldata: tagged.constructor_calldata,
2988 class_hash: tagged.class_hash,
2989 resource_bounds: tagged.resource_bounds,
2990 tip: tagged.tip,
2991 paymaster_data: tagged.paymaster_data,
2992 nonce_data_availability_mode: tagged.nonce_data_availability_mode,
2993 fee_data_availability_mode: tagged.fee_data_availability_mode,
2994 is_query,
2995 })
2996 }
2997}
2998
2999impl Serialize for BroadcastedInvokeTransactionV3 {
3000 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3001 #[serde_as]
3002 #[derive(Serialize)]
3003 struct Tagged<'a> {
3004 pub r#type: &'a str,
3005 #[serde_as(as = "UfeHex")]
3006 pub sender_address: &'a Felt,
3007 #[serde_as(as = "[UfeHex]")]
3008 pub calldata: &'a [Felt],
3009 #[serde_as(as = "UfeHex")]
3010 pub version: &'a Felt,
3011 #[serde_as(as = "[UfeHex]")]
3012 pub signature: &'a [Felt],
3013 #[serde_as(as = "UfeHex")]
3014 pub nonce: &'a Felt,
3015 pub resource_bounds: &'a ResourceBoundsMapping,
3016 #[serde_as(as = "NumAsHex")]
3017 pub tip: &'a u64,
3018 #[serde_as(as = "[UfeHex]")]
3019 pub paymaster_data: &'a [Felt],
3020 #[serde_as(as = "[UfeHex]")]
3021 pub account_deployment_data: &'a [Felt],
3022 pub nonce_data_availability_mode: &'a DataAvailabilityMode,
3023 pub fee_data_availability_mode: &'a DataAvailabilityMode,
3024 }
3025
3026 let r#type = "INVOKE";
3027
3028 let version = &(if self.is_query {
3029 Felt::THREE + QUERY_VERSION_OFFSET
3030 } else {
3031 Felt::THREE
3032 });
3033
3034 let tagged = Tagged {
3035 r#type,
3036 sender_address: &self.sender_address,
3037 calldata: &self.calldata,
3038 version,
3039 signature: &self.signature,
3040 nonce: &self.nonce,
3041 resource_bounds: &self.resource_bounds,
3042 tip: &self.tip,
3043 paymaster_data: &self.paymaster_data,
3044 account_deployment_data: &self.account_deployment_data,
3045 nonce_data_availability_mode: &self.nonce_data_availability_mode,
3046 fee_data_availability_mode: &self.fee_data_availability_mode,
3047 };
3048
3049 Tagged::serialize(&tagged, serializer)
3050 }
3051}
3052
3053impl<'de> Deserialize<'de> for BroadcastedInvokeTransactionV3 {
3054 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3055 #[serde_as]
3056 #[derive(Deserialize)]
3057 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
3058 struct Tagged {
3059 pub r#type: Option<String>,
3060 #[serde_as(as = "UfeHex")]
3061 pub sender_address: Felt,
3062 #[serde_as(as = "Vec<UfeHex>")]
3063 pub calldata: Vec<Felt>,
3064 #[serde_as(as = "UfeHex")]
3065 pub version: Felt,
3066 #[serde_as(as = "Vec<UfeHex>")]
3067 pub signature: Vec<Felt>,
3068 #[serde_as(as = "UfeHex")]
3069 pub nonce: Felt,
3070 pub resource_bounds: ResourceBoundsMapping,
3071 #[serde_as(as = "NumAsHex")]
3072 pub tip: u64,
3073 #[serde_as(as = "Vec<UfeHex>")]
3074 pub paymaster_data: Vec<Felt>,
3075 #[serde_as(as = "Vec<UfeHex>")]
3076 pub account_deployment_data: Vec<Felt>,
3077 pub nonce_data_availability_mode: DataAvailabilityMode,
3078 pub fee_data_availability_mode: DataAvailabilityMode,
3079 }
3080
3081 let tagged = Tagged::deserialize(deserializer)?;
3082
3083 if let Some(tag_field) = &tagged.r#type {
3084 if tag_field != "INVOKE" {
3085 return Err(serde::de::Error::custom("invalid `type` value"));
3086 }
3087 }
3088
3089 let is_query = if tagged.version == Felt::THREE {
3090 false
3091 } else if tagged.version == Felt::THREE + QUERY_VERSION_OFFSET {
3092 true
3093 } else {
3094 return Err(serde::de::Error::custom("invalid `version` value"));
3095 };
3096
3097 Ok(Self {
3098 sender_address: tagged.sender_address,
3099 calldata: tagged.calldata,
3100 signature: tagged.signature,
3101 nonce: tagged.nonce,
3102 resource_bounds: tagged.resource_bounds,
3103 tip: tagged.tip,
3104 paymaster_data: tagged.paymaster_data,
3105 account_deployment_data: tagged.account_deployment_data,
3106 nonce_data_availability_mode: tagged.nonce_data_availability_mode,
3107 fee_data_availability_mode: tagged.fee_data_availability_mode,
3108 is_query,
3109 })
3110 }
3111}
3112
3113impl Serialize for DeclareTransactionReceipt {
3114 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3115 #[serde_as]
3116 #[derive(Serialize)]
3117 struct Tagged<'a> {
3118 pub r#type: &'a str,
3119 #[serde_as(as = "UfeHex")]
3120 pub transaction_hash: &'a Felt,
3121 pub actual_fee: &'a FeePayment,
3122 pub finality_status: &'a TransactionFinalityStatus,
3123 pub messages_sent: &'a [MsgToL1],
3124 pub events: &'a [Event],
3125 pub execution_resources: &'a ExecutionResources,
3126 #[serde(flatten)]
3127 pub execution_result: &'a ExecutionResult,
3128 }
3129
3130 let r#type = "DECLARE";
3131
3132 let tagged = Tagged {
3133 r#type,
3134 transaction_hash: &self.transaction_hash,
3135 actual_fee: &self.actual_fee,
3136 finality_status: &self.finality_status,
3137 messages_sent: &self.messages_sent,
3138 events: &self.events,
3139 execution_resources: &self.execution_resources,
3140 execution_result: &self.execution_result,
3141 };
3142
3143 Tagged::serialize(&tagged, serializer)
3144 }
3145}
3146
3147impl<'de> Deserialize<'de> for DeclareTransactionReceipt {
3148 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3149 #[serde_as]
3150 #[derive(Deserialize)]
3151 struct Tagged {
3152 pub r#type: Option<String>,
3153 #[serde_as(as = "UfeHex")]
3154 pub transaction_hash: Felt,
3155 pub actual_fee: FeePayment,
3156 pub finality_status: TransactionFinalityStatus,
3157 pub messages_sent: Vec<MsgToL1>,
3158 pub events: Vec<Event>,
3159 pub execution_resources: ExecutionResources,
3160 #[serde(flatten)]
3161 pub execution_result: ExecutionResult,
3162 }
3163
3164 let tagged = Tagged::deserialize(deserializer)?;
3165
3166 if let Some(tag_field) = &tagged.r#type {
3167 if tag_field != "DECLARE" {
3168 return Err(serde::de::Error::custom("invalid `type` value"));
3169 }
3170 }
3171
3172 Ok(Self {
3173 transaction_hash: tagged.transaction_hash,
3174 actual_fee: tagged.actual_fee,
3175 finality_status: tagged.finality_status,
3176 messages_sent: tagged.messages_sent,
3177 events: tagged.events,
3178 execution_resources: tagged.execution_resources,
3179 execution_result: tagged.execution_result,
3180 })
3181 }
3182}
3183
3184impl Serialize for DeclareTransactionTrace {
3185 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3186 #[derive(Serialize)]
3187 struct Tagged<'a> {
3188 #[serde(skip_serializing_if = "Option::is_none")]
3189 pub validate_invocation: &'a Option<FunctionInvocation>,
3190 #[serde(skip_serializing_if = "Option::is_none")]
3191 pub fee_transfer_invocation: &'a Option<FunctionInvocation>,
3192 #[serde(skip_serializing_if = "Option::is_none")]
3193 pub state_diff: &'a Option<StateDiff>,
3194 pub execution_resources: &'a ExecutionResources,
3195 pub r#type: &'a str,
3196 }
3197
3198 let r#type = "DECLARE";
3199
3200 let tagged = Tagged {
3201 validate_invocation: &self.validate_invocation,
3202 fee_transfer_invocation: &self.fee_transfer_invocation,
3203 state_diff: &self.state_diff,
3204 execution_resources: &self.execution_resources,
3205 r#type,
3206 };
3207
3208 Tagged::serialize(&tagged, serializer)
3209 }
3210}
3211
3212impl<'de> Deserialize<'de> for DeclareTransactionTrace {
3213 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3214 #[derive(Deserialize)]
3215 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
3216 struct Tagged {
3217 #[serde(skip_serializing_if = "Option::is_none")]
3218 pub validate_invocation: Option<FunctionInvocation>,
3219 #[serde(skip_serializing_if = "Option::is_none")]
3220 pub fee_transfer_invocation: Option<FunctionInvocation>,
3221 #[serde(skip_serializing_if = "Option::is_none")]
3222 pub state_diff: Option<StateDiff>,
3223 pub execution_resources: ExecutionResources,
3224 pub r#type: Option<String>,
3225 }
3226
3227 let tagged = Tagged::deserialize(deserializer)?;
3228
3229 if let Some(tag_field) = &tagged.r#type {
3230 if tag_field != "DECLARE" {
3231 return Err(serde::de::Error::custom("invalid `type` value"));
3232 }
3233 }
3234
3235 Ok(Self {
3236 validate_invocation: tagged.validate_invocation,
3237 fee_transfer_invocation: tagged.fee_transfer_invocation,
3238 state_diff: tagged.state_diff,
3239 execution_resources: tagged.execution_resources,
3240 })
3241 }
3242}
3243
3244impl Serialize for DeclareTransactionV0 {
3245 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3246 #[serde_as]
3247 #[derive(Serialize)]
3248 struct Tagged<'a> {
3249 #[serde_as(as = "UfeHex")]
3250 pub transaction_hash: &'a Felt,
3251 pub r#type: &'a str,
3252 #[serde_as(as = "UfeHex")]
3253 pub sender_address: &'a Felt,
3254 #[serde_as(as = "UfeHex")]
3255 pub max_fee: &'a Felt,
3256 #[serde_as(as = "NumAsHex")]
3257 pub version: &'a u64,
3258 #[serde_as(as = "[UfeHex]")]
3259 pub signature: &'a [Felt],
3260 #[serde_as(as = "UfeHex")]
3261 pub class_hash: &'a Felt,
3262 }
3263
3264 let r#type = "DECLARE";
3265
3266 let version = &0;
3267
3268 let tagged = Tagged {
3269 transaction_hash: &self.transaction_hash,
3270 r#type,
3271 sender_address: &self.sender_address,
3272 max_fee: &self.max_fee,
3273 version,
3274 signature: &self.signature,
3275 class_hash: &self.class_hash,
3276 };
3277
3278 Tagged::serialize(&tagged, serializer)
3279 }
3280}
3281
3282impl<'de> Deserialize<'de> for DeclareTransactionV0 {
3283 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3284 #[serde_as]
3285 #[derive(Deserialize)]
3286 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
3287 struct Tagged {
3288 #[serde_as(as = "UfeHex")]
3289 pub transaction_hash: Felt,
3290 pub r#type: Option<String>,
3291 #[serde_as(as = "UfeHex")]
3292 pub sender_address: Felt,
3293 #[serde_as(as = "UfeHex")]
3294 pub max_fee: Felt,
3295 #[serde_as(as = "Option<NumAsHex>")]
3296 pub version: Option<u64>,
3297 #[serde_as(as = "Vec<UfeHex>")]
3298 pub signature: Vec<Felt>,
3299 #[serde_as(as = "UfeHex")]
3300 pub class_hash: Felt,
3301 }
3302
3303 let tagged = Tagged::deserialize(deserializer)?;
3304
3305 if let Some(tag_field) = &tagged.r#type {
3306 if tag_field != "DECLARE" {
3307 return Err(serde::de::Error::custom("invalid `type` value"));
3308 }
3309 }
3310
3311 if let Some(tag_field) = &tagged.version {
3312 if tag_field != &0 {
3313 return Err(serde::de::Error::custom("invalid `version` value"));
3314 }
3315 }
3316
3317 Ok(Self {
3318 transaction_hash: tagged.transaction_hash,
3319 sender_address: tagged.sender_address,
3320 max_fee: tagged.max_fee,
3321 signature: tagged.signature,
3322 class_hash: tagged.class_hash,
3323 })
3324 }
3325}
3326
3327impl Serialize for DeclareTransactionV0Content {
3328 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3329 #[serde_as]
3330 #[derive(Serialize)]
3331 struct Tagged<'a> {
3332 pub r#type: &'a str,
3333 #[serde_as(as = "UfeHex")]
3334 pub sender_address: &'a Felt,
3335 #[serde_as(as = "UfeHex")]
3336 pub max_fee: &'a Felt,
3337 #[serde_as(as = "NumAsHex")]
3338 pub version: &'a u64,
3339 #[serde_as(as = "[UfeHex]")]
3340 pub signature: &'a [Felt],
3341 #[serde_as(as = "UfeHex")]
3342 pub class_hash: &'a Felt,
3343 }
3344
3345 let r#type = "DECLARE";
3346
3347 let version = &0;
3348
3349 let tagged = Tagged {
3350 r#type,
3351 sender_address: &self.sender_address,
3352 max_fee: &self.max_fee,
3353 version,
3354 signature: &self.signature,
3355 class_hash: &self.class_hash,
3356 };
3357
3358 Tagged::serialize(&tagged, serializer)
3359 }
3360}
3361
3362impl<'de> Deserialize<'de> for DeclareTransactionV0Content {
3363 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3364 #[serde_as]
3365 #[derive(Deserialize)]
3366 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
3367 struct Tagged {
3368 pub r#type: Option<String>,
3369 #[serde_as(as = "UfeHex")]
3370 pub sender_address: Felt,
3371 #[serde_as(as = "UfeHex")]
3372 pub max_fee: Felt,
3373 #[serde_as(as = "Option<NumAsHex>")]
3374 pub version: Option<u64>,
3375 #[serde_as(as = "Vec<UfeHex>")]
3376 pub signature: Vec<Felt>,
3377 #[serde_as(as = "UfeHex")]
3378 pub class_hash: Felt,
3379 }
3380
3381 let tagged = Tagged::deserialize(deserializer)?;
3382
3383 if let Some(tag_field) = &tagged.r#type {
3384 if tag_field != "DECLARE" {
3385 return Err(serde::de::Error::custom("invalid `type` value"));
3386 }
3387 }
3388
3389 if let Some(tag_field) = &tagged.version {
3390 if tag_field != &0 {
3391 return Err(serde::de::Error::custom("invalid `version` value"));
3392 }
3393 }
3394
3395 Ok(Self {
3396 sender_address: tagged.sender_address,
3397 max_fee: tagged.max_fee,
3398 signature: tagged.signature,
3399 class_hash: tagged.class_hash,
3400 })
3401 }
3402}
3403
3404impl Serialize for DeclareTransactionV1 {
3405 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3406 #[serde_as]
3407 #[derive(Serialize)]
3408 struct Tagged<'a> {
3409 #[serde_as(as = "UfeHex")]
3410 pub transaction_hash: &'a Felt,
3411 pub r#type: &'a str,
3412 #[serde_as(as = "UfeHex")]
3413 pub sender_address: &'a Felt,
3414 #[serde_as(as = "UfeHex")]
3415 pub max_fee: &'a Felt,
3416 #[serde_as(as = "NumAsHex")]
3417 pub version: &'a u64,
3418 #[serde_as(as = "[UfeHex]")]
3419 pub signature: &'a [Felt],
3420 #[serde_as(as = "UfeHex")]
3421 pub nonce: &'a Felt,
3422 #[serde_as(as = "UfeHex")]
3423 pub class_hash: &'a Felt,
3424 }
3425
3426 let r#type = "DECLARE";
3427
3428 let version = &1;
3429
3430 let tagged = Tagged {
3431 transaction_hash: &self.transaction_hash,
3432 r#type,
3433 sender_address: &self.sender_address,
3434 max_fee: &self.max_fee,
3435 version,
3436 signature: &self.signature,
3437 nonce: &self.nonce,
3438 class_hash: &self.class_hash,
3439 };
3440
3441 Tagged::serialize(&tagged, serializer)
3442 }
3443}
3444
3445impl<'de> Deserialize<'de> for DeclareTransactionV1 {
3446 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3447 #[serde_as]
3448 #[derive(Deserialize)]
3449 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
3450 struct Tagged {
3451 #[serde_as(as = "UfeHex")]
3452 pub transaction_hash: Felt,
3453 pub r#type: Option<String>,
3454 #[serde_as(as = "UfeHex")]
3455 pub sender_address: Felt,
3456 #[serde_as(as = "UfeHex")]
3457 pub max_fee: Felt,
3458 #[serde_as(as = "Option<NumAsHex>")]
3459 pub version: Option<u64>,
3460 #[serde_as(as = "Vec<UfeHex>")]
3461 pub signature: Vec<Felt>,
3462 #[serde_as(as = "UfeHex")]
3463 pub nonce: Felt,
3464 #[serde_as(as = "UfeHex")]
3465 pub class_hash: Felt,
3466 }
3467
3468 let tagged = Tagged::deserialize(deserializer)?;
3469
3470 if let Some(tag_field) = &tagged.r#type {
3471 if tag_field != "DECLARE" {
3472 return Err(serde::de::Error::custom("invalid `type` value"));
3473 }
3474 }
3475
3476 if let Some(tag_field) = &tagged.version {
3477 if tag_field != &1 {
3478 return Err(serde::de::Error::custom("invalid `version` value"));
3479 }
3480 }
3481
3482 Ok(Self {
3483 transaction_hash: tagged.transaction_hash,
3484 sender_address: tagged.sender_address,
3485 max_fee: tagged.max_fee,
3486 signature: tagged.signature,
3487 nonce: tagged.nonce,
3488 class_hash: tagged.class_hash,
3489 })
3490 }
3491}
3492
3493impl Serialize for DeclareTransactionV1Content {
3494 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3495 #[serde_as]
3496 #[derive(Serialize)]
3497 struct Tagged<'a> {
3498 pub r#type: &'a str,
3499 #[serde_as(as = "UfeHex")]
3500 pub sender_address: &'a Felt,
3501 #[serde_as(as = "UfeHex")]
3502 pub max_fee: &'a Felt,
3503 #[serde_as(as = "NumAsHex")]
3504 pub version: &'a u64,
3505 #[serde_as(as = "[UfeHex]")]
3506 pub signature: &'a [Felt],
3507 #[serde_as(as = "UfeHex")]
3508 pub nonce: &'a Felt,
3509 #[serde_as(as = "UfeHex")]
3510 pub class_hash: &'a Felt,
3511 }
3512
3513 let r#type = "DECLARE";
3514
3515 let version = &1;
3516
3517 let tagged = Tagged {
3518 r#type,
3519 sender_address: &self.sender_address,
3520 max_fee: &self.max_fee,
3521 version,
3522 signature: &self.signature,
3523 nonce: &self.nonce,
3524 class_hash: &self.class_hash,
3525 };
3526
3527 Tagged::serialize(&tagged, serializer)
3528 }
3529}
3530
3531impl<'de> Deserialize<'de> for DeclareTransactionV1Content {
3532 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3533 #[serde_as]
3534 #[derive(Deserialize)]
3535 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
3536 struct Tagged {
3537 pub r#type: Option<String>,
3538 #[serde_as(as = "UfeHex")]
3539 pub sender_address: Felt,
3540 #[serde_as(as = "UfeHex")]
3541 pub max_fee: Felt,
3542 #[serde_as(as = "Option<NumAsHex>")]
3543 pub version: Option<u64>,
3544 #[serde_as(as = "Vec<UfeHex>")]
3545 pub signature: Vec<Felt>,
3546 #[serde_as(as = "UfeHex")]
3547 pub nonce: Felt,
3548 #[serde_as(as = "UfeHex")]
3549 pub class_hash: Felt,
3550 }
3551
3552 let tagged = Tagged::deserialize(deserializer)?;
3553
3554 if let Some(tag_field) = &tagged.r#type {
3555 if tag_field != "DECLARE" {
3556 return Err(serde::de::Error::custom("invalid `type` value"));
3557 }
3558 }
3559
3560 if let Some(tag_field) = &tagged.version {
3561 if tag_field != &1 {
3562 return Err(serde::de::Error::custom("invalid `version` value"));
3563 }
3564 }
3565
3566 Ok(Self {
3567 sender_address: tagged.sender_address,
3568 max_fee: tagged.max_fee,
3569 signature: tagged.signature,
3570 nonce: tagged.nonce,
3571 class_hash: tagged.class_hash,
3572 })
3573 }
3574}
3575
3576impl Serialize for DeclareTransactionV2 {
3577 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3578 #[serde_as]
3579 #[derive(Serialize)]
3580 struct Tagged<'a> {
3581 #[serde_as(as = "UfeHex")]
3582 pub transaction_hash: &'a Felt,
3583 pub r#type: &'a str,
3584 #[serde_as(as = "UfeHex")]
3585 pub sender_address: &'a Felt,
3586 #[serde_as(as = "UfeHex")]
3587 pub compiled_class_hash: &'a Felt,
3588 #[serde_as(as = "UfeHex")]
3589 pub max_fee: &'a Felt,
3590 #[serde_as(as = "NumAsHex")]
3591 pub version: &'a u64,
3592 #[serde_as(as = "[UfeHex]")]
3593 pub signature: &'a [Felt],
3594 #[serde_as(as = "UfeHex")]
3595 pub nonce: &'a Felt,
3596 #[serde_as(as = "UfeHex")]
3597 pub class_hash: &'a Felt,
3598 }
3599
3600 let r#type = "DECLARE";
3601
3602 let version = &2;
3603
3604 let tagged = Tagged {
3605 transaction_hash: &self.transaction_hash,
3606 r#type,
3607 sender_address: &self.sender_address,
3608 compiled_class_hash: &self.compiled_class_hash,
3609 max_fee: &self.max_fee,
3610 version,
3611 signature: &self.signature,
3612 nonce: &self.nonce,
3613 class_hash: &self.class_hash,
3614 };
3615
3616 Tagged::serialize(&tagged, serializer)
3617 }
3618}
3619
3620impl<'de> Deserialize<'de> for DeclareTransactionV2 {
3621 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3622 #[serde_as]
3623 #[derive(Deserialize)]
3624 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
3625 struct Tagged {
3626 #[serde_as(as = "UfeHex")]
3627 pub transaction_hash: Felt,
3628 pub r#type: Option<String>,
3629 #[serde_as(as = "UfeHex")]
3630 pub sender_address: Felt,
3631 #[serde_as(as = "UfeHex")]
3632 pub compiled_class_hash: Felt,
3633 #[serde_as(as = "UfeHex")]
3634 pub max_fee: Felt,
3635 #[serde_as(as = "Option<NumAsHex>")]
3636 pub version: Option<u64>,
3637 #[serde_as(as = "Vec<UfeHex>")]
3638 pub signature: Vec<Felt>,
3639 #[serde_as(as = "UfeHex")]
3640 pub nonce: Felt,
3641 #[serde_as(as = "UfeHex")]
3642 pub class_hash: Felt,
3643 }
3644
3645 let tagged = Tagged::deserialize(deserializer)?;
3646
3647 if let Some(tag_field) = &tagged.r#type {
3648 if tag_field != "DECLARE" {
3649 return Err(serde::de::Error::custom("invalid `type` value"));
3650 }
3651 }
3652
3653 if let Some(tag_field) = &tagged.version {
3654 if tag_field != &2 {
3655 return Err(serde::de::Error::custom("invalid `version` value"));
3656 }
3657 }
3658
3659 Ok(Self {
3660 transaction_hash: tagged.transaction_hash,
3661 sender_address: tagged.sender_address,
3662 compiled_class_hash: tagged.compiled_class_hash,
3663 max_fee: tagged.max_fee,
3664 signature: tagged.signature,
3665 nonce: tagged.nonce,
3666 class_hash: tagged.class_hash,
3667 })
3668 }
3669}
3670
3671impl Serialize for DeclareTransactionV2Content {
3672 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3673 #[serde_as]
3674 #[derive(Serialize)]
3675 struct Tagged<'a> {
3676 pub r#type: &'a str,
3677 #[serde_as(as = "UfeHex")]
3678 pub sender_address: &'a Felt,
3679 #[serde_as(as = "UfeHex")]
3680 pub compiled_class_hash: &'a Felt,
3681 #[serde_as(as = "UfeHex")]
3682 pub max_fee: &'a Felt,
3683 #[serde_as(as = "NumAsHex")]
3684 pub version: &'a u64,
3685 #[serde_as(as = "[UfeHex]")]
3686 pub signature: &'a [Felt],
3687 #[serde_as(as = "UfeHex")]
3688 pub nonce: &'a Felt,
3689 #[serde_as(as = "UfeHex")]
3690 pub class_hash: &'a Felt,
3691 }
3692
3693 let r#type = "DECLARE";
3694
3695 let version = &2;
3696
3697 let tagged = Tagged {
3698 r#type,
3699 sender_address: &self.sender_address,
3700 compiled_class_hash: &self.compiled_class_hash,
3701 max_fee: &self.max_fee,
3702 version,
3703 signature: &self.signature,
3704 nonce: &self.nonce,
3705 class_hash: &self.class_hash,
3706 };
3707
3708 Tagged::serialize(&tagged, serializer)
3709 }
3710}
3711
3712impl<'de> Deserialize<'de> for DeclareTransactionV2Content {
3713 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3714 #[serde_as]
3715 #[derive(Deserialize)]
3716 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
3717 struct Tagged {
3718 pub r#type: Option<String>,
3719 #[serde_as(as = "UfeHex")]
3720 pub sender_address: Felt,
3721 #[serde_as(as = "UfeHex")]
3722 pub compiled_class_hash: Felt,
3723 #[serde_as(as = "UfeHex")]
3724 pub max_fee: Felt,
3725 #[serde_as(as = "Option<NumAsHex>")]
3726 pub version: Option<u64>,
3727 #[serde_as(as = "Vec<UfeHex>")]
3728 pub signature: Vec<Felt>,
3729 #[serde_as(as = "UfeHex")]
3730 pub nonce: Felt,
3731 #[serde_as(as = "UfeHex")]
3732 pub class_hash: Felt,
3733 }
3734
3735 let tagged = Tagged::deserialize(deserializer)?;
3736
3737 if let Some(tag_field) = &tagged.r#type {
3738 if tag_field != "DECLARE" {
3739 return Err(serde::de::Error::custom("invalid `type` value"));
3740 }
3741 }
3742
3743 if let Some(tag_field) = &tagged.version {
3744 if tag_field != &2 {
3745 return Err(serde::de::Error::custom("invalid `version` value"));
3746 }
3747 }
3748
3749 Ok(Self {
3750 sender_address: tagged.sender_address,
3751 compiled_class_hash: tagged.compiled_class_hash,
3752 max_fee: tagged.max_fee,
3753 signature: tagged.signature,
3754 nonce: tagged.nonce,
3755 class_hash: tagged.class_hash,
3756 })
3757 }
3758}
3759
3760impl Serialize for DeclareTransactionV3 {
3761 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3762 #[serde_as]
3763 #[derive(Serialize)]
3764 struct Tagged<'a> {
3765 #[serde_as(as = "UfeHex")]
3766 pub transaction_hash: &'a Felt,
3767 pub r#type: &'a str,
3768 #[serde_as(as = "UfeHex")]
3769 pub sender_address: &'a Felt,
3770 #[serde_as(as = "UfeHex")]
3771 pub compiled_class_hash: &'a Felt,
3772 #[serde_as(as = "NumAsHex")]
3773 pub version: &'a u64,
3774 #[serde_as(as = "[UfeHex]")]
3775 pub signature: &'a [Felt],
3776 #[serde_as(as = "UfeHex")]
3777 pub nonce: &'a Felt,
3778 #[serde_as(as = "UfeHex")]
3779 pub class_hash: &'a Felt,
3780 pub resource_bounds: &'a ResourceBoundsMapping,
3781 #[serde_as(as = "NumAsHex")]
3782 pub tip: &'a u64,
3783 #[serde_as(as = "[UfeHex]")]
3784 pub paymaster_data: &'a [Felt],
3785 #[serde_as(as = "[UfeHex]")]
3786 pub account_deployment_data: &'a [Felt],
3787 pub nonce_data_availability_mode: &'a DataAvailabilityMode,
3788 pub fee_data_availability_mode: &'a DataAvailabilityMode,
3789 }
3790
3791 let r#type = "DECLARE";
3792
3793 let version = &3;
3794
3795 let tagged = Tagged {
3796 transaction_hash: &self.transaction_hash,
3797 r#type,
3798 sender_address: &self.sender_address,
3799 compiled_class_hash: &self.compiled_class_hash,
3800 version,
3801 signature: &self.signature,
3802 nonce: &self.nonce,
3803 class_hash: &self.class_hash,
3804 resource_bounds: &self.resource_bounds,
3805 tip: &self.tip,
3806 paymaster_data: &self.paymaster_data,
3807 account_deployment_data: &self.account_deployment_data,
3808 nonce_data_availability_mode: &self.nonce_data_availability_mode,
3809 fee_data_availability_mode: &self.fee_data_availability_mode,
3810 };
3811
3812 Tagged::serialize(&tagged, serializer)
3813 }
3814}
3815
3816impl<'de> Deserialize<'de> for DeclareTransactionV3 {
3817 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3818 #[serde_as]
3819 #[derive(Deserialize)]
3820 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
3821 struct Tagged {
3822 #[serde_as(as = "UfeHex")]
3823 pub transaction_hash: Felt,
3824 pub r#type: Option<String>,
3825 #[serde_as(as = "UfeHex")]
3826 pub sender_address: Felt,
3827 #[serde_as(as = "UfeHex")]
3828 pub compiled_class_hash: Felt,
3829 #[serde_as(as = "Option<NumAsHex>")]
3830 pub version: Option<u64>,
3831 #[serde_as(as = "Vec<UfeHex>")]
3832 pub signature: Vec<Felt>,
3833 #[serde_as(as = "UfeHex")]
3834 pub nonce: Felt,
3835 #[serde_as(as = "UfeHex")]
3836 pub class_hash: Felt,
3837 pub resource_bounds: ResourceBoundsMapping,
3838 #[serde_as(as = "NumAsHex")]
3839 pub tip: u64,
3840 #[serde_as(as = "Vec<UfeHex>")]
3841 pub paymaster_data: Vec<Felt>,
3842 #[serde_as(as = "Vec<UfeHex>")]
3843 pub account_deployment_data: Vec<Felt>,
3844 pub nonce_data_availability_mode: DataAvailabilityMode,
3845 pub fee_data_availability_mode: DataAvailabilityMode,
3846 }
3847
3848 let tagged = Tagged::deserialize(deserializer)?;
3849
3850 if let Some(tag_field) = &tagged.r#type {
3851 if tag_field != "DECLARE" {
3852 return Err(serde::de::Error::custom("invalid `type` value"));
3853 }
3854 }
3855
3856 if let Some(tag_field) = &tagged.version {
3857 if tag_field != &3 {
3858 return Err(serde::de::Error::custom("invalid `version` value"));
3859 }
3860 }
3861
3862 Ok(Self {
3863 transaction_hash: tagged.transaction_hash,
3864 sender_address: tagged.sender_address,
3865 compiled_class_hash: tagged.compiled_class_hash,
3866 signature: tagged.signature,
3867 nonce: tagged.nonce,
3868 class_hash: tagged.class_hash,
3869 resource_bounds: tagged.resource_bounds,
3870 tip: tagged.tip,
3871 paymaster_data: tagged.paymaster_data,
3872 account_deployment_data: tagged.account_deployment_data,
3873 nonce_data_availability_mode: tagged.nonce_data_availability_mode,
3874 fee_data_availability_mode: tagged.fee_data_availability_mode,
3875 })
3876 }
3877}
3878
3879impl Serialize for DeclareTransactionV3Content {
3880 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3881 #[serde_as]
3882 #[derive(Serialize)]
3883 struct Tagged<'a> {
3884 pub r#type: &'a str,
3885 #[serde_as(as = "UfeHex")]
3886 pub sender_address: &'a Felt,
3887 #[serde_as(as = "UfeHex")]
3888 pub compiled_class_hash: &'a Felt,
3889 #[serde_as(as = "NumAsHex")]
3890 pub version: &'a u64,
3891 #[serde_as(as = "[UfeHex]")]
3892 pub signature: &'a [Felt],
3893 #[serde_as(as = "UfeHex")]
3894 pub nonce: &'a Felt,
3895 #[serde_as(as = "UfeHex")]
3896 pub class_hash: &'a Felt,
3897 pub resource_bounds: &'a ResourceBoundsMapping,
3898 #[serde_as(as = "NumAsHex")]
3899 pub tip: &'a u64,
3900 #[serde_as(as = "[UfeHex]")]
3901 pub paymaster_data: &'a [Felt],
3902 #[serde_as(as = "[UfeHex]")]
3903 pub account_deployment_data: &'a [Felt],
3904 pub nonce_data_availability_mode: &'a DataAvailabilityMode,
3905 pub fee_data_availability_mode: &'a DataAvailabilityMode,
3906 }
3907
3908 let r#type = "DECLARE";
3909
3910 let version = &3;
3911
3912 let tagged = Tagged {
3913 r#type,
3914 sender_address: &self.sender_address,
3915 compiled_class_hash: &self.compiled_class_hash,
3916 version,
3917 signature: &self.signature,
3918 nonce: &self.nonce,
3919 class_hash: &self.class_hash,
3920 resource_bounds: &self.resource_bounds,
3921 tip: &self.tip,
3922 paymaster_data: &self.paymaster_data,
3923 account_deployment_data: &self.account_deployment_data,
3924 nonce_data_availability_mode: &self.nonce_data_availability_mode,
3925 fee_data_availability_mode: &self.fee_data_availability_mode,
3926 };
3927
3928 Tagged::serialize(&tagged, serializer)
3929 }
3930}
3931
3932impl<'de> Deserialize<'de> for DeclareTransactionV3Content {
3933 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3934 #[serde_as]
3935 #[derive(Deserialize)]
3936 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
3937 struct Tagged {
3938 pub r#type: Option<String>,
3939 #[serde_as(as = "UfeHex")]
3940 pub sender_address: Felt,
3941 #[serde_as(as = "UfeHex")]
3942 pub compiled_class_hash: Felt,
3943 #[serde_as(as = "Option<NumAsHex>")]
3944 pub version: Option<u64>,
3945 #[serde_as(as = "Vec<UfeHex>")]
3946 pub signature: Vec<Felt>,
3947 #[serde_as(as = "UfeHex")]
3948 pub nonce: Felt,
3949 #[serde_as(as = "UfeHex")]
3950 pub class_hash: Felt,
3951 pub resource_bounds: ResourceBoundsMapping,
3952 #[serde_as(as = "NumAsHex")]
3953 pub tip: u64,
3954 #[serde_as(as = "Vec<UfeHex>")]
3955 pub paymaster_data: Vec<Felt>,
3956 #[serde_as(as = "Vec<UfeHex>")]
3957 pub account_deployment_data: Vec<Felt>,
3958 pub nonce_data_availability_mode: DataAvailabilityMode,
3959 pub fee_data_availability_mode: DataAvailabilityMode,
3960 }
3961
3962 let tagged = Tagged::deserialize(deserializer)?;
3963
3964 if let Some(tag_field) = &tagged.r#type {
3965 if tag_field != "DECLARE" {
3966 return Err(serde::de::Error::custom("invalid `type` value"));
3967 }
3968 }
3969
3970 if let Some(tag_field) = &tagged.version {
3971 if tag_field != &3 {
3972 return Err(serde::de::Error::custom("invalid `version` value"));
3973 }
3974 }
3975
3976 Ok(Self {
3977 sender_address: tagged.sender_address,
3978 compiled_class_hash: tagged.compiled_class_hash,
3979 signature: tagged.signature,
3980 nonce: tagged.nonce,
3981 class_hash: tagged.class_hash,
3982 resource_bounds: tagged.resource_bounds,
3983 tip: tagged.tip,
3984 paymaster_data: tagged.paymaster_data,
3985 account_deployment_data: tagged.account_deployment_data,
3986 nonce_data_availability_mode: tagged.nonce_data_availability_mode,
3987 fee_data_availability_mode: tagged.fee_data_availability_mode,
3988 })
3989 }
3990}
3991
3992impl Serialize for DeployAccountTransactionReceipt {
3993 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3994 #[serde_as]
3995 #[derive(Serialize)]
3996 struct Tagged<'a> {
3997 #[serde_as(as = "UfeHex")]
3998 pub transaction_hash: &'a Felt,
3999 pub actual_fee: &'a FeePayment,
4000 pub finality_status: &'a TransactionFinalityStatus,
4001 pub messages_sent: &'a [MsgToL1],
4002 pub events: &'a [Event],
4003 pub execution_resources: &'a ExecutionResources,
4004 #[serde(flatten)]
4005 pub execution_result: &'a ExecutionResult,
4006 pub r#type: &'a str,
4007 #[serde_as(as = "UfeHex")]
4008 pub contract_address: &'a Felt,
4009 }
4010
4011 let r#type = "DEPLOY_ACCOUNT";
4012
4013 let tagged = Tagged {
4014 transaction_hash: &self.transaction_hash,
4015 actual_fee: &self.actual_fee,
4016 finality_status: &self.finality_status,
4017 messages_sent: &self.messages_sent,
4018 events: &self.events,
4019 execution_resources: &self.execution_resources,
4020 execution_result: &self.execution_result,
4021 r#type,
4022 contract_address: &self.contract_address,
4023 };
4024
4025 Tagged::serialize(&tagged, serializer)
4026 }
4027}
4028
4029impl<'de> Deserialize<'de> for DeployAccountTransactionReceipt {
4030 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4031 #[serde_as]
4032 #[derive(Deserialize)]
4033 struct Tagged {
4034 #[serde_as(as = "UfeHex")]
4035 pub transaction_hash: Felt,
4036 pub actual_fee: FeePayment,
4037 pub finality_status: TransactionFinalityStatus,
4038 pub messages_sent: Vec<MsgToL1>,
4039 pub events: Vec<Event>,
4040 pub execution_resources: ExecutionResources,
4041 #[serde(flatten)]
4042 pub execution_result: ExecutionResult,
4043 pub r#type: Option<String>,
4044 #[serde_as(as = "UfeHex")]
4045 pub contract_address: Felt,
4046 }
4047
4048 let tagged = Tagged::deserialize(deserializer)?;
4049
4050 if let Some(tag_field) = &tagged.r#type {
4051 if tag_field != "DEPLOY_ACCOUNT" {
4052 return Err(serde::de::Error::custom("invalid `type` value"));
4053 }
4054 }
4055
4056 Ok(Self {
4057 transaction_hash: tagged.transaction_hash,
4058 actual_fee: tagged.actual_fee,
4059 finality_status: tagged.finality_status,
4060 messages_sent: tagged.messages_sent,
4061 events: tagged.events,
4062 execution_resources: tagged.execution_resources,
4063 execution_result: tagged.execution_result,
4064 contract_address: tagged.contract_address,
4065 })
4066 }
4067}
4068
4069impl Serialize for DeployAccountTransactionTrace {
4070 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4071 #[derive(Serialize)]
4072 struct Tagged<'a> {
4073 #[serde(skip_serializing_if = "Option::is_none")]
4074 pub validate_invocation: &'a Option<FunctionInvocation>,
4075 pub constructor_invocation: &'a FunctionInvocation,
4076 #[serde(skip_serializing_if = "Option::is_none")]
4077 pub fee_transfer_invocation: &'a Option<FunctionInvocation>,
4078 #[serde(skip_serializing_if = "Option::is_none")]
4079 pub state_diff: &'a Option<StateDiff>,
4080 pub execution_resources: &'a ExecutionResources,
4081 pub r#type: &'a str,
4082 }
4083
4084 let r#type = "DEPLOY_ACCOUNT";
4085
4086 let tagged = Tagged {
4087 validate_invocation: &self.validate_invocation,
4088 constructor_invocation: &self.constructor_invocation,
4089 fee_transfer_invocation: &self.fee_transfer_invocation,
4090 state_diff: &self.state_diff,
4091 execution_resources: &self.execution_resources,
4092 r#type,
4093 };
4094
4095 Tagged::serialize(&tagged, serializer)
4096 }
4097}
4098
4099impl<'de> Deserialize<'de> for DeployAccountTransactionTrace {
4100 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4101 #[derive(Deserialize)]
4102 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
4103 struct Tagged {
4104 #[serde(skip_serializing_if = "Option::is_none")]
4105 pub validate_invocation: Option<FunctionInvocation>,
4106 pub constructor_invocation: FunctionInvocation,
4107 #[serde(skip_serializing_if = "Option::is_none")]
4108 pub fee_transfer_invocation: Option<FunctionInvocation>,
4109 #[serde(skip_serializing_if = "Option::is_none")]
4110 pub state_diff: Option<StateDiff>,
4111 pub execution_resources: ExecutionResources,
4112 pub r#type: Option<String>,
4113 }
4114
4115 let tagged = Tagged::deserialize(deserializer)?;
4116
4117 if let Some(tag_field) = &tagged.r#type {
4118 if tag_field != "DEPLOY_ACCOUNT" {
4119 return Err(serde::de::Error::custom("invalid `type` value"));
4120 }
4121 }
4122
4123 Ok(Self {
4124 validate_invocation: tagged.validate_invocation,
4125 constructor_invocation: tagged.constructor_invocation,
4126 fee_transfer_invocation: tagged.fee_transfer_invocation,
4127 state_diff: tagged.state_diff,
4128 execution_resources: tagged.execution_resources,
4129 })
4130 }
4131}
4132
4133impl Serialize for DeployAccountTransactionV1 {
4134 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4135 #[serde_as]
4136 #[derive(Serialize)]
4137 struct Tagged<'a> {
4138 #[serde_as(as = "UfeHex")]
4139 pub transaction_hash: &'a Felt,
4140 pub r#type: &'a str,
4141 #[serde_as(as = "UfeHex")]
4142 pub max_fee: &'a Felt,
4143 #[serde_as(as = "NumAsHex")]
4144 pub version: &'a u64,
4145 #[serde_as(as = "[UfeHex]")]
4146 pub signature: &'a [Felt],
4147 #[serde_as(as = "UfeHex")]
4148 pub nonce: &'a Felt,
4149 #[serde_as(as = "UfeHex")]
4150 pub contract_address_salt: &'a Felt,
4151 #[serde_as(as = "[UfeHex]")]
4152 pub constructor_calldata: &'a [Felt],
4153 #[serde_as(as = "UfeHex")]
4154 pub class_hash: &'a Felt,
4155 }
4156
4157 let r#type = "DEPLOY_ACCOUNT";
4158
4159 let version = &1;
4160
4161 let tagged = Tagged {
4162 transaction_hash: &self.transaction_hash,
4163 r#type,
4164 max_fee: &self.max_fee,
4165 version,
4166 signature: &self.signature,
4167 nonce: &self.nonce,
4168 contract_address_salt: &self.contract_address_salt,
4169 constructor_calldata: &self.constructor_calldata,
4170 class_hash: &self.class_hash,
4171 };
4172
4173 Tagged::serialize(&tagged, serializer)
4174 }
4175}
4176
4177impl<'de> Deserialize<'de> for DeployAccountTransactionV1 {
4178 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4179 #[serde_as]
4180 #[derive(Deserialize)]
4181 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
4182 struct Tagged {
4183 #[serde_as(as = "UfeHex")]
4184 pub transaction_hash: Felt,
4185 pub r#type: Option<String>,
4186 #[serde_as(as = "UfeHex")]
4187 pub max_fee: Felt,
4188 #[serde_as(as = "Option<NumAsHex>")]
4189 pub version: Option<u64>,
4190 #[serde_as(as = "Vec<UfeHex>")]
4191 pub signature: Vec<Felt>,
4192 #[serde_as(as = "UfeHex")]
4193 pub nonce: Felt,
4194 #[serde_as(as = "UfeHex")]
4195 pub contract_address_salt: Felt,
4196 #[serde_as(as = "Vec<UfeHex>")]
4197 pub constructor_calldata: Vec<Felt>,
4198 #[serde_as(as = "UfeHex")]
4199 pub class_hash: Felt,
4200 }
4201
4202 let tagged = Tagged::deserialize(deserializer)?;
4203
4204 if let Some(tag_field) = &tagged.r#type {
4205 if tag_field != "DEPLOY_ACCOUNT" {
4206 return Err(serde::de::Error::custom("invalid `type` value"));
4207 }
4208 }
4209
4210 if let Some(tag_field) = &tagged.version {
4211 if tag_field != &1 {
4212 return Err(serde::de::Error::custom("invalid `version` value"));
4213 }
4214 }
4215
4216 Ok(Self {
4217 transaction_hash: tagged.transaction_hash,
4218 max_fee: tagged.max_fee,
4219 signature: tagged.signature,
4220 nonce: tagged.nonce,
4221 contract_address_salt: tagged.contract_address_salt,
4222 constructor_calldata: tagged.constructor_calldata,
4223 class_hash: tagged.class_hash,
4224 })
4225 }
4226}
4227
4228impl Serialize for DeployAccountTransactionV1Content {
4229 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4230 #[serde_as]
4231 #[derive(Serialize)]
4232 struct Tagged<'a> {
4233 pub r#type: &'a str,
4234 #[serde_as(as = "UfeHex")]
4235 pub max_fee: &'a Felt,
4236 #[serde_as(as = "NumAsHex")]
4237 pub version: &'a u64,
4238 #[serde_as(as = "[UfeHex]")]
4239 pub signature: &'a [Felt],
4240 #[serde_as(as = "UfeHex")]
4241 pub nonce: &'a Felt,
4242 #[serde_as(as = "UfeHex")]
4243 pub contract_address_salt: &'a Felt,
4244 #[serde_as(as = "[UfeHex]")]
4245 pub constructor_calldata: &'a [Felt],
4246 #[serde_as(as = "UfeHex")]
4247 pub class_hash: &'a Felt,
4248 }
4249
4250 let r#type = "DEPLOY_ACCOUNT";
4251
4252 let version = &1;
4253
4254 let tagged = Tagged {
4255 r#type,
4256 max_fee: &self.max_fee,
4257 version,
4258 signature: &self.signature,
4259 nonce: &self.nonce,
4260 contract_address_salt: &self.contract_address_salt,
4261 constructor_calldata: &self.constructor_calldata,
4262 class_hash: &self.class_hash,
4263 };
4264
4265 Tagged::serialize(&tagged, serializer)
4266 }
4267}
4268
4269impl<'de> Deserialize<'de> for DeployAccountTransactionV1Content {
4270 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4271 #[serde_as]
4272 #[derive(Deserialize)]
4273 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
4274 struct Tagged {
4275 pub r#type: Option<String>,
4276 #[serde_as(as = "UfeHex")]
4277 pub max_fee: Felt,
4278 #[serde_as(as = "Option<NumAsHex>")]
4279 pub version: Option<u64>,
4280 #[serde_as(as = "Vec<UfeHex>")]
4281 pub signature: Vec<Felt>,
4282 #[serde_as(as = "UfeHex")]
4283 pub nonce: Felt,
4284 #[serde_as(as = "UfeHex")]
4285 pub contract_address_salt: Felt,
4286 #[serde_as(as = "Vec<UfeHex>")]
4287 pub constructor_calldata: Vec<Felt>,
4288 #[serde_as(as = "UfeHex")]
4289 pub class_hash: Felt,
4290 }
4291
4292 let tagged = Tagged::deserialize(deserializer)?;
4293
4294 if let Some(tag_field) = &tagged.r#type {
4295 if tag_field != "DEPLOY_ACCOUNT" {
4296 return Err(serde::de::Error::custom("invalid `type` value"));
4297 }
4298 }
4299
4300 if let Some(tag_field) = &tagged.version {
4301 if tag_field != &1 {
4302 return Err(serde::de::Error::custom("invalid `version` value"));
4303 }
4304 }
4305
4306 Ok(Self {
4307 max_fee: tagged.max_fee,
4308 signature: tagged.signature,
4309 nonce: tagged.nonce,
4310 contract_address_salt: tagged.contract_address_salt,
4311 constructor_calldata: tagged.constructor_calldata,
4312 class_hash: tagged.class_hash,
4313 })
4314 }
4315}
4316
4317impl Serialize for DeployAccountTransactionV3 {
4318 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4319 #[serde_as]
4320 #[derive(Serialize)]
4321 struct Tagged<'a> {
4322 #[serde_as(as = "UfeHex")]
4323 pub transaction_hash: &'a Felt,
4324 pub r#type: &'a str,
4325 #[serde_as(as = "NumAsHex")]
4326 pub version: &'a u64,
4327 #[serde_as(as = "[UfeHex]")]
4328 pub signature: &'a [Felt],
4329 #[serde_as(as = "UfeHex")]
4330 pub nonce: &'a Felt,
4331 #[serde_as(as = "UfeHex")]
4332 pub contract_address_salt: &'a Felt,
4333 #[serde_as(as = "[UfeHex]")]
4334 pub constructor_calldata: &'a [Felt],
4335 #[serde_as(as = "UfeHex")]
4336 pub class_hash: &'a Felt,
4337 pub resource_bounds: &'a ResourceBoundsMapping,
4338 #[serde_as(as = "NumAsHex")]
4339 pub tip: &'a u64,
4340 #[serde_as(as = "[UfeHex]")]
4341 pub paymaster_data: &'a [Felt],
4342 pub nonce_data_availability_mode: &'a DataAvailabilityMode,
4343 pub fee_data_availability_mode: &'a DataAvailabilityMode,
4344 }
4345
4346 let r#type = "DEPLOY_ACCOUNT";
4347
4348 let version = &3;
4349
4350 let tagged = Tagged {
4351 transaction_hash: &self.transaction_hash,
4352 r#type,
4353 version,
4354 signature: &self.signature,
4355 nonce: &self.nonce,
4356 contract_address_salt: &self.contract_address_salt,
4357 constructor_calldata: &self.constructor_calldata,
4358 class_hash: &self.class_hash,
4359 resource_bounds: &self.resource_bounds,
4360 tip: &self.tip,
4361 paymaster_data: &self.paymaster_data,
4362 nonce_data_availability_mode: &self.nonce_data_availability_mode,
4363 fee_data_availability_mode: &self.fee_data_availability_mode,
4364 };
4365
4366 Tagged::serialize(&tagged, serializer)
4367 }
4368}
4369
4370impl<'de> Deserialize<'de> for DeployAccountTransactionV3 {
4371 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4372 #[serde_as]
4373 #[derive(Deserialize)]
4374 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
4375 struct Tagged {
4376 #[serde_as(as = "UfeHex")]
4377 pub transaction_hash: Felt,
4378 pub r#type: Option<String>,
4379 #[serde_as(as = "Option<NumAsHex>")]
4380 pub version: Option<u64>,
4381 #[serde_as(as = "Vec<UfeHex>")]
4382 pub signature: Vec<Felt>,
4383 #[serde_as(as = "UfeHex")]
4384 pub nonce: Felt,
4385 #[serde_as(as = "UfeHex")]
4386 pub contract_address_salt: Felt,
4387 #[serde_as(as = "Vec<UfeHex>")]
4388 pub constructor_calldata: Vec<Felt>,
4389 #[serde_as(as = "UfeHex")]
4390 pub class_hash: Felt,
4391 pub resource_bounds: ResourceBoundsMapping,
4392 #[serde_as(as = "NumAsHex")]
4393 pub tip: u64,
4394 #[serde_as(as = "Vec<UfeHex>")]
4395 pub paymaster_data: Vec<Felt>,
4396 pub nonce_data_availability_mode: DataAvailabilityMode,
4397 pub fee_data_availability_mode: DataAvailabilityMode,
4398 }
4399
4400 let tagged = Tagged::deserialize(deserializer)?;
4401
4402 if let Some(tag_field) = &tagged.r#type {
4403 if tag_field != "DEPLOY_ACCOUNT" {
4404 return Err(serde::de::Error::custom("invalid `type` value"));
4405 }
4406 }
4407
4408 if let Some(tag_field) = &tagged.version {
4409 if tag_field != &3 {
4410 return Err(serde::de::Error::custom("invalid `version` value"));
4411 }
4412 }
4413
4414 Ok(Self {
4415 transaction_hash: tagged.transaction_hash,
4416 signature: tagged.signature,
4417 nonce: tagged.nonce,
4418 contract_address_salt: tagged.contract_address_salt,
4419 constructor_calldata: tagged.constructor_calldata,
4420 class_hash: tagged.class_hash,
4421 resource_bounds: tagged.resource_bounds,
4422 tip: tagged.tip,
4423 paymaster_data: tagged.paymaster_data,
4424 nonce_data_availability_mode: tagged.nonce_data_availability_mode,
4425 fee_data_availability_mode: tagged.fee_data_availability_mode,
4426 })
4427 }
4428}
4429
4430impl Serialize for DeployAccountTransactionV3Content {
4431 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4432 #[serde_as]
4433 #[derive(Serialize)]
4434 struct Tagged<'a> {
4435 pub r#type: &'a str,
4436 #[serde_as(as = "NumAsHex")]
4437 pub version: &'a u64,
4438 #[serde_as(as = "[UfeHex]")]
4439 pub signature: &'a [Felt],
4440 #[serde_as(as = "UfeHex")]
4441 pub nonce: &'a Felt,
4442 #[serde_as(as = "UfeHex")]
4443 pub contract_address_salt: &'a Felt,
4444 #[serde_as(as = "[UfeHex]")]
4445 pub constructor_calldata: &'a [Felt],
4446 #[serde_as(as = "UfeHex")]
4447 pub class_hash: &'a Felt,
4448 pub resource_bounds: &'a ResourceBoundsMapping,
4449 #[serde_as(as = "NumAsHex")]
4450 pub tip: &'a u64,
4451 #[serde_as(as = "[UfeHex]")]
4452 pub paymaster_data: &'a [Felt],
4453 pub nonce_data_availability_mode: &'a DataAvailabilityMode,
4454 pub fee_data_availability_mode: &'a DataAvailabilityMode,
4455 }
4456
4457 let r#type = "DEPLOY_ACCOUNT";
4458
4459 let version = &3;
4460
4461 let tagged = Tagged {
4462 r#type,
4463 version,
4464 signature: &self.signature,
4465 nonce: &self.nonce,
4466 contract_address_salt: &self.contract_address_salt,
4467 constructor_calldata: &self.constructor_calldata,
4468 class_hash: &self.class_hash,
4469 resource_bounds: &self.resource_bounds,
4470 tip: &self.tip,
4471 paymaster_data: &self.paymaster_data,
4472 nonce_data_availability_mode: &self.nonce_data_availability_mode,
4473 fee_data_availability_mode: &self.fee_data_availability_mode,
4474 };
4475
4476 Tagged::serialize(&tagged, serializer)
4477 }
4478}
4479
4480impl<'de> Deserialize<'de> for DeployAccountTransactionV3Content {
4481 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4482 #[serde_as]
4483 #[derive(Deserialize)]
4484 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
4485 struct Tagged {
4486 pub r#type: Option<String>,
4487 #[serde_as(as = "Option<NumAsHex>")]
4488 pub version: Option<u64>,
4489 #[serde_as(as = "Vec<UfeHex>")]
4490 pub signature: Vec<Felt>,
4491 #[serde_as(as = "UfeHex")]
4492 pub nonce: Felt,
4493 #[serde_as(as = "UfeHex")]
4494 pub contract_address_salt: Felt,
4495 #[serde_as(as = "Vec<UfeHex>")]
4496 pub constructor_calldata: Vec<Felt>,
4497 #[serde_as(as = "UfeHex")]
4498 pub class_hash: Felt,
4499 pub resource_bounds: ResourceBoundsMapping,
4500 #[serde_as(as = "NumAsHex")]
4501 pub tip: u64,
4502 #[serde_as(as = "Vec<UfeHex>")]
4503 pub paymaster_data: Vec<Felt>,
4504 pub nonce_data_availability_mode: DataAvailabilityMode,
4505 pub fee_data_availability_mode: DataAvailabilityMode,
4506 }
4507
4508 let tagged = Tagged::deserialize(deserializer)?;
4509
4510 if let Some(tag_field) = &tagged.r#type {
4511 if tag_field != "DEPLOY_ACCOUNT" {
4512 return Err(serde::de::Error::custom("invalid `type` value"));
4513 }
4514 }
4515
4516 if let Some(tag_field) = &tagged.version {
4517 if tag_field != &3 {
4518 return Err(serde::de::Error::custom("invalid `version` value"));
4519 }
4520 }
4521
4522 Ok(Self {
4523 signature: tagged.signature,
4524 nonce: tagged.nonce,
4525 contract_address_salt: tagged.contract_address_salt,
4526 constructor_calldata: tagged.constructor_calldata,
4527 class_hash: tagged.class_hash,
4528 resource_bounds: tagged.resource_bounds,
4529 tip: tagged.tip,
4530 paymaster_data: tagged.paymaster_data,
4531 nonce_data_availability_mode: tagged.nonce_data_availability_mode,
4532 fee_data_availability_mode: tagged.fee_data_availability_mode,
4533 })
4534 }
4535}
4536
4537impl Serialize for DeployTransaction {
4538 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4539 #[serde_as]
4540 #[derive(Serialize)]
4541 struct Tagged<'a> {
4542 #[serde_as(as = "UfeHex")]
4543 pub transaction_hash: &'a Felt,
4544 #[serde_as(as = "UfeHex")]
4545 pub version: &'a Felt,
4546 pub r#type: &'a str,
4547 #[serde_as(as = "UfeHex")]
4548 pub contract_address_salt: &'a Felt,
4549 #[serde_as(as = "[UfeHex]")]
4550 pub constructor_calldata: &'a [Felt],
4551 #[serde_as(as = "UfeHex")]
4552 pub class_hash: &'a Felt,
4553 }
4554
4555 let r#type = "DEPLOY";
4556
4557 let tagged = Tagged {
4558 transaction_hash: &self.transaction_hash,
4559 version: &self.version,
4560 r#type,
4561 contract_address_salt: &self.contract_address_salt,
4562 constructor_calldata: &self.constructor_calldata,
4563 class_hash: &self.class_hash,
4564 };
4565
4566 Tagged::serialize(&tagged, serializer)
4567 }
4568}
4569
4570impl<'de> Deserialize<'de> for DeployTransaction {
4571 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4572 #[serde_as]
4573 #[derive(Deserialize)]
4574 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
4575 struct Tagged {
4576 #[serde_as(as = "UfeHex")]
4577 pub transaction_hash: Felt,
4578 #[serde_as(as = "UfeHex")]
4579 pub version: Felt,
4580 pub r#type: Option<String>,
4581 #[serde_as(as = "UfeHex")]
4582 pub contract_address_salt: Felt,
4583 #[serde_as(as = "Vec<UfeHex>")]
4584 pub constructor_calldata: Vec<Felt>,
4585 #[serde_as(as = "UfeHex")]
4586 pub class_hash: Felt,
4587 }
4588
4589 let tagged = Tagged::deserialize(deserializer)?;
4590
4591 if let Some(tag_field) = &tagged.r#type {
4592 if tag_field != "DEPLOY" {
4593 return Err(serde::de::Error::custom("invalid `type` value"));
4594 }
4595 }
4596
4597 Ok(Self {
4598 transaction_hash: tagged.transaction_hash,
4599 version: tagged.version,
4600 contract_address_salt: tagged.contract_address_salt,
4601 constructor_calldata: tagged.constructor_calldata,
4602 class_hash: tagged.class_hash,
4603 })
4604 }
4605}
4606
4607impl Serialize for DeployTransactionContent {
4608 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4609 #[serde_as]
4610 #[derive(Serialize)]
4611 struct Tagged<'a> {
4612 #[serde_as(as = "UfeHex")]
4613 pub version: &'a Felt,
4614 pub r#type: &'a str,
4615 #[serde_as(as = "UfeHex")]
4616 pub contract_address_salt: &'a Felt,
4617 #[serde_as(as = "[UfeHex]")]
4618 pub constructor_calldata: &'a [Felt],
4619 #[serde_as(as = "UfeHex")]
4620 pub class_hash: &'a Felt,
4621 }
4622
4623 let r#type = "DEPLOY";
4624
4625 let tagged = Tagged {
4626 version: &self.version,
4627 r#type,
4628 contract_address_salt: &self.contract_address_salt,
4629 constructor_calldata: &self.constructor_calldata,
4630 class_hash: &self.class_hash,
4631 };
4632
4633 Tagged::serialize(&tagged, serializer)
4634 }
4635}
4636
4637impl<'de> Deserialize<'de> for DeployTransactionContent {
4638 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4639 #[serde_as]
4640 #[derive(Deserialize)]
4641 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
4642 struct Tagged {
4643 #[serde_as(as = "UfeHex")]
4644 pub version: Felt,
4645 pub r#type: Option<String>,
4646 #[serde_as(as = "UfeHex")]
4647 pub contract_address_salt: Felt,
4648 #[serde_as(as = "Vec<UfeHex>")]
4649 pub constructor_calldata: Vec<Felt>,
4650 #[serde_as(as = "UfeHex")]
4651 pub class_hash: Felt,
4652 }
4653
4654 let tagged = Tagged::deserialize(deserializer)?;
4655
4656 if let Some(tag_field) = &tagged.r#type {
4657 if tag_field != "DEPLOY" {
4658 return Err(serde::de::Error::custom("invalid `type` value"));
4659 }
4660 }
4661
4662 Ok(Self {
4663 version: tagged.version,
4664 contract_address_salt: tagged.contract_address_salt,
4665 constructor_calldata: tagged.constructor_calldata,
4666 class_hash: tagged.class_hash,
4667 })
4668 }
4669}
4670
4671impl Serialize for DeployTransactionReceipt {
4672 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4673 #[serde_as]
4674 #[derive(Serialize)]
4675 struct Tagged<'a> {
4676 #[serde_as(as = "UfeHex")]
4677 pub transaction_hash: &'a Felt,
4678 pub actual_fee: &'a FeePayment,
4679 pub finality_status: &'a TransactionFinalityStatus,
4680 pub messages_sent: &'a [MsgToL1],
4681 pub events: &'a [Event],
4682 pub execution_resources: &'a ExecutionResources,
4683 #[serde(flatten)]
4684 pub execution_result: &'a ExecutionResult,
4685 pub r#type: &'a str,
4686 #[serde_as(as = "UfeHex")]
4687 pub contract_address: &'a Felt,
4688 }
4689
4690 let r#type = "DEPLOY";
4691
4692 let tagged = Tagged {
4693 transaction_hash: &self.transaction_hash,
4694 actual_fee: &self.actual_fee,
4695 finality_status: &self.finality_status,
4696 messages_sent: &self.messages_sent,
4697 events: &self.events,
4698 execution_resources: &self.execution_resources,
4699 execution_result: &self.execution_result,
4700 r#type,
4701 contract_address: &self.contract_address,
4702 };
4703
4704 Tagged::serialize(&tagged, serializer)
4705 }
4706}
4707
4708impl<'de> Deserialize<'de> for DeployTransactionReceipt {
4709 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4710 #[serde_as]
4711 #[derive(Deserialize)]
4712 struct Tagged {
4713 #[serde_as(as = "UfeHex")]
4714 pub transaction_hash: Felt,
4715 pub actual_fee: FeePayment,
4716 pub finality_status: TransactionFinalityStatus,
4717 pub messages_sent: Vec<MsgToL1>,
4718 pub events: Vec<Event>,
4719 pub execution_resources: ExecutionResources,
4720 #[serde(flatten)]
4721 pub execution_result: ExecutionResult,
4722 pub r#type: Option<String>,
4723 #[serde_as(as = "UfeHex")]
4724 pub contract_address: Felt,
4725 }
4726
4727 let tagged = Tagged::deserialize(deserializer)?;
4728
4729 if let Some(tag_field) = &tagged.r#type {
4730 if tag_field != "DEPLOY" {
4731 return Err(serde::de::Error::custom("invalid `type` value"));
4732 }
4733 }
4734
4735 Ok(Self {
4736 transaction_hash: tagged.transaction_hash,
4737 actual_fee: tagged.actual_fee,
4738 finality_status: tagged.finality_status,
4739 messages_sent: tagged.messages_sent,
4740 events: tagged.events,
4741 execution_resources: tagged.execution_resources,
4742 execution_result: tagged.execution_result,
4743 contract_address: tagged.contract_address,
4744 })
4745 }
4746}
4747
4748impl Serialize for InvokeTransactionReceipt {
4749 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4750 #[serde_as]
4751 #[derive(Serialize)]
4752 struct Tagged<'a> {
4753 pub r#type: &'a str,
4754 #[serde_as(as = "UfeHex")]
4755 pub transaction_hash: &'a Felt,
4756 pub actual_fee: &'a FeePayment,
4757 pub finality_status: &'a TransactionFinalityStatus,
4758 pub messages_sent: &'a [MsgToL1],
4759 pub events: &'a [Event],
4760 pub execution_resources: &'a ExecutionResources,
4761 #[serde(flatten)]
4762 pub execution_result: &'a ExecutionResult,
4763 }
4764
4765 let r#type = "INVOKE";
4766
4767 let tagged = Tagged {
4768 r#type,
4769 transaction_hash: &self.transaction_hash,
4770 actual_fee: &self.actual_fee,
4771 finality_status: &self.finality_status,
4772 messages_sent: &self.messages_sent,
4773 events: &self.events,
4774 execution_resources: &self.execution_resources,
4775 execution_result: &self.execution_result,
4776 };
4777
4778 Tagged::serialize(&tagged, serializer)
4779 }
4780}
4781
4782impl<'de> Deserialize<'de> for InvokeTransactionReceipt {
4783 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4784 #[serde_as]
4785 #[derive(Deserialize)]
4786 struct Tagged {
4787 pub r#type: Option<String>,
4788 #[serde_as(as = "UfeHex")]
4789 pub transaction_hash: Felt,
4790 pub actual_fee: FeePayment,
4791 pub finality_status: TransactionFinalityStatus,
4792 pub messages_sent: Vec<MsgToL1>,
4793 pub events: Vec<Event>,
4794 pub execution_resources: ExecutionResources,
4795 #[serde(flatten)]
4796 pub execution_result: ExecutionResult,
4797 }
4798
4799 let tagged = Tagged::deserialize(deserializer)?;
4800
4801 if let Some(tag_field) = &tagged.r#type {
4802 if tag_field != "INVOKE" {
4803 return Err(serde::de::Error::custom("invalid `type` value"));
4804 }
4805 }
4806
4807 Ok(Self {
4808 transaction_hash: tagged.transaction_hash,
4809 actual_fee: tagged.actual_fee,
4810 finality_status: tagged.finality_status,
4811 messages_sent: tagged.messages_sent,
4812 events: tagged.events,
4813 execution_resources: tagged.execution_resources,
4814 execution_result: tagged.execution_result,
4815 })
4816 }
4817}
4818
4819impl Serialize for InvokeTransactionTrace {
4820 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4821 #[derive(Serialize)]
4822 struct Tagged<'a> {
4823 #[serde(skip_serializing_if = "Option::is_none")]
4824 pub validate_invocation: &'a Option<FunctionInvocation>,
4825 pub execute_invocation: &'a ExecuteInvocation,
4826 #[serde(skip_serializing_if = "Option::is_none")]
4827 pub fee_transfer_invocation: &'a Option<FunctionInvocation>,
4828 #[serde(skip_serializing_if = "Option::is_none")]
4829 pub state_diff: &'a Option<StateDiff>,
4830 pub execution_resources: &'a ExecutionResources,
4831 pub r#type: &'a str,
4832 }
4833
4834 let r#type = "INVOKE";
4835
4836 let tagged = Tagged {
4837 validate_invocation: &self.validate_invocation,
4838 execute_invocation: &self.execute_invocation,
4839 fee_transfer_invocation: &self.fee_transfer_invocation,
4840 state_diff: &self.state_diff,
4841 execution_resources: &self.execution_resources,
4842 r#type,
4843 };
4844
4845 Tagged::serialize(&tagged, serializer)
4846 }
4847}
4848
4849impl<'de> Deserialize<'de> for InvokeTransactionTrace {
4850 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4851 #[derive(Deserialize)]
4852 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
4853 struct Tagged {
4854 #[serde(skip_serializing_if = "Option::is_none")]
4855 pub validate_invocation: Option<FunctionInvocation>,
4856 pub execute_invocation: ExecuteInvocation,
4857 #[serde(skip_serializing_if = "Option::is_none")]
4858 pub fee_transfer_invocation: Option<FunctionInvocation>,
4859 #[serde(skip_serializing_if = "Option::is_none")]
4860 pub state_diff: Option<StateDiff>,
4861 pub execution_resources: ExecutionResources,
4862 pub r#type: Option<String>,
4863 }
4864
4865 let tagged = Tagged::deserialize(deserializer)?;
4866
4867 if let Some(tag_field) = &tagged.r#type {
4868 if tag_field != "INVOKE" {
4869 return Err(serde::de::Error::custom("invalid `type` value"));
4870 }
4871 }
4872
4873 Ok(Self {
4874 validate_invocation: tagged.validate_invocation,
4875 execute_invocation: tagged.execute_invocation,
4876 fee_transfer_invocation: tagged.fee_transfer_invocation,
4877 state_diff: tagged.state_diff,
4878 execution_resources: tagged.execution_resources,
4879 })
4880 }
4881}
4882
4883impl Serialize for InvokeTransactionV0 {
4884 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4885 #[serde_as]
4886 #[derive(Serialize)]
4887 struct Tagged<'a> {
4888 #[serde_as(as = "UfeHex")]
4889 pub transaction_hash: &'a Felt,
4890 pub r#type: &'a str,
4891 #[serde_as(as = "UfeHex")]
4892 pub max_fee: &'a Felt,
4893 #[serde_as(as = "NumAsHex")]
4894 pub version: &'a u64,
4895 #[serde_as(as = "[UfeHex]")]
4896 pub signature: &'a [Felt],
4897 #[serde_as(as = "UfeHex")]
4898 pub contract_address: &'a Felt,
4899 #[serde_as(as = "UfeHex")]
4900 pub entry_point_selector: &'a Felt,
4901 #[serde_as(as = "[UfeHex]")]
4902 pub calldata: &'a [Felt],
4903 }
4904
4905 let r#type = "INVOKE";
4906
4907 let version = &0;
4908
4909 let tagged = Tagged {
4910 transaction_hash: &self.transaction_hash,
4911 r#type,
4912 max_fee: &self.max_fee,
4913 version,
4914 signature: &self.signature,
4915 contract_address: &self.contract_address,
4916 entry_point_selector: &self.entry_point_selector,
4917 calldata: &self.calldata,
4918 };
4919
4920 Tagged::serialize(&tagged, serializer)
4921 }
4922}
4923
4924impl<'de> Deserialize<'de> for InvokeTransactionV0 {
4925 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4926 #[serde_as]
4927 #[derive(Deserialize)]
4928 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
4929 struct Tagged {
4930 #[serde_as(as = "UfeHex")]
4931 pub transaction_hash: Felt,
4932 pub r#type: Option<String>,
4933 #[serde_as(as = "UfeHex")]
4934 pub max_fee: Felt,
4935 #[serde_as(as = "Option<NumAsHex>")]
4936 pub version: Option<u64>,
4937 #[serde_as(as = "Vec<UfeHex>")]
4938 pub signature: Vec<Felt>,
4939 #[serde_as(as = "UfeHex")]
4940 pub contract_address: Felt,
4941 #[serde_as(as = "UfeHex")]
4942 pub entry_point_selector: Felt,
4943 #[serde_as(as = "Vec<UfeHex>")]
4944 pub calldata: Vec<Felt>,
4945 }
4946
4947 let tagged = Tagged::deserialize(deserializer)?;
4948
4949 if let Some(tag_field) = &tagged.r#type {
4950 if tag_field != "INVOKE" {
4951 return Err(serde::de::Error::custom("invalid `type` value"));
4952 }
4953 }
4954
4955 if let Some(tag_field) = &tagged.version {
4956 if tag_field != &0 {
4957 return Err(serde::de::Error::custom("invalid `version` value"));
4958 }
4959 }
4960
4961 Ok(Self {
4962 transaction_hash: tagged.transaction_hash,
4963 max_fee: tagged.max_fee,
4964 signature: tagged.signature,
4965 contract_address: tagged.contract_address,
4966 entry_point_selector: tagged.entry_point_selector,
4967 calldata: tagged.calldata,
4968 })
4969 }
4970}
4971
4972impl Serialize for InvokeTransactionV0Content {
4973 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4974 #[serde_as]
4975 #[derive(Serialize)]
4976 struct Tagged<'a> {
4977 pub r#type: &'a str,
4978 #[serde_as(as = "UfeHex")]
4979 pub max_fee: &'a Felt,
4980 #[serde_as(as = "NumAsHex")]
4981 pub version: &'a u64,
4982 #[serde_as(as = "[UfeHex]")]
4983 pub signature: &'a [Felt],
4984 #[serde_as(as = "UfeHex")]
4985 pub contract_address: &'a Felt,
4986 #[serde_as(as = "UfeHex")]
4987 pub entry_point_selector: &'a Felt,
4988 #[serde_as(as = "[UfeHex]")]
4989 pub calldata: &'a [Felt],
4990 }
4991
4992 let r#type = "INVOKE";
4993
4994 let version = &0;
4995
4996 let tagged = Tagged {
4997 r#type,
4998 max_fee: &self.max_fee,
4999 version,
5000 signature: &self.signature,
5001 contract_address: &self.contract_address,
5002 entry_point_selector: &self.entry_point_selector,
5003 calldata: &self.calldata,
5004 };
5005
5006 Tagged::serialize(&tagged, serializer)
5007 }
5008}
5009
5010impl<'de> Deserialize<'de> for InvokeTransactionV0Content {
5011 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5012 #[serde_as]
5013 #[derive(Deserialize)]
5014 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
5015 struct Tagged {
5016 pub r#type: Option<String>,
5017 #[serde_as(as = "UfeHex")]
5018 pub max_fee: Felt,
5019 #[serde_as(as = "Option<NumAsHex>")]
5020 pub version: Option<u64>,
5021 #[serde_as(as = "Vec<UfeHex>")]
5022 pub signature: Vec<Felt>,
5023 #[serde_as(as = "UfeHex")]
5024 pub contract_address: Felt,
5025 #[serde_as(as = "UfeHex")]
5026 pub entry_point_selector: Felt,
5027 #[serde_as(as = "Vec<UfeHex>")]
5028 pub calldata: Vec<Felt>,
5029 }
5030
5031 let tagged = Tagged::deserialize(deserializer)?;
5032
5033 if let Some(tag_field) = &tagged.r#type {
5034 if tag_field != "INVOKE" {
5035 return Err(serde::de::Error::custom("invalid `type` value"));
5036 }
5037 }
5038
5039 if let Some(tag_field) = &tagged.version {
5040 if tag_field != &0 {
5041 return Err(serde::de::Error::custom("invalid `version` value"));
5042 }
5043 }
5044
5045 Ok(Self {
5046 max_fee: tagged.max_fee,
5047 signature: tagged.signature,
5048 contract_address: tagged.contract_address,
5049 entry_point_selector: tagged.entry_point_selector,
5050 calldata: tagged.calldata,
5051 })
5052 }
5053}
5054
5055impl Serialize for InvokeTransactionV1 {
5056 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5057 #[serde_as]
5058 #[derive(Serialize)]
5059 struct Tagged<'a> {
5060 #[serde_as(as = "UfeHex")]
5061 pub transaction_hash: &'a Felt,
5062 pub r#type: &'a str,
5063 #[serde_as(as = "UfeHex")]
5064 pub sender_address: &'a Felt,
5065 #[serde_as(as = "[UfeHex]")]
5066 pub calldata: &'a [Felt],
5067 #[serde_as(as = "UfeHex")]
5068 pub max_fee: &'a Felt,
5069 #[serde_as(as = "NumAsHex")]
5070 pub version: &'a u64,
5071 #[serde_as(as = "[UfeHex]")]
5072 pub signature: &'a [Felt],
5073 #[serde_as(as = "UfeHex")]
5074 pub nonce: &'a Felt,
5075 }
5076
5077 let r#type = "INVOKE";
5078
5079 let version = &1;
5080
5081 let tagged = Tagged {
5082 transaction_hash: &self.transaction_hash,
5083 r#type,
5084 sender_address: &self.sender_address,
5085 calldata: &self.calldata,
5086 max_fee: &self.max_fee,
5087 version,
5088 signature: &self.signature,
5089 nonce: &self.nonce,
5090 };
5091
5092 Tagged::serialize(&tagged, serializer)
5093 }
5094}
5095
5096impl<'de> Deserialize<'de> for InvokeTransactionV1 {
5097 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5098 #[serde_as]
5099 #[derive(Deserialize)]
5100 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
5101 struct Tagged {
5102 #[serde_as(as = "UfeHex")]
5103 pub transaction_hash: Felt,
5104 pub r#type: Option<String>,
5105 #[serde_as(as = "UfeHex")]
5106 pub sender_address: Felt,
5107 #[serde_as(as = "Vec<UfeHex>")]
5108 pub calldata: Vec<Felt>,
5109 #[serde_as(as = "UfeHex")]
5110 pub max_fee: Felt,
5111 #[serde_as(as = "Option<NumAsHex>")]
5112 pub version: Option<u64>,
5113 #[serde_as(as = "Vec<UfeHex>")]
5114 pub signature: Vec<Felt>,
5115 #[serde_as(as = "UfeHex")]
5116 pub nonce: Felt,
5117 }
5118
5119 let tagged = Tagged::deserialize(deserializer)?;
5120
5121 if let Some(tag_field) = &tagged.r#type {
5122 if tag_field != "INVOKE" {
5123 return Err(serde::de::Error::custom("invalid `type` value"));
5124 }
5125 }
5126
5127 if let Some(tag_field) = &tagged.version {
5128 if tag_field != &1 {
5129 return Err(serde::de::Error::custom("invalid `version` value"));
5130 }
5131 }
5132
5133 Ok(Self {
5134 transaction_hash: tagged.transaction_hash,
5135 sender_address: tagged.sender_address,
5136 calldata: tagged.calldata,
5137 max_fee: tagged.max_fee,
5138 signature: tagged.signature,
5139 nonce: tagged.nonce,
5140 })
5141 }
5142}
5143
5144impl Serialize for InvokeTransactionV1Content {
5145 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5146 #[serde_as]
5147 #[derive(Serialize)]
5148 struct Tagged<'a> {
5149 pub r#type: &'a str,
5150 #[serde_as(as = "UfeHex")]
5151 pub sender_address: &'a Felt,
5152 #[serde_as(as = "[UfeHex]")]
5153 pub calldata: &'a [Felt],
5154 #[serde_as(as = "UfeHex")]
5155 pub max_fee: &'a Felt,
5156 #[serde_as(as = "NumAsHex")]
5157 pub version: &'a u64,
5158 #[serde_as(as = "[UfeHex]")]
5159 pub signature: &'a [Felt],
5160 #[serde_as(as = "UfeHex")]
5161 pub nonce: &'a Felt,
5162 }
5163
5164 let r#type = "INVOKE";
5165
5166 let version = &1;
5167
5168 let tagged = Tagged {
5169 r#type,
5170 sender_address: &self.sender_address,
5171 calldata: &self.calldata,
5172 max_fee: &self.max_fee,
5173 version,
5174 signature: &self.signature,
5175 nonce: &self.nonce,
5176 };
5177
5178 Tagged::serialize(&tagged, serializer)
5179 }
5180}
5181
5182impl<'de> Deserialize<'de> for InvokeTransactionV1Content {
5183 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5184 #[serde_as]
5185 #[derive(Deserialize)]
5186 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
5187 struct Tagged {
5188 pub r#type: Option<String>,
5189 #[serde_as(as = "UfeHex")]
5190 pub sender_address: Felt,
5191 #[serde_as(as = "Vec<UfeHex>")]
5192 pub calldata: Vec<Felt>,
5193 #[serde_as(as = "UfeHex")]
5194 pub max_fee: Felt,
5195 #[serde_as(as = "Option<NumAsHex>")]
5196 pub version: Option<u64>,
5197 #[serde_as(as = "Vec<UfeHex>")]
5198 pub signature: Vec<Felt>,
5199 #[serde_as(as = "UfeHex")]
5200 pub nonce: Felt,
5201 }
5202
5203 let tagged = Tagged::deserialize(deserializer)?;
5204
5205 if let Some(tag_field) = &tagged.r#type {
5206 if tag_field != "INVOKE" {
5207 return Err(serde::de::Error::custom("invalid `type` value"));
5208 }
5209 }
5210
5211 if let Some(tag_field) = &tagged.version {
5212 if tag_field != &1 {
5213 return Err(serde::de::Error::custom("invalid `version` value"));
5214 }
5215 }
5216
5217 Ok(Self {
5218 sender_address: tagged.sender_address,
5219 calldata: tagged.calldata,
5220 max_fee: tagged.max_fee,
5221 signature: tagged.signature,
5222 nonce: tagged.nonce,
5223 })
5224 }
5225}
5226
5227impl Serialize for InvokeTransactionV3 {
5228 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5229 #[serde_as]
5230 #[derive(Serialize)]
5231 struct Tagged<'a> {
5232 #[serde_as(as = "UfeHex")]
5233 pub transaction_hash: &'a Felt,
5234 pub r#type: &'a str,
5235 #[serde_as(as = "UfeHex")]
5236 pub sender_address: &'a Felt,
5237 #[serde_as(as = "[UfeHex]")]
5238 pub calldata: &'a [Felt],
5239 #[serde_as(as = "NumAsHex")]
5240 pub version: &'a u64,
5241 #[serde_as(as = "[UfeHex]")]
5242 pub signature: &'a [Felt],
5243 #[serde_as(as = "UfeHex")]
5244 pub nonce: &'a Felt,
5245 pub resource_bounds: &'a ResourceBoundsMapping,
5246 #[serde_as(as = "NumAsHex")]
5247 pub tip: &'a u64,
5248 #[serde_as(as = "[UfeHex]")]
5249 pub paymaster_data: &'a [Felt],
5250 #[serde_as(as = "[UfeHex]")]
5251 pub account_deployment_data: &'a [Felt],
5252 pub nonce_data_availability_mode: &'a DataAvailabilityMode,
5253 pub fee_data_availability_mode: &'a DataAvailabilityMode,
5254 }
5255
5256 let r#type = "INVOKE";
5257
5258 let version = &3;
5259
5260 let tagged = Tagged {
5261 transaction_hash: &self.transaction_hash,
5262 r#type,
5263 sender_address: &self.sender_address,
5264 calldata: &self.calldata,
5265 version,
5266 signature: &self.signature,
5267 nonce: &self.nonce,
5268 resource_bounds: &self.resource_bounds,
5269 tip: &self.tip,
5270 paymaster_data: &self.paymaster_data,
5271 account_deployment_data: &self.account_deployment_data,
5272 nonce_data_availability_mode: &self.nonce_data_availability_mode,
5273 fee_data_availability_mode: &self.fee_data_availability_mode,
5274 };
5275
5276 Tagged::serialize(&tagged, serializer)
5277 }
5278}
5279
5280impl<'de> Deserialize<'de> for InvokeTransactionV3 {
5281 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5282 #[serde_as]
5283 #[derive(Deserialize)]
5284 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
5285 struct Tagged {
5286 #[serde_as(as = "UfeHex")]
5287 pub transaction_hash: Felt,
5288 pub r#type: Option<String>,
5289 #[serde_as(as = "UfeHex")]
5290 pub sender_address: Felt,
5291 #[serde_as(as = "Vec<UfeHex>")]
5292 pub calldata: Vec<Felt>,
5293 #[serde_as(as = "Option<NumAsHex>")]
5294 pub version: Option<u64>,
5295 #[serde_as(as = "Vec<UfeHex>")]
5296 pub signature: Vec<Felt>,
5297 #[serde_as(as = "UfeHex")]
5298 pub nonce: Felt,
5299 pub resource_bounds: ResourceBoundsMapping,
5300 #[serde_as(as = "NumAsHex")]
5301 pub tip: u64,
5302 #[serde_as(as = "Vec<UfeHex>")]
5303 pub paymaster_data: Vec<Felt>,
5304 #[serde_as(as = "Vec<UfeHex>")]
5305 pub account_deployment_data: Vec<Felt>,
5306 pub nonce_data_availability_mode: DataAvailabilityMode,
5307 pub fee_data_availability_mode: DataAvailabilityMode,
5308 }
5309
5310 let tagged = Tagged::deserialize(deserializer)?;
5311
5312 if let Some(tag_field) = &tagged.r#type {
5313 if tag_field != "INVOKE" {
5314 return Err(serde::de::Error::custom("invalid `type` value"));
5315 }
5316 }
5317
5318 if let Some(tag_field) = &tagged.version {
5319 if tag_field != &3 {
5320 return Err(serde::de::Error::custom("invalid `version` value"));
5321 }
5322 }
5323
5324 Ok(Self {
5325 transaction_hash: tagged.transaction_hash,
5326 sender_address: tagged.sender_address,
5327 calldata: tagged.calldata,
5328 signature: tagged.signature,
5329 nonce: tagged.nonce,
5330 resource_bounds: tagged.resource_bounds,
5331 tip: tagged.tip,
5332 paymaster_data: tagged.paymaster_data,
5333 account_deployment_data: tagged.account_deployment_data,
5334 nonce_data_availability_mode: tagged.nonce_data_availability_mode,
5335 fee_data_availability_mode: tagged.fee_data_availability_mode,
5336 })
5337 }
5338}
5339
5340impl Serialize for InvokeTransactionV3Content {
5341 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5342 #[serde_as]
5343 #[derive(Serialize)]
5344 struct Tagged<'a> {
5345 pub r#type: &'a str,
5346 #[serde_as(as = "UfeHex")]
5347 pub sender_address: &'a Felt,
5348 #[serde_as(as = "[UfeHex]")]
5349 pub calldata: &'a [Felt],
5350 #[serde_as(as = "NumAsHex")]
5351 pub version: &'a u64,
5352 #[serde_as(as = "[UfeHex]")]
5353 pub signature: &'a [Felt],
5354 #[serde_as(as = "UfeHex")]
5355 pub nonce: &'a Felt,
5356 pub resource_bounds: &'a ResourceBoundsMapping,
5357 #[serde_as(as = "NumAsHex")]
5358 pub tip: &'a u64,
5359 #[serde_as(as = "[UfeHex]")]
5360 pub paymaster_data: &'a [Felt],
5361 #[serde_as(as = "[UfeHex]")]
5362 pub account_deployment_data: &'a [Felt],
5363 pub nonce_data_availability_mode: &'a DataAvailabilityMode,
5364 pub fee_data_availability_mode: &'a DataAvailabilityMode,
5365 }
5366
5367 let r#type = "INVOKE";
5368
5369 let version = &3;
5370
5371 let tagged = Tagged {
5372 r#type,
5373 sender_address: &self.sender_address,
5374 calldata: &self.calldata,
5375 version,
5376 signature: &self.signature,
5377 nonce: &self.nonce,
5378 resource_bounds: &self.resource_bounds,
5379 tip: &self.tip,
5380 paymaster_data: &self.paymaster_data,
5381 account_deployment_data: &self.account_deployment_data,
5382 nonce_data_availability_mode: &self.nonce_data_availability_mode,
5383 fee_data_availability_mode: &self.fee_data_availability_mode,
5384 };
5385
5386 Tagged::serialize(&tagged, serializer)
5387 }
5388}
5389
5390impl<'de> Deserialize<'de> for InvokeTransactionV3Content {
5391 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5392 #[serde_as]
5393 #[derive(Deserialize)]
5394 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
5395 struct Tagged {
5396 pub r#type: Option<String>,
5397 #[serde_as(as = "UfeHex")]
5398 pub sender_address: Felt,
5399 #[serde_as(as = "Vec<UfeHex>")]
5400 pub calldata: Vec<Felt>,
5401 #[serde_as(as = "Option<NumAsHex>")]
5402 pub version: Option<u64>,
5403 #[serde_as(as = "Vec<UfeHex>")]
5404 pub signature: Vec<Felt>,
5405 #[serde_as(as = "UfeHex")]
5406 pub nonce: Felt,
5407 pub resource_bounds: ResourceBoundsMapping,
5408 #[serde_as(as = "NumAsHex")]
5409 pub tip: u64,
5410 #[serde_as(as = "Vec<UfeHex>")]
5411 pub paymaster_data: Vec<Felt>,
5412 #[serde_as(as = "Vec<UfeHex>")]
5413 pub account_deployment_data: Vec<Felt>,
5414 pub nonce_data_availability_mode: DataAvailabilityMode,
5415 pub fee_data_availability_mode: DataAvailabilityMode,
5416 }
5417
5418 let tagged = Tagged::deserialize(deserializer)?;
5419
5420 if let Some(tag_field) = &tagged.r#type {
5421 if tag_field != "INVOKE" {
5422 return Err(serde::de::Error::custom("invalid `type` value"));
5423 }
5424 }
5425
5426 if let Some(tag_field) = &tagged.version {
5427 if tag_field != &3 {
5428 return Err(serde::de::Error::custom("invalid `version` value"));
5429 }
5430 }
5431
5432 Ok(Self {
5433 sender_address: tagged.sender_address,
5434 calldata: tagged.calldata,
5435 signature: tagged.signature,
5436 nonce: tagged.nonce,
5437 resource_bounds: tagged.resource_bounds,
5438 tip: tagged.tip,
5439 paymaster_data: tagged.paymaster_data,
5440 account_deployment_data: tagged.account_deployment_data,
5441 nonce_data_availability_mode: tagged.nonce_data_availability_mode,
5442 fee_data_availability_mode: tagged.fee_data_availability_mode,
5443 })
5444 }
5445}
5446
5447impl Serialize for L1HandlerTransaction {
5448 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5449 #[serde_as]
5450 #[derive(Serialize)]
5451 struct Tagged<'a> {
5452 #[serde_as(as = "UfeHex")]
5453 pub transaction_hash: &'a Felt,
5454 #[serde_as(as = "UfeHex")]
5455 pub version: &'a Felt,
5456 pub r#type: &'a str,
5457 #[serde_as(as = "NumAsHex")]
5458 pub nonce: &'a u64,
5459 #[serde_as(as = "UfeHex")]
5460 pub contract_address: &'a Felt,
5461 #[serde_as(as = "UfeHex")]
5462 pub entry_point_selector: &'a Felt,
5463 #[serde_as(as = "[UfeHex]")]
5464 pub calldata: &'a [Felt],
5465 }
5466
5467 let r#type = "L1_HANDLER";
5468
5469 let tagged = Tagged {
5470 transaction_hash: &self.transaction_hash,
5471 version: &self.version,
5472 r#type,
5473 nonce: &self.nonce,
5474 contract_address: &self.contract_address,
5475 entry_point_selector: &self.entry_point_selector,
5476 calldata: &self.calldata,
5477 };
5478
5479 Tagged::serialize(&tagged, serializer)
5480 }
5481}
5482
5483impl<'de> Deserialize<'de> for L1HandlerTransaction {
5484 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5485 #[serde_as]
5486 #[derive(Deserialize)]
5487 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
5488 struct Tagged {
5489 #[serde_as(as = "UfeHex")]
5490 pub transaction_hash: Felt,
5491 #[serde_as(as = "UfeHex")]
5492 pub version: Felt,
5493 pub r#type: Option<String>,
5494 #[serde_as(as = "NumAsHex")]
5495 pub nonce: u64,
5496 #[serde_as(as = "UfeHex")]
5497 pub contract_address: Felt,
5498 #[serde_as(as = "UfeHex")]
5499 pub entry_point_selector: Felt,
5500 #[serde_as(as = "Vec<UfeHex>")]
5501 pub calldata: Vec<Felt>,
5502 }
5503
5504 let tagged = Tagged::deserialize(deserializer)?;
5505
5506 if let Some(tag_field) = &tagged.r#type {
5507 if tag_field != "L1_HANDLER" {
5508 return Err(serde::de::Error::custom("invalid `type` value"));
5509 }
5510 }
5511
5512 Ok(Self {
5513 transaction_hash: tagged.transaction_hash,
5514 version: tagged.version,
5515 nonce: tagged.nonce,
5516 contract_address: tagged.contract_address,
5517 entry_point_selector: tagged.entry_point_selector,
5518 calldata: tagged.calldata,
5519 })
5520 }
5521}
5522
5523impl Serialize for L1HandlerTransactionContent {
5524 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5525 #[serde_as]
5526 #[derive(Serialize)]
5527 struct Tagged<'a> {
5528 #[serde_as(as = "UfeHex")]
5529 pub version: &'a Felt,
5530 pub r#type: &'a str,
5531 #[serde_as(as = "NumAsHex")]
5532 pub nonce: &'a u64,
5533 #[serde_as(as = "UfeHex")]
5534 pub contract_address: &'a Felt,
5535 #[serde_as(as = "UfeHex")]
5536 pub entry_point_selector: &'a Felt,
5537 #[serde_as(as = "[UfeHex]")]
5538 pub calldata: &'a [Felt],
5539 }
5540
5541 let r#type = "L1_HANDLER";
5542
5543 let tagged = Tagged {
5544 version: &self.version,
5545 r#type,
5546 nonce: &self.nonce,
5547 contract_address: &self.contract_address,
5548 entry_point_selector: &self.entry_point_selector,
5549 calldata: &self.calldata,
5550 };
5551
5552 Tagged::serialize(&tagged, serializer)
5553 }
5554}
5555
5556impl<'de> Deserialize<'de> for L1HandlerTransactionContent {
5557 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5558 #[serde_as]
5559 #[derive(Deserialize)]
5560 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
5561 struct Tagged {
5562 #[serde_as(as = "UfeHex")]
5563 pub version: Felt,
5564 pub r#type: Option<String>,
5565 #[serde_as(as = "NumAsHex")]
5566 pub nonce: u64,
5567 #[serde_as(as = "UfeHex")]
5568 pub contract_address: Felt,
5569 #[serde_as(as = "UfeHex")]
5570 pub entry_point_selector: Felt,
5571 #[serde_as(as = "Vec<UfeHex>")]
5572 pub calldata: Vec<Felt>,
5573 }
5574
5575 let tagged = Tagged::deserialize(deserializer)?;
5576
5577 if let Some(tag_field) = &tagged.r#type {
5578 if tag_field != "L1_HANDLER" {
5579 return Err(serde::de::Error::custom("invalid `type` value"));
5580 }
5581 }
5582
5583 Ok(Self {
5584 version: tagged.version,
5585 nonce: tagged.nonce,
5586 contract_address: tagged.contract_address,
5587 entry_point_selector: tagged.entry_point_selector,
5588 calldata: tagged.calldata,
5589 })
5590 }
5591}
5592
5593impl Serialize for L1HandlerTransactionReceipt {
5594 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5595 #[serde_as]
5596 #[derive(Serialize)]
5597 struct Tagged<'a> {
5598 pub r#type: &'a str,
5599 pub message_hash: &'a Hash256,
5600 #[serde_as(as = "UfeHex")]
5601 pub transaction_hash: &'a Felt,
5602 pub actual_fee: &'a FeePayment,
5603 pub finality_status: &'a TransactionFinalityStatus,
5604 pub messages_sent: &'a [MsgToL1],
5605 pub events: &'a [Event],
5606 pub execution_resources: &'a ExecutionResources,
5607 #[serde(flatten)]
5608 pub execution_result: &'a ExecutionResult,
5609 }
5610
5611 let r#type = "L1_HANDLER";
5612
5613 let tagged = Tagged {
5614 r#type,
5615 message_hash: &self.message_hash,
5616 transaction_hash: &self.transaction_hash,
5617 actual_fee: &self.actual_fee,
5618 finality_status: &self.finality_status,
5619 messages_sent: &self.messages_sent,
5620 events: &self.events,
5621 execution_resources: &self.execution_resources,
5622 execution_result: &self.execution_result,
5623 };
5624
5625 Tagged::serialize(&tagged, serializer)
5626 }
5627}
5628
5629impl<'de> Deserialize<'de> for L1HandlerTransactionReceipt {
5630 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5631 #[serde_as]
5632 #[derive(Deserialize)]
5633 struct Tagged {
5634 pub r#type: Option<String>,
5635 pub message_hash: Hash256,
5636 #[serde_as(as = "UfeHex")]
5637 pub transaction_hash: Felt,
5638 pub actual_fee: FeePayment,
5639 pub finality_status: TransactionFinalityStatus,
5640 pub messages_sent: Vec<MsgToL1>,
5641 pub events: Vec<Event>,
5642 pub execution_resources: ExecutionResources,
5643 #[serde(flatten)]
5644 pub execution_result: ExecutionResult,
5645 }
5646
5647 let tagged = Tagged::deserialize(deserializer)?;
5648
5649 if let Some(tag_field) = &tagged.r#type {
5650 if tag_field != "L1_HANDLER" {
5651 return Err(serde::de::Error::custom("invalid `type` value"));
5652 }
5653 }
5654
5655 Ok(Self {
5656 message_hash: tagged.message_hash,
5657 transaction_hash: tagged.transaction_hash,
5658 actual_fee: tagged.actual_fee,
5659 finality_status: tagged.finality_status,
5660 messages_sent: tagged.messages_sent,
5661 events: tagged.events,
5662 execution_resources: tagged.execution_resources,
5663 execution_result: tagged.execution_result,
5664 })
5665 }
5666}
5667
5668impl Serialize for L1HandlerTransactionTrace {
5669 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5670 #[derive(Serialize)]
5671 struct Tagged<'a> {
5672 pub function_invocation: &'a FunctionInvocation,
5673 #[serde(skip_serializing_if = "Option::is_none")]
5674 pub state_diff: &'a Option<StateDiff>,
5675 pub execution_resources: &'a ExecutionResources,
5676 pub r#type: &'a str,
5677 }
5678
5679 let r#type = "L1_HANDLER";
5680
5681 let tagged = Tagged {
5682 function_invocation: &self.function_invocation,
5683 state_diff: &self.state_diff,
5684 execution_resources: &self.execution_resources,
5685 r#type,
5686 };
5687
5688 Tagged::serialize(&tagged, serializer)
5689 }
5690}
5691
5692impl<'de> Deserialize<'de> for L1HandlerTransactionTrace {
5693 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5694 #[derive(Deserialize)]
5695 #[cfg_attr(feature = "no_unknown_fields", serde(deny_unknown_fields))]
5696 struct Tagged {
5697 pub function_invocation: FunctionInvocation,
5698 #[serde(skip_serializing_if = "Option::is_none")]
5699 pub state_diff: Option<StateDiff>,
5700 pub execution_resources: ExecutionResources,
5701 pub r#type: Option<String>,
5702 }
5703
5704 let tagged = Tagged::deserialize(deserializer)?;
5705
5706 if let Some(tag_field) = &tagged.r#type {
5707 if tag_field != "L1_HANDLER" {
5708 return Err(serde::de::Error::custom("invalid `type` value"));
5709 }
5710 }
5711
5712 Ok(Self {
5713 function_invocation: tagged.function_invocation,
5714 state_diff: tagged.state_diff,
5715 execution_resources: tagged.execution_resources,
5716 })
5717 }
5718}
5719
5720impl Serialize for AddDeclareTransactionRequest {
5721 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5722 #[derive(Serialize)]
5723 struct AsObject<'a> {
5724 declare_transaction: Field0<'a>,
5725 }
5726
5727 #[derive(Serialize)]
5728 #[serde(transparent)]
5729 struct Field0<'a> {
5730 pub value: &'a BroadcastedDeclareTransaction,
5731 }
5732
5733 AsObject::serialize(
5734 &AsObject {
5735 declare_transaction: Field0 {
5736 value: &self.declare_transaction,
5737 },
5738 },
5739 serializer,
5740 )
5741 }
5742}
5743
5744impl Serialize for AddDeclareTransactionRequestRef<'_> {
5745 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5746 #[derive(Serialize)]
5747 struct AsObject<'a> {
5748 declare_transaction: Field0<'a>,
5749 }
5750
5751 #[derive(Serialize)]
5752 #[serde(transparent)]
5753 struct Field0<'a> {
5754 pub value: &'a BroadcastedDeclareTransaction,
5755 }
5756
5757 AsObject::serialize(
5758 &AsObject {
5759 declare_transaction: Field0 {
5760 value: self.declare_transaction,
5761 },
5762 },
5763 serializer,
5764 )
5765 }
5766}
5767
5768impl<'de> Deserialize<'de> for AddDeclareTransactionRequest {
5769 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5770 #[derive(Deserialize)]
5771 struct AsObject {
5772 declare_transaction: Field0,
5773 }
5774
5775 #[derive(Deserialize)]
5776 #[serde(transparent)]
5777 struct Field0 {
5778 pub value: BroadcastedDeclareTransaction,
5779 }
5780
5781 let temp = serde_json::Value::deserialize(deserializer)?;
5782
5783 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
5784 let field0 = serde_json::from_value::<Field0>(
5785 elements
5786 .pop()
5787 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
5788 )
5789 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
5790
5791 Ok(Self {
5792 declare_transaction: field0.value,
5793 })
5794 } else if let Ok(object) = AsObject::deserialize(&temp) {
5795 Ok(Self {
5796 declare_transaction: object.declare_transaction.value,
5797 })
5798 } else {
5799 Err(serde::de::Error::custom("invalid sequence length"))
5800 }
5801 }
5802}
5803
5804impl Serialize for AddDeployAccountTransactionRequest {
5805 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5806 #[derive(Serialize)]
5807 struct AsObject<'a> {
5808 deploy_account_transaction: Field0<'a>,
5809 }
5810
5811 #[derive(Serialize)]
5812 #[serde(transparent)]
5813 struct Field0<'a> {
5814 pub value: &'a BroadcastedDeployAccountTransaction,
5815 }
5816
5817 AsObject::serialize(
5818 &AsObject {
5819 deploy_account_transaction: Field0 {
5820 value: &self.deploy_account_transaction,
5821 },
5822 },
5823 serializer,
5824 )
5825 }
5826}
5827
5828impl Serialize for AddDeployAccountTransactionRequestRef<'_> {
5829 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5830 #[derive(Serialize)]
5831 struct AsObject<'a> {
5832 deploy_account_transaction: Field0<'a>,
5833 }
5834
5835 #[derive(Serialize)]
5836 #[serde(transparent)]
5837 struct Field0<'a> {
5838 pub value: &'a BroadcastedDeployAccountTransaction,
5839 }
5840
5841 AsObject::serialize(
5842 &AsObject {
5843 deploy_account_transaction: Field0 {
5844 value: self.deploy_account_transaction,
5845 },
5846 },
5847 serializer,
5848 )
5849 }
5850}
5851
5852impl<'de> Deserialize<'de> for AddDeployAccountTransactionRequest {
5853 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5854 #[derive(Deserialize)]
5855 struct AsObject {
5856 deploy_account_transaction: Field0,
5857 }
5858
5859 #[derive(Deserialize)]
5860 #[serde(transparent)]
5861 struct Field0 {
5862 pub value: BroadcastedDeployAccountTransaction,
5863 }
5864
5865 let temp = serde_json::Value::deserialize(deserializer)?;
5866
5867 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
5868 let field0 = serde_json::from_value::<Field0>(
5869 elements
5870 .pop()
5871 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
5872 )
5873 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
5874
5875 Ok(Self {
5876 deploy_account_transaction: field0.value,
5877 })
5878 } else if let Ok(object) = AsObject::deserialize(&temp) {
5879 Ok(Self {
5880 deploy_account_transaction: object.deploy_account_transaction.value,
5881 })
5882 } else {
5883 Err(serde::de::Error::custom("invalid sequence length"))
5884 }
5885 }
5886}
5887
5888impl Serialize for AddInvokeTransactionRequest {
5889 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5890 #[derive(Serialize)]
5891 struct AsObject<'a> {
5892 invoke_transaction: Field0<'a>,
5893 }
5894
5895 #[derive(Serialize)]
5896 #[serde(transparent)]
5897 struct Field0<'a> {
5898 pub value: &'a BroadcastedInvokeTransaction,
5899 }
5900
5901 AsObject::serialize(
5902 &AsObject {
5903 invoke_transaction: Field0 {
5904 value: &self.invoke_transaction,
5905 },
5906 },
5907 serializer,
5908 )
5909 }
5910}
5911
5912impl Serialize for AddInvokeTransactionRequestRef<'_> {
5913 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5914 #[derive(Serialize)]
5915 struct AsObject<'a> {
5916 invoke_transaction: Field0<'a>,
5917 }
5918
5919 #[derive(Serialize)]
5920 #[serde(transparent)]
5921 struct Field0<'a> {
5922 pub value: &'a BroadcastedInvokeTransaction,
5923 }
5924
5925 AsObject::serialize(
5926 &AsObject {
5927 invoke_transaction: Field0 {
5928 value: self.invoke_transaction,
5929 },
5930 },
5931 serializer,
5932 )
5933 }
5934}
5935
5936impl<'de> Deserialize<'de> for AddInvokeTransactionRequest {
5937 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5938 #[derive(Deserialize)]
5939 struct AsObject {
5940 invoke_transaction: Field0,
5941 }
5942
5943 #[derive(Deserialize)]
5944 #[serde(transparent)]
5945 struct Field0 {
5946 pub value: BroadcastedInvokeTransaction,
5947 }
5948
5949 let temp = serde_json::Value::deserialize(deserializer)?;
5950
5951 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
5952 let field0 = serde_json::from_value::<Field0>(
5953 elements
5954 .pop()
5955 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
5956 )
5957 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
5958
5959 Ok(Self {
5960 invoke_transaction: field0.value,
5961 })
5962 } else if let Ok(object) = AsObject::deserialize(&temp) {
5963 Ok(Self {
5964 invoke_transaction: object.invoke_transaction.value,
5965 })
5966 } else {
5967 Err(serde::de::Error::custom("invalid sequence length"))
5968 }
5969 }
5970}
5971
5972impl Serialize for BlockHashAndNumberRequest {
5973 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5974 use serde::ser::SerializeSeq;
5975
5976 let seq = serializer.serialize_seq(Some(0))?;
5977 seq.end()
5978 }
5979}
5980
5981impl<'de> Deserialize<'de> for BlockHashAndNumberRequest {
5982 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5983 let elements = Vec::<()>::deserialize(deserializer)?;
5984 if !elements.is_empty() {
5985 return Err(serde::de::Error::custom("invalid sequence length"));
5986 }
5987 Ok(Self)
5988 }
5989}
5990
5991impl Serialize for BlockNumberRequest {
5992 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5993 use serde::ser::SerializeSeq;
5994
5995 let seq = serializer.serialize_seq(Some(0))?;
5996 seq.end()
5997 }
5998}
5999
6000impl<'de> Deserialize<'de> for BlockNumberRequest {
6001 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6002 let elements = Vec::<()>::deserialize(deserializer)?;
6003 if !elements.is_empty() {
6004 return Err(serde::de::Error::custom("invalid sequence length"));
6005 }
6006 Ok(Self)
6007 }
6008}
6009
6010impl Serialize for CallRequest {
6011 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6012 #[derive(Serialize)]
6013 struct AsObject<'a> {
6014 request: Field0<'a>,
6015 block_id: Field1<'a>,
6016 }
6017
6018 #[derive(Serialize)]
6019 #[serde(transparent)]
6020 struct Field0<'a> {
6021 pub value: &'a FunctionCall,
6022 }
6023
6024 #[derive(Serialize)]
6025 #[serde(transparent)]
6026 struct Field1<'a> {
6027 pub value: &'a BlockId,
6028 }
6029
6030 AsObject::serialize(
6031 &AsObject {
6032 request: Field0 {
6033 value: &self.request,
6034 },
6035 block_id: Field1 {
6036 value: &self.block_id,
6037 },
6038 },
6039 serializer,
6040 )
6041 }
6042}
6043
6044impl Serialize for CallRequestRef<'_> {
6045 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6046 #[derive(Serialize)]
6047 struct AsObject<'a> {
6048 request: Field0<'a>,
6049 block_id: Field1<'a>,
6050 }
6051
6052 #[derive(Serialize)]
6053 #[serde(transparent)]
6054 struct Field0<'a> {
6055 pub value: &'a FunctionCall,
6056 }
6057
6058 #[derive(Serialize)]
6059 #[serde(transparent)]
6060 struct Field1<'a> {
6061 pub value: &'a BlockId,
6062 }
6063
6064 AsObject::serialize(
6065 &AsObject {
6066 request: Field0 {
6067 value: self.request,
6068 },
6069 block_id: Field1 {
6070 value: self.block_id,
6071 },
6072 },
6073 serializer,
6074 )
6075 }
6076}
6077
6078impl<'de> Deserialize<'de> for CallRequest {
6079 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6080 #[derive(Deserialize)]
6081 struct AsObject {
6082 request: Field0,
6083 block_id: Field1,
6084 }
6085
6086 #[derive(Deserialize)]
6087 #[serde(transparent)]
6088 struct Field0 {
6089 pub value: FunctionCall,
6090 }
6091
6092 #[derive(Deserialize)]
6093 #[serde(transparent)]
6094 struct Field1 {
6095 pub value: BlockId,
6096 }
6097
6098 let temp = serde_json::Value::deserialize(deserializer)?;
6099
6100 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
6101 let field1 = serde_json::from_value::<Field1>(
6102 elements
6103 .pop()
6104 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
6105 )
6106 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
6107 let field0 = serde_json::from_value::<Field0>(
6108 elements
6109 .pop()
6110 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
6111 )
6112 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
6113
6114 Ok(Self {
6115 request: field0.value,
6116 block_id: field1.value,
6117 })
6118 } else if let Ok(object) = AsObject::deserialize(&temp) {
6119 Ok(Self {
6120 request: object.request.value,
6121 block_id: object.block_id.value,
6122 })
6123 } else {
6124 Err(serde::de::Error::custom("invalid sequence length"))
6125 }
6126 }
6127}
6128
6129impl Serialize for ChainIdRequest {
6130 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6131 use serde::ser::SerializeSeq;
6132
6133 let seq = serializer.serialize_seq(Some(0))?;
6134 seq.end()
6135 }
6136}
6137
6138impl<'de> Deserialize<'de> for ChainIdRequest {
6139 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6140 let elements = Vec::<()>::deserialize(deserializer)?;
6141 if !elements.is_empty() {
6142 return Err(serde::de::Error::custom("invalid sequence length"));
6143 }
6144 Ok(Self)
6145 }
6146}
6147
6148impl Serialize for EstimateFeeRequest {
6149 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6150 #[derive(Serialize)]
6151 struct AsObject<'a> {
6152 request: Field0<'a>,
6153 simulation_flags: Field1<'a>,
6154 block_id: Field2<'a>,
6155 }
6156
6157 #[derive(Serialize)]
6158 #[serde(transparent)]
6159 struct Field0<'a> {
6160 pub value: &'a [BroadcastedTransaction],
6161 }
6162
6163 #[derive(Serialize)]
6164 #[serde(transparent)]
6165 struct Field1<'a> {
6166 pub value: &'a [SimulationFlagForEstimateFee],
6167 }
6168
6169 #[derive(Serialize)]
6170 #[serde(transparent)]
6171 struct Field2<'a> {
6172 pub value: &'a BlockId,
6173 }
6174
6175 AsObject::serialize(
6176 &AsObject {
6177 request: Field0 {
6178 value: &self.request,
6179 },
6180 simulation_flags: Field1 {
6181 value: &self.simulation_flags,
6182 },
6183 block_id: Field2 {
6184 value: &self.block_id,
6185 },
6186 },
6187 serializer,
6188 )
6189 }
6190}
6191
6192impl Serialize for EstimateFeeRequestRef<'_> {
6193 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6194 #[derive(Serialize)]
6195 struct AsObject<'a> {
6196 request: Field0<'a>,
6197 simulation_flags: Field1<'a>,
6198 block_id: Field2<'a>,
6199 }
6200
6201 #[derive(Serialize)]
6202 #[serde(transparent)]
6203 struct Field0<'a> {
6204 pub value: &'a [BroadcastedTransaction],
6205 }
6206
6207 #[derive(Serialize)]
6208 #[serde(transparent)]
6209 struct Field1<'a> {
6210 pub value: &'a [SimulationFlagForEstimateFee],
6211 }
6212
6213 #[derive(Serialize)]
6214 #[serde(transparent)]
6215 struct Field2<'a> {
6216 pub value: &'a BlockId,
6217 }
6218
6219 AsObject::serialize(
6220 &AsObject {
6221 request: Field0 {
6222 value: self.request,
6223 },
6224 simulation_flags: Field1 {
6225 value: self.simulation_flags,
6226 },
6227 block_id: Field2 {
6228 value: self.block_id,
6229 },
6230 },
6231 serializer,
6232 )
6233 }
6234}
6235
6236impl<'de> Deserialize<'de> for EstimateFeeRequest {
6237 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6238 #[derive(Deserialize)]
6239 struct AsObject {
6240 request: Field0,
6241 simulation_flags: Field1,
6242 block_id: Field2,
6243 }
6244
6245 #[derive(Deserialize)]
6246 #[serde(transparent)]
6247 struct Field0 {
6248 pub value: Vec<BroadcastedTransaction>,
6249 }
6250
6251 #[derive(Deserialize)]
6252 #[serde(transparent)]
6253 struct Field1 {
6254 pub value: Vec<SimulationFlagForEstimateFee>,
6255 }
6256
6257 #[derive(Deserialize)]
6258 #[serde(transparent)]
6259 struct Field2 {
6260 pub value: BlockId,
6261 }
6262
6263 let temp = serde_json::Value::deserialize(deserializer)?;
6264
6265 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
6266 let field2 = serde_json::from_value::<Field2>(
6267 elements
6268 .pop()
6269 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
6270 )
6271 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
6272 let field1 = serde_json::from_value::<Field1>(
6273 elements
6274 .pop()
6275 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
6276 )
6277 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
6278 let field0 = serde_json::from_value::<Field0>(
6279 elements
6280 .pop()
6281 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
6282 )
6283 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
6284
6285 Ok(Self {
6286 request: field0.value,
6287 simulation_flags: field1.value,
6288 block_id: field2.value,
6289 })
6290 } else if let Ok(object) = AsObject::deserialize(&temp) {
6291 Ok(Self {
6292 request: object.request.value,
6293 simulation_flags: object.simulation_flags.value,
6294 block_id: object.block_id.value,
6295 })
6296 } else {
6297 Err(serde::de::Error::custom("invalid sequence length"))
6298 }
6299 }
6300}
6301
6302impl Serialize for EstimateMessageFeeRequest {
6303 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6304 #[derive(Serialize)]
6305 struct AsObject<'a> {
6306 message: Field0<'a>,
6307 block_id: Field1<'a>,
6308 }
6309
6310 #[derive(Serialize)]
6311 #[serde(transparent)]
6312 struct Field0<'a> {
6313 pub value: &'a MsgFromL1,
6314 }
6315
6316 #[derive(Serialize)]
6317 #[serde(transparent)]
6318 struct Field1<'a> {
6319 pub value: &'a BlockId,
6320 }
6321
6322 AsObject::serialize(
6323 &AsObject {
6324 message: Field0 {
6325 value: &self.message,
6326 },
6327 block_id: Field1 {
6328 value: &self.block_id,
6329 },
6330 },
6331 serializer,
6332 )
6333 }
6334}
6335
6336impl Serialize for EstimateMessageFeeRequestRef<'_> {
6337 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6338 #[derive(Serialize)]
6339 struct AsObject<'a> {
6340 message: Field0<'a>,
6341 block_id: Field1<'a>,
6342 }
6343
6344 #[derive(Serialize)]
6345 #[serde(transparent)]
6346 struct Field0<'a> {
6347 pub value: &'a MsgFromL1,
6348 }
6349
6350 #[derive(Serialize)]
6351 #[serde(transparent)]
6352 struct Field1<'a> {
6353 pub value: &'a BlockId,
6354 }
6355
6356 AsObject::serialize(
6357 &AsObject {
6358 message: Field0 {
6359 value: self.message,
6360 },
6361 block_id: Field1 {
6362 value: self.block_id,
6363 },
6364 },
6365 serializer,
6366 )
6367 }
6368}
6369
6370impl<'de> Deserialize<'de> for EstimateMessageFeeRequest {
6371 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6372 #[derive(Deserialize)]
6373 struct AsObject {
6374 message: Field0,
6375 block_id: Field1,
6376 }
6377
6378 #[derive(Deserialize)]
6379 #[serde(transparent)]
6380 struct Field0 {
6381 pub value: MsgFromL1,
6382 }
6383
6384 #[derive(Deserialize)]
6385 #[serde(transparent)]
6386 struct Field1 {
6387 pub value: BlockId,
6388 }
6389
6390 let temp = serde_json::Value::deserialize(deserializer)?;
6391
6392 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
6393 let field1 = serde_json::from_value::<Field1>(
6394 elements
6395 .pop()
6396 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
6397 )
6398 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
6399 let field0 = serde_json::from_value::<Field0>(
6400 elements
6401 .pop()
6402 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
6403 )
6404 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
6405
6406 Ok(Self {
6407 message: field0.value,
6408 block_id: field1.value,
6409 })
6410 } else if let Ok(object) = AsObject::deserialize(&temp) {
6411 Ok(Self {
6412 message: object.message.value,
6413 block_id: object.block_id.value,
6414 })
6415 } else {
6416 Err(serde::de::Error::custom("invalid sequence length"))
6417 }
6418 }
6419}
6420
6421impl Serialize for GetBlockTransactionCountRequest {
6422 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6423 #[derive(Serialize)]
6424 struct AsObject<'a> {
6425 block_id: Field0<'a>,
6426 }
6427
6428 #[derive(Serialize)]
6429 #[serde(transparent)]
6430 struct Field0<'a> {
6431 pub value: &'a BlockId,
6432 }
6433
6434 AsObject::serialize(
6435 &AsObject {
6436 block_id: Field0 {
6437 value: &self.block_id,
6438 },
6439 },
6440 serializer,
6441 )
6442 }
6443}
6444
6445impl Serialize for GetBlockTransactionCountRequestRef<'_> {
6446 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6447 #[derive(Serialize)]
6448 struct AsObject<'a> {
6449 block_id: Field0<'a>,
6450 }
6451
6452 #[derive(Serialize)]
6453 #[serde(transparent)]
6454 struct Field0<'a> {
6455 pub value: &'a BlockId,
6456 }
6457
6458 AsObject::serialize(
6459 &AsObject {
6460 block_id: Field0 {
6461 value: self.block_id,
6462 },
6463 },
6464 serializer,
6465 )
6466 }
6467}
6468
6469impl<'de> Deserialize<'de> for GetBlockTransactionCountRequest {
6470 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6471 #[derive(Deserialize)]
6472 struct AsObject {
6473 block_id: Field0,
6474 }
6475
6476 #[derive(Deserialize)]
6477 #[serde(transparent)]
6478 struct Field0 {
6479 pub value: BlockId,
6480 }
6481
6482 let temp = serde_json::Value::deserialize(deserializer)?;
6483
6484 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
6485 let field0 = serde_json::from_value::<Field0>(
6486 elements
6487 .pop()
6488 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
6489 )
6490 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
6491
6492 Ok(Self {
6493 block_id: field0.value,
6494 })
6495 } else if let Ok(object) = AsObject::deserialize(&temp) {
6496 Ok(Self {
6497 block_id: object.block_id.value,
6498 })
6499 } else {
6500 Err(serde::de::Error::custom("invalid sequence length"))
6501 }
6502 }
6503}
6504
6505impl Serialize for GetBlockWithReceiptsRequest {
6506 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6507 #[derive(Serialize)]
6508 struct AsObject<'a> {
6509 block_id: Field0<'a>,
6510 }
6511
6512 #[derive(Serialize)]
6513 #[serde(transparent)]
6514 struct Field0<'a> {
6515 pub value: &'a BlockId,
6516 }
6517
6518 AsObject::serialize(
6519 &AsObject {
6520 block_id: Field0 {
6521 value: &self.block_id,
6522 },
6523 },
6524 serializer,
6525 )
6526 }
6527}
6528
6529impl Serialize for GetBlockWithReceiptsRequestRef<'_> {
6530 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6531 #[derive(Serialize)]
6532 struct AsObject<'a> {
6533 block_id: Field0<'a>,
6534 }
6535
6536 #[derive(Serialize)]
6537 #[serde(transparent)]
6538 struct Field0<'a> {
6539 pub value: &'a BlockId,
6540 }
6541
6542 AsObject::serialize(
6543 &AsObject {
6544 block_id: Field0 {
6545 value: self.block_id,
6546 },
6547 },
6548 serializer,
6549 )
6550 }
6551}
6552
6553impl<'de> Deserialize<'de> for GetBlockWithReceiptsRequest {
6554 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6555 #[derive(Deserialize)]
6556 struct AsObject {
6557 block_id: Field0,
6558 }
6559
6560 #[derive(Deserialize)]
6561 #[serde(transparent)]
6562 struct Field0 {
6563 pub value: BlockId,
6564 }
6565
6566 let temp = serde_json::Value::deserialize(deserializer)?;
6567
6568 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
6569 let field0 = serde_json::from_value::<Field0>(
6570 elements
6571 .pop()
6572 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
6573 )
6574 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
6575
6576 Ok(Self {
6577 block_id: field0.value,
6578 })
6579 } else if let Ok(object) = AsObject::deserialize(&temp) {
6580 Ok(Self {
6581 block_id: object.block_id.value,
6582 })
6583 } else {
6584 Err(serde::de::Error::custom("invalid sequence length"))
6585 }
6586 }
6587}
6588
6589impl Serialize for GetBlockWithTxHashesRequest {
6590 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6591 #[derive(Serialize)]
6592 struct AsObject<'a> {
6593 block_id: Field0<'a>,
6594 }
6595
6596 #[derive(Serialize)]
6597 #[serde(transparent)]
6598 struct Field0<'a> {
6599 pub value: &'a BlockId,
6600 }
6601
6602 AsObject::serialize(
6603 &AsObject {
6604 block_id: Field0 {
6605 value: &self.block_id,
6606 },
6607 },
6608 serializer,
6609 )
6610 }
6611}
6612
6613impl Serialize for GetBlockWithTxHashesRequestRef<'_> {
6614 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6615 #[derive(Serialize)]
6616 struct AsObject<'a> {
6617 block_id: Field0<'a>,
6618 }
6619
6620 #[derive(Serialize)]
6621 #[serde(transparent)]
6622 struct Field0<'a> {
6623 pub value: &'a BlockId,
6624 }
6625
6626 AsObject::serialize(
6627 &AsObject {
6628 block_id: Field0 {
6629 value: self.block_id,
6630 },
6631 },
6632 serializer,
6633 )
6634 }
6635}
6636
6637impl<'de> Deserialize<'de> for GetBlockWithTxHashesRequest {
6638 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6639 #[derive(Deserialize)]
6640 struct AsObject {
6641 block_id: Field0,
6642 }
6643
6644 #[derive(Deserialize)]
6645 #[serde(transparent)]
6646 struct Field0 {
6647 pub value: BlockId,
6648 }
6649
6650 let temp = serde_json::Value::deserialize(deserializer)?;
6651
6652 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
6653 let field0 = serde_json::from_value::<Field0>(
6654 elements
6655 .pop()
6656 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
6657 )
6658 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
6659
6660 Ok(Self {
6661 block_id: field0.value,
6662 })
6663 } else if let Ok(object) = AsObject::deserialize(&temp) {
6664 Ok(Self {
6665 block_id: object.block_id.value,
6666 })
6667 } else {
6668 Err(serde::de::Error::custom("invalid sequence length"))
6669 }
6670 }
6671}
6672
6673impl Serialize for GetBlockWithTxsRequest {
6674 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6675 #[derive(Serialize)]
6676 struct AsObject<'a> {
6677 block_id: Field0<'a>,
6678 }
6679
6680 #[derive(Serialize)]
6681 #[serde(transparent)]
6682 struct Field0<'a> {
6683 pub value: &'a BlockId,
6684 }
6685
6686 AsObject::serialize(
6687 &AsObject {
6688 block_id: Field0 {
6689 value: &self.block_id,
6690 },
6691 },
6692 serializer,
6693 )
6694 }
6695}
6696
6697impl Serialize for GetBlockWithTxsRequestRef<'_> {
6698 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6699 #[derive(Serialize)]
6700 struct AsObject<'a> {
6701 block_id: Field0<'a>,
6702 }
6703
6704 #[derive(Serialize)]
6705 #[serde(transparent)]
6706 struct Field0<'a> {
6707 pub value: &'a BlockId,
6708 }
6709
6710 AsObject::serialize(
6711 &AsObject {
6712 block_id: Field0 {
6713 value: self.block_id,
6714 },
6715 },
6716 serializer,
6717 )
6718 }
6719}
6720
6721impl<'de> Deserialize<'de> for GetBlockWithTxsRequest {
6722 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6723 #[derive(Deserialize)]
6724 struct AsObject {
6725 block_id: Field0,
6726 }
6727
6728 #[derive(Deserialize)]
6729 #[serde(transparent)]
6730 struct Field0 {
6731 pub value: BlockId,
6732 }
6733
6734 let temp = serde_json::Value::deserialize(deserializer)?;
6735
6736 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
6737 let field0 = serde_json::from_value::<Field0>(
6738 elements
6739 .pop()
6740 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
6741 )
6742 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
6743
6744 Ok(Self {
6745 block_id: field0.value,
6746 })
6747 } else if let Ok(object) = AsObject::deserialize(&temp) {
6748 Ok(Self {
6749 block_id: object.block_id.value,
6750 })
6751 } else {
6752 Err(serde::de::Error::custom("invalid sequence length"))
6753 }
6754 }
6755}
6756
6757impl Serialize for GetClassAtRequest {
6758 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6759 #[derive(Serialize)]
6760 struct AsObject<'a> {
6761 block_id: Field0<'a>,
6762 contract_address: Field1<'a>,
6763 }
6764
6765 #[derive(Serialize)]
6766 #[serde(transparent)]
6767 struct Field0<'a> {
6768 pub value: &'a BlockId,
6769 }
6770
6771 #[serde_as]
6772 #[derive(Serialize)]
6773 #[serde(transparent)]
6774 struct Field1<'a> {
6775 #[serde_as(as = "UfeHex")]
6776 pub value: &'a Felt,
6777 }
6778
6779 AsObject::serialize(
6780 &AsObject {
6781 block_id: Field0 {
6782 value: &self.block_id,
6783 },
6784 contract_address: Field1 {
6785 value: &self.contract_address,
6786 },
6787 },
6788 serializer,
6789 )
6790 }
6791}
6792
6793impl Serialize for GetClassAtRequestRef<'_> {
6794 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6795 #[derive(Serialize)]
6796 struct AsObject<'a> {
6797 block_id: Field0<'a>,
6798 contract_address: Field1<'a>,
6799 }
6800
6801 #[derive(Serialize)]
6802 #[serde(transparent)]
6803 struct Field0<'a> {
6804 pub value: &'a BlockId,
6805 }
6806
6807 #[serde_as]
6808 #[derive(Serialize)]
6809 #[serde(transparent)]
6810 struct Field1<'a> {
6811 #[serde_as(as = "UfeHex")]
6812 pub value: &'a Felt,
6813 }
6814
6815 AsObject::serialize(
6816 &AsObject {
6817 block_id: Field0 {
6818 value: self.block_id,
6819 },
6820 contract_address: Field1 {
6821 value: self.contract_address,
6822 },
6823 },
6824 serializer,
6825 )
6826 }
6827}
6828
6829impl<'de> Deserialize<'de> for GetClassAtRequest {
6830 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6831 #[derive(Deserialize)]
6832 struct AsObject {
6833 block_id: Field0,
6834 contract_address: Field1,
6835 }
6836
6837 #[derive(Deserialize)]
6838 #[serde(transparent)]
6839 struct Field0 {
6840 pub value: BlockId,
6841 }
6842
6843 #[serde_as]
6844 #[derive(Deserialize)]
6845 #[serde(transparent)]
6846 struct Field1 {
6847 #[serde_as(as = "UfeHex")]
6848 pub value: Felt,
6849 }
6850
6851 let temp = serde_json::Value::deserialize(deserializer)?;
6852
6853 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
6854 let field1 = serde_json::from_value::<Field1>(
6855 elements
6856 .pop()
6857 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
6858 )
6859 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
6860 let field0 = serde_json::from_value::<Field0>(
6861 elements
6862 .pop()
6863 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
6864 )
6865 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
6866
6867 Ok(Self {
6868 block_id: field0.value,
6869 contract_address: field1.value,
6870 })
6871 } else if let Ok(object) = AsObject::deserialize(&temp) {
6872 Ok(Self {
6873 block_id: object.block_id.value,
6874 contract_address: object.contract_address.value,
6875 })
6876 } else {
6877 Err(serde::de::Error::custom("invalid sequence length"))
6878 }
6879 }
6880}
6881
6882impl Serialize for GetClassHashAtRequest {
6883 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6884 #[derive(Serialize)]
6885 struct AsObject<'a> {
6886 block_id: Field0<'a>,
6887 contract_address: Field1<'a>,
6888 }
6889
6890 #[derive(Serialize)]
6891 #[serde(transparent)]
6892 struct Field0<'a> {
6893 pub value: &'a BlockId,
6894 }
6895
6896 #[serde_as]
6897 #[derive(Serialize)]
6898 #[serde(transparent)]
6899 struct Field1<'a> {
6900 #[serde_as(as = "UfeHex")]
6901 pub value: &'a Felt,
6902 }
6903
6904 AsObject::serialize(
6905 &AsObject {
6906 block_id: Field0 {
6907 value: &self.block_id,
6908 },
6909 contract_address: Field1 {
6910 value: &self.contract_address,
6911 },
6912 },
6913 serializer,
6914 )
6915 }
6916}
6917
6918impl Serialize for GetClassHashAtRequestRef<'_> {
6919 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6920 #[derive(Serialize)]
6921 struct AsObject<'a> {
6922 block_id: Field0<'a>,
6923 contract_address: Field1<'a>,
6924 }
6925
6926 #[derive(Serialize)]
6927 #[serde(transparent)]
6928 struct Field0<'a> {
6929 pub value: &'a BlockId,
6930 }
6931
6932 #[serde_as]
6933 #[derive(Serialize)]
6934 #[serde(transparent)]
6935 struct Field1<'a> {
6936 #[serde_as(as = "UfeHex")]
6937 pub value: &'a Felt,
6938 }
6939
6940 AsObject::serialize(
6941 &AsObject {
6942 block_id: Field0 {
6943 value: self.block_id,
6944 },
6945 contract_address: Field1 {
6946 value: self.contract_address,
6947 },
6948 },
6949 serializer,
6950 )
6951 }
6952}
6953
6954impl<'de> Deserialize<'de> for GetClassHashAtRequest {
6955 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6956 #[derive(Deserialize)]
6957 struct AsObject {
6958 block_id: Field0,
6959 contract_address: Field1,
6960 }
6961
6962 #[derive(Deserialize)]
6963 #[serde(transparent)]
6964 struct Field0 {
6965 pub value: BlockId,
6966 }
6967
6968 #[serde_as]
6969 #[derive(Deserialize)]
6970 #[serde(transparent)]
6971 struct Field1 {
6972 #[serde_as(as = "UfeHex")]
6973 pub value: Felt,
6974 }
6975
6976 let temp = serde_json::Value::deserialize(deserializer)?;
6977
6978 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
6979 let field1 = serde_json::from_value::<Field1>(
6980 elements
6981 .pop()
6982 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
6983 )
6984 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
6985 let field0 = serde_json::from_value::<Field0>(
6986 elements
6987 .pop()
6988 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
6989 )
6990 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
6991
6992 Ok(Self {
6993 block_id: field0.value,
6994 contract_address: field1.value,
6995 })
6996 } else if let Ok(object) = AsObject::deserialize(&temp) {
6997 Ok(Self {
6998 block_id: object.block_id.value,
6999 contract_address: object.contract_address.value,
7000 })
7001 } else {
7002 Err(serde::de::Error::custom("invalid sequence length"))
7003 }
7004 }
7005}
7006
7007impl Serialize for GetClassRequest {
7008 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7009 #[derive(Serialize)]
7010 struct AsObject<'a> {
7011 block_id: Field0<'a>,
7012 class_hash: Field1<'a>,
7013 }
7014
7015 #[derive(Serialize)]
7016 #[serde(transparent)]
7017 struct Field0<'a> {
7018 pub value: &'a BlockId,
7019 }
7020
7021 #[serde_as]
7022 #[derive(Serialize)]
7023 #[serde(transparent)]
7024 struct Field1<'a> {
7025 #[serde_as(as = "UfeHex")]
7026 pub value: &'a Felt,
7027 }
7028
7029 AsObject::serialize(
7030 &AsObject {
7031 block_id: Field0 {
7032 value: &self.block_id,
7033 },
7034 class_hash: Field1 {
7035 value: &self.class_hash,
7036 },
7037 },
7038 serializer,
7039 )
7040 }
7041}
7042
7043impl Serialize for GetClassRequestRef<'_> {
7044 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7045 #[derive(Serialize)]
7046 struct AsObject<'a> {
7047 block_id: Field0<'a>,
7048 class_hash: Field1<'a>,
7049 }
7050
7051 #[derive(Serialize)]
7052 #[serde(transparent)]
7053 struct Field0<'a> {
7054 pub value: &'a BlockId,
7055 }
7056
7057 #[serde_as]
7058 #[derive(Serialize)]
7059 #[serde(transparent)]
7060 struct Field1<'a> {
7061 #[serde_as(as = "UfeHex")]
7062 pub value: &'a Felt,
7063 }
7064
7065 AsObject::serialize(
7066 &AsObject {
7067 block_id: Field0 {
7068 value: self.block_id,
7069 },
7070 class_hash: Field1 {
7071 value: self.class_hash,
7072 },
7073 },
7074 serializer,
7075 )
7076 }
7077}
7078
7079impl<'de> Deserialize<'de> for GetClassRequest {
7080 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7081 #[derive(Deserialize)]
7082 struct AsObject {
7083 block_id: Field0,
7084 class_hash: Field1,
7085 }
7086
7087 #[derive(Deserialize)]
7088 #[serde(transparent)]
7089 struct Field0 {
7090 pub value: BlockId,
7091 }
7092
7093 #[serde_as]
7094 #[derive(Deserialize)]
7095 #[serde(transparent)]
7096 struct Field1 {
7097 #[serde_as(as = "UfeHex")]
7098 pub value: Felt,
7099 }
7100
7101 let temp = serde_json::Value::deserialize(deserializer)?;
7102
7103 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
7104 let field1 = serde_json::from_value::<Field1>(
7105 elements
7106 .pop()
7107 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
7108 )
7109 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
7110 let field0 = serde_json::from_value::<Field0>(
7111 elements
7112 .pop()
7113 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
7114 )
7115 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
7116
7117 Ok(Self {
7118 block_id: field0.value,
7119 class_hash: field1.value,
7120 })
7121 } else if let Ok(object) = AsObject::deserialize(&temp) {
7122 Ok(Self {
7123 block_id: object.block_id.value,
7124 class_hash: object.class_hash.value,
7125 })
7126 } else {
7127 Err(serde::de::Error::custom("invalid sequence length"))
7128 }
7129 }
7130}
7131
7132impl Serialize for GetEventsRequest {
7133 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7134 #[derive(Serialize)]
7135 struct AsObject<'a> {
7136 filter: Field0<'a>,
7137 }
7138
7139 #[derive(Serialize)]
7140 #[serde(transparent)]
7141 struct Field0<'a> {
7142 pub value: &'a EventFilterWithPage,
7143 }
7144
7145 AsObject::serialize(
7146 &AsObject {
7147 filter: Field0 {
7148 value: &self.filter,
7149 },
7150 },
7151 serializer,
7152 )
7153 }
7154}
7155
7156impl Serialize for GetEventsRequestRef<'_> {
7157 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7158 #[derive(Serialize)]
7159 struct AsObject<'a> {
7160 filter: Field0<'a>,
7161 }
7162
7163 #[derive(Serialize)]
7164 #[serde(transparent)]
7165 struct Field0<'a> {
7166 pub value: &'a EventFilterWithPage,
7167 }
7168
7169 AsObject::serialize(
7170 &AsObject {
7171 filter: Field0 { value: self.filter },
7172 },
7173 serializer,
7174 )
7175 }
7176}
7177
7178impl<'de> Deserialize<'de> for GetEventsRequest {
7179 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7180 #[derive(Deserialize)]
7181 struct AsObject {
7182 filter: Field0,
7183 }
7184
7185 #[derive(Deserialize)]
7186 #[serde(transparent)]
7187 struct Field0 {
7188 pub value: EventFilterWithPage,
7189 }
7190
7191 let temp = serde_json::Value::deserialize(deserializer)?;
7192
7193 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
7194 let field0 = serde_json::from_value::<Field0>(
7195 elements
7196 .pop()
7197 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
7198 )
7199 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
7200
7201 Ok(Self {
7202 filter: field0.value,
7203 })
7204 } else if let Ok(object) = AsObject::deserialize(&temp) {
7205 Ok(Self {
7206 filter: object.filter.value,
7207 })
7208 } else {
7209 Err(serde::de::Error::custom("invalid sequence length"))
7210 }
7211 }
7212}
7213
7214impl Serialize for GetMessagesStatusRequest {
7215 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7216 #[derive(Serialize)]
7217 struct AsObject<'a> {
7218 transaction_hash: Field0<'a>,
7219 }
7220
7221 #[derive(Serialize)]
7222 #[serde(transparent)]
7223 struct Field0<'a> {
7224 pub value: &'a Hash256,
7225 }
7226
7227 AsObject::serialize(
7228 &AsObject {
7229 transaction_hash: Field0 {
7230 value: &self.transaction_hash,
7231 },
7232 },
7233 serializer,
7234 )
7235 }
7236}
7237
7238impl Serialize for GetMessagesStatusRequestRef<'_> {
7239 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7240 #[derive(Serialize)]
7241 struct AsObject<'a> {
7242 transaction_hash: Field0<'a>,
7243 }
7244
7245 #[derive(Serialize)]
7246 #[serde(transparent)]
7247 struct Field0<'a> {
7248 pub value: &'a Hash256,
7249 }
7250
7251 AsObject::serialize(
7252 &AsObject {
7253 transaction_hash: Field0 {
7254 value: self.transaction_hash,
7255 },
7256 },
7257 serializer,
7258 )
7259 }
7260}
7261
7262impl<'de> Deserialize<'de> for GetMessagesStatusRequest {
7263 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7264 #[derive(Deserialize)]
7265 struct AsObject {
7266 transaction_hash: Field0,
7267 }
7268
7269 #[derive(Deserialize)]
7270 #[serde(transparent)]
7271 struct Field0 {
7272 pub value: Hash256,
7273 }
7274
7275 let temp = serde_json::Value::deserialize(deserializer)?;
7276
7277 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
7278 let field0 = serde_json::from_value::<Field0>(
7279 elements
7280 .pop()
7281 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
7282 )
7283 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
7284
7285 Ok(Self {
7286 transaction_hash: field0.value,
7287 })
7288 } else if let Ok(object) = AsObject::deserialize(&temp) {
7289 Ok(Self {
7290 transaction_hash: object.transaction_hash.value,
7291 })
7292 } else {
7293 Err(serde::de::Error::custom("invalid sequence length"))
7294 }
7295 }
7296}
7297
7298impl Serialize for GetNonceRequest {
7299 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7300 #[derive(Serialize)]
7301 struct AsObject<'a> {
7302 block_id: Field0<'a>,
7303 contract_address: Field1<'a>,
7304 }
7305
7306 #[derive(Serialize)]
7307 #[serde(transparent)]
7308 struct Field0<'a> {
7309 pub value: &'a BlockId,
7310 }
7311
7312 #[serde_as]
7313 #[derive(Serialize)]
7314 #[serde(transparent)]
7315 struct Field1<'a> {
7316 #[serde_as(as = "UfeHex")]
7317 pub value: &'a Felt,
7318 }
7319
7320 AsObject::serialize(
7321 &AsObject {
7322 block_id: Field0 {
7323 value: &self.block_id,
7324 },
7325 contract_address: Field1 {
7326 value: &self.contract_address,
7327 },
7328 },
7329 serializer,
7330 )
7331 }
7332}
7333
7334impl Serialize for GetNonceRequestRef<'_> {
7335 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7336 #[derive(Serialize)]
7337 struct AsObject<'a> {
7338 block_id: Field0<'a>,
7339 contract_address: Field1<'a>,
7340 }
7341
7342 #[derive(Serialize)]
7343 #[serde(transparent)]
7344 struct Field0<'a> {
7345 pub value: &'a BlockId,
7346 }
7347
7348 #[serde_as]
7349 #[derive(Serialize)]
7350 #[serde(transparent)]
7351 struct Field1<'a> {
7352 #[serde_as(as = "UfeHex")]
7353 pub value: &'a Felt,
7354 }
7355
7356 AsObject::serialize(
7357 &AsObject {
7358 block_id: Field0 {
7359 value: self.block_id,
7360 },
7361 contract_address: Field1 {
7362 value: self.contract_address,
7363 },
7364 },
7365 serializer,
7366 )
7367 }
7368}
7369
7370impl<'de> Deserialize<'de> for GetNonceRequest {
7371 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7372 #[derive(Deserialize)]
7373 struct AsObject {
7374 block_id: Field0,
7375 contract_address: Field1,
7376 }
7377
7378 #[derive(Deserialize)]
7379 #[serde(transparent)]
7380 struct Field0 {
7381 pub value: BlockId,
7382 }
7383
7384 #[serde_as]
7385 #[derive(Deserialize)]
7386 #[serde(transparent)]
7387 struct Field1 {
7388 #[serde_as(as = "UfeHex")]
7389 pub value: Felt,
7390 }
7391
7392 let temp = serde_json::Value::deserialize(deserializer)?;
7393
7394 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
7395 let field1 = serde_json::from_value::<Field1>(
7396 elements
7397 .pop()
7398 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
7399 )
7400 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
7401 let field0 = serde_json::from_value::<Field0>(
7402 elements
7403 .pop()
7404 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
7405 )
7406 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
7407
7408 Ok(Self {
7409 block_id: field0.value,
7410 contract_address: field1.value,
7411 })
7412 } else if let Ok(object) = AsObject::deserialize(&temp) {
7413 Ok(Self {
7414 block_id: object.block_id.value,
7415 contract_address: object.contract_address.value,
7416 })
7417 } else {
7418 Err(serde::de::Error::custom("invalid sequence length"))
7419 }
7420 }
7421}
7422
7423impl Serialize for GetStateUpdateRequest {
7424 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7425 #[derive(Serialize)]
7426 struct AsObject<'a> {
7427 block_id: Field0<'a>,
7428 }
7429
7430 #[derive(Serialize)]
7431 #[serde(transparent)]
7432 struct Field0<'a> {
7433 pub value: &'a BlockId,
7434 }
7435
7436 AsObject::serialize(
7437 &AsObject {
7438 block_id: Field0 {
7439 value: &self.block_id,
7440 },
7441 },
7442 serializer,
7443 )
7444 }
7445}
7446
7447impl Serialize for GetStateUpdateRequestRef<'_> {
7448 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7449 #[derive(Serialize)]
7450 struct AsObject<'a> {
7451 block_id: Field0<'a>,
7452 }
7453
7454 #[derive(Serialize)]
7455 #[serde(transparent)]
7456 struct Field0<'a> {
7457 pub value: &'a BlockId,
7458 }
7459
7460 AsObject::serialize(
7461 &AsObject {
7462 block_id: Field0 {
7463 value: self.block_id,
7464 },
7465 },
7466 serializer,
7467 )
7468 }
7469}
7470
7471impl<'de> Deserialize<'de> for GetStateUpdateRequest {
7472 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7473 #[derive(Deserialize)]
7474 struct AsObject {
7475 block_id: Field0,
7476 }
7477
7478 #[derive(Deserialize)]
7479 #[serde(transparent)]
7480 struct Field0 {
7481 pub value: BlockId,
7482 }
7483
7484 let temp = serde_json::Value::deserialize(deserializer)?;
7485
7486 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
7487 let field0 = serde_json::from_value::<Field0>(
7488 elements
7489 .pop()
7490 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
7491 )
7492 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
7493
7494 Ok(Self {
7495 block_id: field0.value,
7496 })
7497 } else if let Ok(object) = AsObject::deserialize(&temp) {
7498 Ok(Self {
7499 block_id: object.block_id.value,
7500 })
7501 } else {
7502 Err(serde::de::Error::custom("invalid sequence length"))
7503 }
7504 }
7505}
7506
7507impl Serialize for GetStorageAtRequest {
7508 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7509 #[derive(Serialize)]
7510 struct AsObject<'a> {
7511 contract_address: Field0<'a>,
7512 key: Field1<'a>,
7513 block_id: Field2<'a>,
7514 }
7515
7516 #[serde_as]
7517 #[derive(Serialize)]
7518 #[serde(transparent)]
7519 struct Field0<'a> {
7520 #[serde_as(as = "UfeHex")]
7521 pub value: &'a Felt,
7522 }
7523
7524 #[serde_as]
7525 #[derive(Serialize)]
7526 #[serde(transparent)]
7527 struct Field1<'a> {
7528 #[serde_as(as = "UfeHex")]
7529 pub value: &'a Felt,
7530 }
7531
7532 #[derive(Serialize)]
7533 #[serde(transparent)]
7534 struct Field2<'a> {
7535 pub value: &'a BlockId,
7536 }
7537
7538 AsObject::serialize(
7539 &AsObject {
7540 contract_address: Field0 {
7541 value: &self.contract_address,
7542 },
7543 key: Field1 { value: &self.key },
7544 block_id: Field2 {
7545 value: &self.block_id,
7546 },
7547 },
7548 serializer,
7549 )
7550 }
7551}
7552
7553impl Serialize for GetStorageAtRequestRef<'_> {
7554 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7555 #[derive(Serialize)]
7556 struct AsObject<'a> {
7557 contract_address: Field0<'a>,
7558 key: Field1<'a>,
7559 block_id: Field2<'a>,
7560 }
7561
7562 #[serde_as]
7563 #[derive(Serialize)]
7564 #[serde(transparent)]
7565 struct Field0<'a> {
7566 #[serde_as(as = "UfeHex")]
7567 pub value: &'a Felt,
7568 }
7569
7570 #[serde_as]
7571 #[derive(Serialize)]
7572 #[serde(transparent)]
7573 struct Field1<'a> {
7574 #[serde_as(as = "UfeHex")]
7575 pub value: &'a Felt,
7576 }
7577
7578 #[derive(Serialize)]
7579 #[serde(transparent)]
7580 struct Field2<'a> {
7581 pub value: &'a BlockId,
7582 }
7583
7584 AsObject::serialize(
7585 &AsObject {
7586 contract_address: Field0 {
7587 value: self.contract_address,
7588 },
7589 key: Field1 { value: self.key },
7590 block_id: Field2 {
7591 value: self.block_id,
7592 },
7593 },
7594 serializer,
7595 )
7596 }
7597}
7598
7599impl<'de> Deserialize<'de> for GetStorageAtRequest {
7600 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7601 #[derive(Deserialize)]
7602 struct AsObject {
7603 contract_address: Field0,
7604 key: Field1,
7605 block_id: Field2,
7606 }
7607
7608 #[serde_as]
7609 #[derive(Deserialize)]
7610 #[serde(transparent)]
7611 struct Field0 {
7612 #[serde_as(as = "UfeHex")]
7613 pub value: Felt,
7614 }
7615
7616 #[serde_as]
7617 #[derive(Deserialize)]
7618 #[serde(transparent)]
7619 struct Field1 {
7620 #[serde_as(as = "UfeHex")]
7621 pub value: Felt,
7622 }
7623
7624 #[derive(Deserialize)]
7625 #[serde(transparent)]
7626 struct Field2 {
7627 pub value: BlockId,
7628 }
7629
7630 let temp = serde_json::Value::deserialize(deserializer)?;
7631
7632 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
7633 let field2 = serde_json::from_value::<Field2>(
7634 elements
7635 .pop()
7636 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
7637 )
7638 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
7639 let field1 = serde_json::from_value::<Field1>(
7640 elements
7641 .pop()
7642 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
7643 )
7644 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
7645 let field0 = serde_json::from_value::<Field0>(
7646 elements
7647 .pop()
7648 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
7649 )
7650 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
7651
7652 Ok(Self {
7653 contract_address: field0.value,
7654 key: field1.value,
7655 block_id: field2.value,
7656 })
7657 } else if let Ok(object) = AsObject::deserialize(&temp) {
7658 Ok(Self {
7659 contract_address: object.contract_address.value,
7660 key: object.key.value,
7661 block_id: object.block_id.value,
7662 })
7663 } else {
7664 Err(serde::de::Error::custom("invalid sequence length"))
7665 }
7666 }
7667}
7668
7669impl Serialize for GetStorageProofRequest {
7670 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7671 #[derive(Serialize)]
7672 struct AsObject<'a> {
7673 block_id: Field0<'a>,
7674 #[serde(skip_serializing_if = "Option::is_none")]
7675 class_hashes: Option<Field1<'a>>,
7676 #[serde(skip_serializing_if = "Option::is_none")]
7677 contract_addresses: Option<Field2<'a>>,
7678 #[serde(skip_serializing_if = "Option::is_none")]
7679 contracts_storage_keys: Option<Field3<'a>>,
7680 }
7681
7682 #[derive(Serialize)]
7683 #[serde(transparent)]
7684 struct Field0<'a> {
7685 pub value: &'a ConfirmedBlockId,
7686 }
7687
7688 #[serde_as]
7689 #[derive(Serialize)]
7690 #[serde(transparent)]
7691 struct Field1<'a> {
7692 #[serde_as(as = "[UfeHex]")]
7693 pub value: &'a [Felt],
7694 }
7695
7696 #[serde_as]
7697 #[derive(Serialize)]
7698 #[serde(transparent)]
7699 struct Field2<'a> {
7700 #[serde_as(as = "[UfeHex]")]
7701 pub value: &'a [Felt],
7702 }
7703
7704 #[derive(Serialize)]
7705 #[serde(transparent)]
7706 struct Field3<'a> {
7707 pub value: &'a [ContractStorageKeys],
7708 }
7709
7710 AsObject::serialize(
7711 &AsObject {
7712 block_id: Field0 {
7713 value: &self.block_id,
7714 },
7715 class_hashes: self.class_hashes.as_ref().map(|f| Field1 { value: f }),
7716 contract_addresses: self
7717 .contract_addresses
7718 .as_ref()
7719 .map(|f| Field2 { value: f }),
7720 contracts_storage_keys: self
7721 .contracts_storage_keys
7722 .as_ref()
7723 .map(|f| Field3 { value: f }),
7724 },
7725 serializer,
7726 )
7727 }
7728}
7729
7730impl Serialize for GetStorageProofRequestRef<'_> {
7731 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7732 #[derive(Serialize)]
7733 struct AsObject<'a> {
7734 block_id: Field0<'a>,
7735 #[serde(skip_serializing_if = "Option::is_none")]
7736 class_hashes: Option<Field1<'a>>,
7737 #[serde(skip_serializing_if = "Option::is_none")]
7738 contract_addresses: Option<Field2<'a>>,
7739 #[serde(skip_serializing_if = "Option::is_none")]
7740 contracts_storage_keys: Option<Field3<'a>>,
7741 }
7742
7743 #[derive(Serialize)]
7744 #[serde(transparent)]
7745 struct Field0<'a> {
7746 pub value: &'a ConfirmedBlockId,
7747 }
7748
7749 #[serde_as]
7750 #[derive(Serialize)]
7751 #[serde(transparent)]
7752 struct Field1<'a> {
7753 #[serde_as(as = "[UfeHex]")]
7754 pub value: &'a [Felt],
7755 }
7756
7757 #[serde_as]
7758 #[derive(Serialize)]
7759 #[serde(transparent)]
7760 struct Field2<'a> {
7761 #[serde_as(as = "[UfeHex]")]
7762 pub value: &'a [Felt],
7763 }
7764
7765 #[derive(Serialize)]
7766 #[serde(transparent)]
7767 struct Field3<'a> {
7768 pub value: &'a [ContractStorageKeys],
7769 }
7770
7771 AsObject::serialize(
7772 &AsObject {
7773 block_id: Field0 {
7774 value: self.block_id,
7775 },
7776 class_hashes: self.class_hashes.as_ref().map(|f| Field1 { value: f }),
7777 contract_addresses: self
7778 .contract_addresses
7779 .as_ref()
7780 .map(|f| Field2 { value: f }),
7781 contracts_storage_keys: self
7782 .contracts_storage_keys
7783 .as_ref()
7784 .map(|f| Field3 { value: f }),
7785 },
7786 serializer,
7787 )
7788 }
7789}
7790
7791impl<'de> Deserialize<'de> for GetStorageProofRequest {
7792 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7793 #[derive(Deserialize)]
7794 struct AsObject {
7795 block_id: Field0,
7796 #[serde(skip_serializing_if = "Option::is_none")]
7797 class_hashes: Option<Field1>,
7798 #[serde(skip_serializing_if = "Option::is_none")]
7799 contract_addresses: Option<Field2>,
7800 #[serde(skip_serializing_if = "Option::is_none")]
7801 contracts_storage_keys: Option<Field3>,
7802 }
7803
7804 #[derive(Deserialize)]
7805 #[serde(transparent)]
7806 struct Field0 {
7807 pub value: ConfirmedBlockId,
7808 }
7809
7810 #[serde_as]
7811 #[derive(Deserialize)]
7812 #[serde(transparent)]
7813 struct Field1 {
7814 #[serde_as(as = "Vec<UfeHex>")]
7815 pub value: Vec<Felt>,
7816 }
7817
7818 #[serde_as]
7819 #[derive(Deserialize)]
7820 #[serde(transparent)]
7821 struct Field2 {
7822 #[serde_as(as = "Vec<UfeHex>")]
7823 pub value: Vec<Felt>,
7824 }
7825
7826 #[derive(Deserialize)]
7827 #[serde(transparent)]
7828 struct Field3 {
7829 pub value: Vec<ContractStorageKeys>,
7830 }
7831
7832 let temp = serde_json::Value::deserialize(deserializer)?;
7833
7834 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
7835 let element_count = elements.len();
7836
7837 let field3 = if element_count > 3 {
7838 Some(
7839 serde_json::from_value::<Field3>(elements.pop().unwrap()).map_err(|err| {
7840 serde::de::Error::custom(format!("failed to parse element: {}", err))
7841 })?,
7842 )
7843 } else {
7844 None
7845 };
7846 let field2 = if element_count > 2 {
7847 Some(
7848 serde_json::from_value::<Field2>(elements.pop().unwrap()).map_err(|err| {
7849 serde::de::Error::custom(format!("failed to parse element: {}", err))
7850 })?,
7851 )
7852 } else {
7853 None
7854 };
7855 let field1 = if element_count > 1 {
7856 Some(
7857 serde_json::from_value::<Field1>(elements.pop().unwrap()).map_err(|err| {
7858 serde::de::Error::custom(format!("failed to parse element: {}", err))
7859 })?,
7860 )
7861 } else {
7862 None
7863 };
7864 let field0 = serde_json::from_value::<Field0>(
7865 elements
7866 .pop()
7867 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
7868 )
7869 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
7870
7871 Ok(Self {
7872 block_id: field0.value,
7873 class_hashes: field1.map(|f| f.value),
7874 contract_addresses: field2.map(|f| f.value),
7875 contracts_storage_keys: field3.map(|f| f.value),
7876 })
7877 } else if let Ok(object) = AsObject::deserialize(&temp) {
7878 Ok(Self {
7879 block_id: object.block_id.value,
7880 class_hashes: object.class_hashes.map(|f| f.value),
7881 contract_addresses: object.contract_addresses.map(|f| f.value),
7882 contracts_storage_keys: object.contracts_storage_keys.map(|f| f.value),
7883 })
7884 } else {
7885 Err(serde::de::Error::custom("invalid sequence length"))
7886 }
7887 }
7888}
7889
7890impl Serialize for GetTransactionByBlockIdAndIndexRequest {
7891 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7892 #[derive(Serialize)]
7893 struct AsObject<'a> {
7894 block_id: Field0<'a>,
7895 index: Field1<'a>,
7896 }
7897
7898 #[derive(Serialize)]
7899 #[serde(transparent)]
7900 struct Field0<'a> {
7901 pub value: &'a BlockId,
7902 }
7903
7904 #[derive(Serialize)]
7905 #[serde(transparent)]
7906 struct Field1<'a> {
7907 pub value: &'a u64,
7908 }
7909
7910 AsObject::serialize(
7911 &AsObject {
7912 block_id: Field0 {
7913 value: &self.block_id,
7914 },
7915 index: Field1 { value: &self.index },
7916 },
7917 serializer,
7918 )
7919 }
7920}
7921
7922impl Serialize for GetTransactionByBlockIdAndIndexRequestRef<'_> {
7923 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7924 #[derive(Serialize)]
7925 struct AsObject<'a> {
7926 block_id: Field0<'a>,
7927 index: Field1<'a>,
7928 }
7929
7930 #[derive(Serialize)]
7931 #[serde(transparent)]
7932 struct Field0<'a> {
7933 pub value: &'a BlockId,
7934 }
7935
7936 #[derive(Serialize)]
7937 #[serde(transparent)]
7938 struct Field1<'a> {
7939 pub value: &'a u64,
7940 }
7941
7942 AsObject::serialize(
7943 &AsObject {
7944 block_id: Field0 {
7945 value: self.block_id,
7946 },
7947 index: Field1 { value: self.index },
7948 },
7949 serializer,
7950 )
7951 }
7952}
7953
7954impl<'de> Deserialize<'de> for GetTransactionByBlockIdAndIndexRequest {
7955 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7956 #[derive(Deserialize)]
7957 struct AsObject {
7958 block_id: Field0,
7959 index: Field1,
7960 }
7961
7962 #[derive(Deserialize)]
7963 #[serde(transparent)]
7964 struct Field0 {
7965 pub value: BlockId,
7966 }
7967
7968 #[derive(Deserialize)]
7969 #[serde(transparent)]
7970 struct Field1 {
7971 pub value: u64,
7972 }
7973
7974 let temp = serde_json::Value::deserialize(deserializer)?;
7975
7976 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
7977 let field1 = serde_json::from_value::<Field1>(
7978 elements
7979 .pop()
7980 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
7981 )
7982 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
7983 let field0 = serde_json::from_value::<Field0>(
7984 elements
7985 .pop()
7986 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
7987 )
7988 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
7989
7990 Ok(Self {
7991 block_id: field0.value,
7992 index: field1.value,
7993 })
7994 } else if let Ok(object) = AsObject::deserialize(&temp) {
7995 Ok(Self {
7996 block_id: object.block_id.value,
7997 index: object.index.value,
7998 })
7999 } else {
8000 Err(serde::de::Error::custom("invalid sequence length"))
8001 }
8002 }
8003}
8004
8005impl Serialize for GetTransactionByHashRequest {
8006 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8007 #[derive(Serialize)]
8008 struct AsObject<'a> {
8009 transaction_hash: Field0<'a>,
8010 }
8011
8012 #[serde_as]
8013 #[derive(Serialize)]
8014 #[serde(transparent)]
8015 struct Field0<'a> {
8016 #[serde_as(as = "UfeHex")]
8017 pub value: &'a Felt,
8018 }
8019
8020 AsObject::serialize(
8021 &AsObject {
8022 transaction_hash: Field0 {
8023 value: &self.transaction_hash,
8024 },
8025 },
8026 serializer,
8027 )
8028 }
8029}
8030
8031impl Serialize for GetTransactionByHashRequestRef<'_> {
8032 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8033 #[derive(Serialize)]
8034 struct AsObject<'a> {
8035 transaction_hash: Field0<'a>,
8036 }
8037
8038 #[serde_as]
8039 #[derive(Serialize)]
8040 #[serde(transparent)]
8041 struct Field0<'a> {
8042 #[serde_as(as = "UfeHex")]
8043 pub value: &'a Felt,
8044 }
8045
8046 AsObject::serialize(
8047 &AsObject {
8048 transaction_hash: Field0 {
8049 value: self.transaction_hash,
8050 },
8051 },
8052 serializer,
8053 )
8054 }
8055}
8056
8057impl<'de> Deserialize<'de> for GetTransactionByHashRequest {
8058 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8059 #[derive(Deserialize)]
8060 struct AsObject {
8061 transaction_hash: Field0,
8062 }
8063
8064 #[serde_as]
8065 #[derive(Deserialize)]
8066 #[serde(transparent)]
8067 struct Field0 {
8068 #[serde_as(as = "UfeHex")]
8069 pub value: Felt,
8070 }
8071
8072 let temp = serde_json::Value::deserialize(deserializer)?;
8073
8074 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
8075 let field0 = serde_json::from_value::<Field0>(
8076 elements
8077 .pop()
8078 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
8079 )
8080 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
8081
8082 Ok(Self {
8083 transaction_hash: field0.value,
8084 })
8085 } else if let Ok(object) = AsObject::deserialize(&temp) {
8086 Ok(Self {
8087 transaction_hash: object.transaction_hash.value,
8088 })
8089 } else {
8090 Err(serde::de::Error::custom("invalid sequence length"))
8091 }
8092 }
8093}
8094
8095impl Serialize for GetTransactionReceiptRequest {
8096 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8097 #[derive(Serialize)]
8098 struct AsObject<'a> {
8099 transaction_hash: Field0<'a>,
8100 }
8101
8102 #[serde_as]
8103 #[derive(Serialize)]
8104 #[serde(transparent)]
8105 struct Field0<'a> {
8106 #[serde_as(as = "UfeHex")]
8107 pub value: &'a Felt,
8108 }
8109
8110 AsObject::serialize(
8111 &AsObject {
8112 transaction_hash: Field0 {
8113 value: &self.transaction_hash,
8114 },
8115 },
8116 serializer,
8117 )
8118 }
8119}
8120
8121impl Serialize for GetTransactionReceiptRequestRef<'_> {
8122 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8123 #[derive(Serialize)]
8124 struct AsObject<'a> {
8125 transaction_hash: Field0<'a>,
8126 }
8127
8128 #[serde_as]
8129 #[derive(Serialize)]
8130 #[serde(transparent)]
8131 struct Field0<'a> {
8132 #[serde_as(as = "UfeHex")]
8133 pub value: &'a Felt,
8134 }
8135
8136 AsObject::serialize(
8137 &AsObject {
8138 transaction_hash: Field0 {
8139 value: self.transaction_hash,
8140 },
8141 },
8142 serializer,
8143 )
8144 }
8145}
8146
8147impl<'de> Deserialize<'de> for GetTransactionReceiptRequest {
8148 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8149 #[derive(Deserialize)]
8150 struct AsObject {
8151 transaction_hash: Field0,
8152 }
8153
8154 #[serde_as]
8155 #[derive(Deserialize)]
8156 #[serde(transparent)]
8157 struct Field0 {
8158 #[serde_as(as = "UfeHex")]
8159 pub value: Felt,
8160 }
8161
8162 let temp = serde_json::Value::deserialize(deserializer)?;
8163
8164 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
8165 let field0 = serde_json::from_value::<Field0>(
8166 elements
8167 .pop()
8168 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
8169 )
8170 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
8171
8172 Ok(Self {
8173 transaction_hash: field0.value,
8174 })
8175 } else if let Ok(object) = AsObject::deserialize(&temp) {
8176 Ok(Self {
8177 transaction_hash: object.transaction_hash.value,
8178 })
8179 } else {
8180 Err(serde::de::Error::custom("invalid sequence length"))
8181 }
8182 }
8183}
8184
8185impl Serialize for GetTransactionStatusRequest {
8186 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8187 #[derive(Serialize)]
8188 struct AsObject<'a> {
8189 transaction_hash: Field0<'a>,
8190 }
8191
8192 #[serde_as]
8193 #[derive(Serialize)]
8194 #[serde(transparent)]
8195 struct Field0<'a> {
8196 #[serde_as(as = "UfeHex")]
8197 pub value: &'a Felt,
8198 }
8199
8200 AsObject::serialize(
8201 &AsObject {
8202 transaction_hash: Field0 {
8203 value: &self.transaction_hash,
8204 },
8205 },
8206 serializer,
8207 )
8208 }
8209}
8210
8211impl Serialize for GetTransactionStatusRequestRef<'_> {
8212 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8213 #[derive(Serialize)]
8214 struct AsObject<'a> {
8215 transaction_hash: Field0<'a>,
8216 }
8217
8218 #[serde_as]
8219 #[derive(Serialize)]
8220 #[serde(transparent)]
8221 struct Field0<'a> {
8222 #[serde_as(as = "UfeHex")]
8223 pub value: &'a Felt,
8224 }
8225
8226 AsObject::serialize(
8227 &AsObject {
8228 transaction_hash: Field0 {
8229 value: self.transaction_hash,
8230 },
8231 },
8232 serializer,
8233 )
8234 }
8235}
8236
8237impl<'de> Deserialize<'de> for GetTransactionStatusRequest {
8238 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8239 #[derive(Deserialize)]
8240 struct AsObject {
8241 transaction_hash: Field0,
8242 }
8243
8244 #[serde_as]
8245 #[derive(Deserialize)]
8246 #[serde(transparent)]
8247 struct Field0 {
8248 #[serde_as(as = "UfeHex")]
8249 pub value: Felt,
8250 }
8251
8252 let temp = serde_json::Value::deserialize(deserializer)?;
8253
8254 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
8255 let field0 = serde_json::from_value::<Field0>(
8256 elements
8257 .pop()
8258 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
8259 )
8260 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
8261
8262 Ok(Self {
8263 transaction_hash: field0.value,
8264 })
8265 } else if let Ok(object) = AsObject::deserialize(&temp) {
8266 Ok(Self {
8267 transaction_hash: object.transaction_hash.value,
8268 })
8269 } else {
8270 Err(serde::de::Error::custom("invalid sequence length"))
8271 }
8272 }
8273}
8274
8275impl Serialize for SimulateTransactionsRequest {
8276 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8277 #[derive(Serialize)]
8278 struct AsObject<'a> {
8279 block_id: Field0<'a>,
8280 transactions: Field1<'a>,
8281 simulation_flags: Field2<'a>,
8282 }
8283
8284 #[derive(Serialize)]
8285 #[serde(transparent)]
8286 struct Field0<'a> {
8287 pub value: &'a BlockId,
8288 }
8289
8290 #[derive(Serialize)]
8291 #[serde(transparent)]
8292 struct Field1<'a> {
8293 pub value: &'a [BroadcastedTransaction],
8294 }
8295
8296 #[derive(Serialize)]
8297 #[serde(transparent)]
8298 struct Field2<'a> {
8299 pub value: &'a [SimulationFlag],
8300 }
8301
8302 AsObject::serialize(
8303 &AsObject {
8304 block_id: Field0 {
8305 value: &self.block_id,
8306 },
8307 transactions: Field1 {
8308 value: &self.transactions,
8309 },
8310 simulation_flags: Field2 {
8311 value: &self.simulation_flags,
8312 },
8313 },
8314 serializer,
8315 )
8316 }
8317}
8318
8319impl Serialize for SimulateTransactionsRequestRef<'_> {
8320 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8321 #[derive(Serialize)]
8322 struct AsObject<'a> {
8323 block_id: Field0<'a>,
8324 transactions: Field1<'a>,
8325 simulation_flags: Field2<'a>,
8326 }
8327
8328 #[derive(Serialize)]
8329 #[serde(transparent)]
8330 struct Field0<'a> {
8331 pub value: &'a BlockId,
8332 }
8333
8334 #[derive(Serialize)]
8335 #[serde(transparent)]
8336 struct Field1<'a> {
8337 pub value: &'a [BroadcastedTransaction],
8338 }
8339
8340 #[derive(Serialize)]
8341 #[serde(transparent)]
8342 struct Field2<'a> {
8343 pub value: &'a [SimulationFlag],
8344 }
8345
8346 AsObject::serialize(
8347 &AsObject {
8348 block_id: Field0 {
8349 value: self.block_id,
8350 },
8351 transactions: Field1 {
8352 value: self.transactions,
8353 },
8354 simulation_flags: Field2 {
8355 value: self.simulation_flags,
8356 },
8357 },
8358 serializer,
8359 )
8360 }
8361}
8362
8363impl<'de> Deserialize<'de> for SimulateTransactionsRequest {
8364 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8365 #[derive(Deserialize)]
8366 struct AsObject {
8367 block_id: Field0,
8368 transactions: Field1,
8369 simulation_flags: Field2,
8370 }
8371
8372 #[derive(Deserialize)]
8373 #[serde(transparent)]
8374 struct Field0 {
8375 pub value: BlockId,
8376 }
8377
8378 #[derive(Deserialize)]
8379 #[serde(transparent)]
8380 struct Field1 {
8381 pub value: Vec<BroadcastedTransaction>,
8382 }
8383
8384 #[derive(Deserialize)]
8385 #[serde(transparent)]
8386 struct Field2 {
8387 pub value: Vec<SimulationFlag>,
8388 }
8389
8390 let temp = serde_json::Value::deserialize(deserializer)?;
8391
8392 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
8393 let field2 = serde_json::from_value::<Field2>(
8394 elements
8395 .pop()
8396 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
8397 )
8398 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
8399 let field1 = serde_json::from_value::<Field1>(
8400 elements
8401 .pop()
8402 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
8403 )
8404 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
8405 let field0 = serde_json::from_value::<Field0>(
8406 elements
8407 .pop()
8408 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
8409 )
8410 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
8411
8412 Ok(Self {
8413 block_id: field0.value,
8414 transactions: field1.value,
8415 simulation_flags: field2.value,
8416 })
8417 } else if let Ok(object) = AsObject::deserialize(&temp) {
8418 Ok(Self {
8419 block_id: object.block_id.value,
8420 transactions: object.transactions.value,
8421 simulation_flags: object.simulation_flags.value,
8422 })
8423 } else {
8424 Err(serde::de::Error::custom("invalid sequence length"))
8425 }
8426 }
8427}
8428
8429impl Serialize for SpecVersionRequest {
8430 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8431 use serde::ser::SerializeSeq;
8432
8433 let seq = serializer.serialize_seq(Some(0))?;
8434 seq.end()
8435 }
8436}
8437
8438impl<'de> Deserialize<'de> for SpecVersionRequest {
8439 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8440 let elements = Vec::<()>::deserialize(deserializer)?;
8441 if !elements.is_empty() {
8442 return Err(serde::de::Error::custom("invalid sequence length"));
8443 }
8444 Ok(Self)
8445 }
8446}
8447
8448impl Serialize for SubscribeEventsRequest {
8449 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8450 #[derive(Serialize)]
8451 struct AsObject<'a> {
8452 #[serde(skip_serializing_if = "Option::is_none")]
8453 from_address: Option<Field0<'a>>,
8454 #[serde(skip_serializing_if = "Option::is_none")]
8455 keys: Option<Field1<'a>>,
8456 #[serde(skip_serializing_if = "Option::is_none")]
8457 block_id: Option<Field2<'a>>,
8458 }
8459
8460 #[serde_as]
8461 #[derive(Serialize)]
8462 #[serde(transparent)]
8463 struct Field0<'a> {
8464 #[serde_as(as = "UfeHex")]
8465 pub value: &'a Felt,
8466 }
8467
8468 #[serde_as]
8469 #[derive(Serialize)]
8470 #[serde(transparent)]
8471 struct Field1<'a> {
8472 #[serde_as(as = "[Vec<UfeHex>]")]
8473 pub value: &'a [Vec<Felt>],
8474 }
8475
8476 #[derive(Serialize)]
8477 #[serde(transparent)]
8478 struct Field2<'a> {
8479 pub value: &'a ConfirmedBlockId,
8480 }
8481
8482 AsObject::serialize(
8483 &AsObject {
8484 from_address: self.from_address.as_ref().map(|f| Field0 { value: f }),
8485 keys: self.keys.as_ref().map(|f| Field1 { value: f }),
8486 block_id: self.block_id.as_ref().map(|f| Field2 { value: f }),
8487 },
8488 serializer,
8489 )
8490 }
8491}
8492
8493impl Serialize for SubscribeEventsRequestRef<'_> {
8494 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8495 #[derive(Serialize)]
8496 struct AsObject<'a> {
8497 #[serde(skip_serializing_if = "Option::is_none")]
8498 from_address: Option<Field0<'a>>,
8499 #[serde(skip_serializing_if = "Option::is_none")]
8500 keys: Option<Field1<'a>>,
8501 #[serde(skip_serializing_if = "Option::is_none")]
8502 block_id: Option<Field2<'a>>,
8503 }
8504
8505 #[serde_as]
8506 #[derive(Serialize)]
8507 #[serde(transparent)]
8508 struct Field0<'a> {
8509 #[serde_as(as = "UfeHex")]
8510 pub value: &'a Felt,
8511 }
8512
8513 #[serde_as]
8514 #[derive(Serialize)]
8515 #[serde(transparent)]
8516 struct Field1<'a> {
8517 #[serde_as(as = "[Vec<UfeHex>]")]
8518 pub value: &'a [Vec<Felt>],
8519 }
8520
8521 #[derive(Serialize)]
8522 #[serde(transparent)]
8523 struct Field2<'a> {
8524 pub value: &'a ConfirmedBlockId,
8525 }
8526
8527 AsObject::serialize(
8528 &AsObject {
8529 from_address: self.from_address.as_ref().map(|f| Field0 { value: f }),
8530 keys: self.keys.as_ref().map(|f| Field1 { value: f }),
8531 block_id: self.block_id.as_ref().map(|f| Field2 { value: f }),
8532 },
8533 serializer,
8534 )
8535 }
8536}
8537
8538impl<'de> Deserialize<'de> for SubscribeEventsRequest {
8539 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8540 #[derive(Deserialize)]
8541 struct AsObject {
8542 #[serde(skip_serializing_if = "Option::is_none")]
8543 from_address: Option<Field0>,
8544 #[serde(skip_serializing_if = "Option::is_none")]
8545 keys: Option<Field1>,
8546 #[serde(skip_serializing_if = "Option::is_none")]
8547 block_id: Option<Field2>,
8548 }
8549
8550 #[serde_as]
8551 #[derive(Deserialize)]
8552 #[serde(transparent)]
8553 struct Field0 {
8554 #[serde_as(as = "UfeHex")]
8555 pub value: Felt,
8556 }
8557
8558 #[serde_as]
8559 #[derive(Deserialize)]
8560 #[serde(transparent)]
8561 struct Field1 {
8562 #[serde_as(as = "Vec<Vec<UfeHex>>")]
8563 pub value: Vec<Vec<Felt>>,
8564 }
8565
8566 #[derive(Deserialize)]
8567 #[serde(transparent)]
8568 struct Field2 {
8569 pub value: ConfirmedBlockId,
8570 }
8571
8572 let temp = serde_json::Value::deserialize(deserializer)?;
8573
8574 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
8575 let element_count = elements.len();
8576
8577 let field2 = if element_count > 2 {
8578 Some(
8579 serde_json::from_value::<Field2>(elements.pop().unwrap()).map_err(|err| {
8580 serde::de::Error::custom(format!("failed to parse element: {}", err))
8581 })?,
8582 )
8583 } else {
8584 None
8585 };
8586 let field1 = if element_count > 1 {
8587 Some(
8588 serde_json::from_value::<Field1>(elements.pop().unwrap()).map_err(|err| {
8589 serde::de::Error::custom(format!("failed to parse element: {}", err))
8590 })?,
8591 )
8592 } else {
8593 None
8594 };
8595 let field0 = if element_count > 0 {
8596 Some(
8597 serde_json::from_value::<Field0>(elements.pop().unwrap()).map_err(|err| {
8598 serde::de::Error::custom(format!("failed to parse element: {}", err))
8599 })?,
8600 )
8601 } else {
8602 None
8603 };
8604
8605 Ok(Self {
8606 from_address: field0.map(|f| f.value),
8607 keys: field1.map(|f| f.value),
8608 block_id: field2.map(|f| f.value),
8609 })
8610 } else if let Ok(object) = AsObject::deserialize(&temp) {
8611 Ok(Self {
8612 from_address: object.from_address.map(|f| f.value),
8613 keys: object.keys.map(|f| f.value),
8614 block_id: object.block_id.map(|f| f.value),
8615 })
8616 } else {
8617 Err(serde::de::Error::custom("invalid sequence length"))
8618 }
8619 }
8620}
8621
8622impl Serialize for SubscribeNewHeadsRequest {
8623 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8624 #[derive(Serialize)]
8625 struct AsObject<'a> {
8626 #[serde(skip_serializing_if = "Option::is_none")]
8627 block_id: Option<Field0<'a>>,
8628 }
8629
8630 #[derive(Serialize)]
8631 #[serde(transparent)]
8632 struct Field0<'a> {
8633 pub value: &'a ConfirmedBlockId,
8634 }
8635
8636 AsObject::serialize(
8637 &AsObject {
8638 block_id: self.block_id.as_ref().map(|f| Field0 { value: f }),
8639 },
8640 serializer,
8641 )
8642 }
8643}
8644
8645impl Serialize for SubscribeNewHeadsRequestRef<'_> {
8646 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8647 #[derive(Serialize)]
8648 struct AsObject<'a> {
8649 #[serde(skip_serializing_if = "Option::is_none")]
8650 block_id: Option<Field0<'a>>,
8651 }
8652
8653 #[derive(Serialize)]
8654 #[serde(transparent)]
8655 struct Field0<'a> {
8656 pub value: &'a ConfirmedBlockId,
8657 }
8658
8659 AsObject::serialize(
8660 &AsObject {
8661 block_id: self.block_id.as_ref().map(|f| Field0 { value: f }),
8662 },
8663 serializer,
8664 )
8665 }
8666}
8667
8668impl<'de> Deserialize<'de> for SubscribeNewHeadsRequest {
8669 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8670 #[derive(Deserialize)]
8671 struct AsObject {
8672 #[serde(skip_serializing_if = "Option::is_none")]
8673 block_id: Option<Field0>,
8674 }
8675
8676 #[derive(Deserialize)]
8677 #[serde(transparent)]
8678 struct Field0 {
8679 pub value: ConfirmedBlockId,
8680 }
8681
8682 let temp = serde_json::Value::deserialize(deserializer)?;
8683
8684 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
8685 let element_count = elements.len();
8686
8687 let field0 = if element_count > 0 {
8688 Some(
8689 serde_json::from_value::<Field0>(elements.pop().unwrap()).map_err(|err| {
8690 serde::de::Error::custom(format!("failed to parse element: {}", err))
8691 })?,
8692 )
8693 } else {
8694 None
8695 };
8696
8697 Ok(Self {
8698 block_id: field0.map(|f| f.value),
8699 })
8700 } else if let Ok(object) = AsObject::deserialize(&temp) {
8701 Ok(Self {
8702 block_id: object.block_id.map(|f| f.value),
8703 })
8704 } else {
8705 Err(serde::de::Error::custom("invalid sequence length"))
8706 }
8707 }
8708}
8709
8710impl Serialize for SubscribePendingTransactionsRequest {
8711 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8712 #[derive(Serialize)]
8713 struct AsObject<'a> {
8714 #[serde(skip_serializing_if = "Option::is_none")]
8715 transaction_details: Option<Field0<'a>>,
8716 #[serde(skip_serializing_if = "Option::is_none")]
8717 sender_address: Option<Field1<'a>>,
8718 }
8719
8720 #[derive(Serialize)]
8721 #[serde(transparent)]
8722 struct Field0<'a> {
8723 pub value: &'a bool,
8724 }
8725
8726 #[serde_as]
8727 #[derive(Serialize)]
8728 #[serde(transparent)]
8729 struct Field1<'a> {
8730 #[serde_as(as = "[UfeHex]")]
8731 pub value: &'a [Felt],
8732 }
8733
8734 AsObject::serialize(
8735 &AsObject {
8736 transaction_details: self
8737 .transaction_details
8738 .as_ref()
8739 .map(|f| Field0 { value: f }),
8740 sender_address: self.sender_address.as_ref().map(|f| Field1 { value: f }),
8741 },
8742 serializer,
8743 )
8744 }
8745}
8746
8747impl Serialize for SubscribePendingTransactionsRequestRef<'_> {
8748 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8749 #[derive(Serialize)]
8750 struct AsObject<'a> {
8751 #[serde(skip_serializing_if = "Option::is_none")]
8752 transaction_details: Option<Field0<'a>>,
8753 #[serde(skip_serializing_if = "Option::is_none")]
8754 sender_address: Option<Field1<'a>>,
8755 }
8756
8757 #[derive(Serialize)]
8758 #[serde(transparent)]
8759 struct Field0<'a> {
8760 pub value: &'a bool,
8761 }
8762
8763 #[serde_as]
8764 #[derive(Serialize)]
8765 #[serde(transparent)]
8766 struct Field1<'a> {
8767 #[serde_as(as = "[UfeHex]")]
8768 pub value: &'a [Felt],
8769 }
8770
8771 AsObject::serialize(
8772 &AsObject {
8773 transaction_details: self
8774 .transaction_details
8775 .as_ref()
8776 .map(|f| Field0 { value: f }),
8777 sender_address: self.sender_address.as_ref().map(|f| Field1 { value: f }),
8778 },
8779 serializer,
8780 )
8781 }
8782}
8783
8784impl<'de> Deserialize<'de> for SubscribePendingTransactionsRequest {
8785 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8786 #[derive(Deserialize)]
8787 struct AsObject {
8788 #[serde(skip_serializing_if = "Option::is_none")]
8789 transaction_details: Option<Field0>,
8790 #[serde(skip_serializing_if = "Option::is_none")]
8791 sender_address: Option<Field1>,
8792 }
8793
8794 #[derive(Deserialize)]
8795 #[serde(transparent)]
8796 struct Field0 {
8797 pub value: bool,
8798 }
8799
8800 #[serde_as]
8801 #[derive(Deserialize)]
8802 #[serde(transparent)]
8803 struct Field1 {
8804 #[serde_as(as = "Vec<UfeHex>")]
8805 pub value: Vec<Felt>,
8806 }
8807
8808 let temp = serde_json::Value::deserialize(deserializer)?;
8809
8810 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
8811 let element_count = elements.len();
8812
8813 let field1 = if element_count > 1 {
8814 Some(
8815 serde_json::from_value::<Field1>(elements.pop().unwrap()).map_err(|err| {
8816 serde::de::Error::custom(format!("failed to parse element: {}", err))
8817 })?,
8818 )
8819 } else {
8820 None
8821 };
8822 let field0 = if element_count > 0 {
8823 Some(
8824 serde_json::from_value::<Field0>(elements.pop().unwrap()).map_err(|err| {
8825 serde::de::Error::custom(format!("failed to parse element: {}", err))
8826 })?,
8827 )
8828 } else {
8829 None
8830 };
8831
8832 Ok(Self {
8833 transaction_details: field0.map(|f| f.value),
8834 sender_address: field1.map(|f| f.value),
8835 })
8836 } else if let Ok(object) = AsObject::deserialize(&temp) {
8837 Ok(Self {
8838 transaction_details: object.transaction_details.map(|f| f.value),
8839 sender_address: object.sender_address.map(|f| f.value),
8840 })
8841 } else {
8842 Err(serde::de::Error::custom("invalid sequence length"))
8843 }
8844 }
8845}
8846
8847impl Serialize for SubscribeTransactionStatusRequest {
8848 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8849 #[derive(Serialize)]
8850 struct AsObject<'a> {
8851 transaction_hash: Field0<'a>,
8852 }
8853
8854 #[serde_as]
8855 #[derive(Serialize)]
8856 #[serde(transparent)]
8857 struct Field0<'a> {
8858 #[serde_as(as = "UfeHex")]
8859 pub value: &'a Felt,
8860 }
8861
8862 AsObject::serialize(
8863 &AsObject {
8864 transaction_hash: Field0 {
8865 value: &self.transaction_hash,
8866 },
8867 },
8868 serializer,
8869 )
8870 }
8871}
8872
8873impl Serialize for SubscribeTransactionStatusRequestRef<'_> {
8874 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8875 #[derive(Serialize)]
8876 struct AsObject<'a> {
8877 transaction_hash: Field0<'a>,
8878 }
8879
8880 #[serde_as]
8881 #[derive(Serialize)]
8882 #[serde(transparent)]
8883 struct Field0<'a> {
8884 #[serde_as(as = "UfeHex")]
8885 pub value: &'a Felt,
8886 }
8887
8888 AsObject::serialize(
8889 &AsObject {
8890 transaction_hash: Field0 {
8891 value: self.transaction_hash,
8892 },
8893 },
8894 serializer,
8895 )
8896 }
8897}
8898
8899impl<'de> Deserialize<'de> for SubscribeTransactionStatusRequest {
8900 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8901 #[derive(Deserialize)]
8902 struct AsObject {
8903 transaction_hash: Field0,
8904 }
8905
8906 #[serde_as]
8907 #[derive(Deserialize)]
8908 #[serde(transparent)]
8909 struct Field0 {
8910 #[serde_as(as = "UfeHex")]
8911 pub value: Felt,
8912 }
8913
8914 let temp = serde_json::Value::deserialize(deserializer)?;
8915
8916 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
8917 let field0 = serde_json::from_value::<Field0>(
8918 elements
8919 .pop()
8920 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
8921 )
8922 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
8923
8924 Ok(Self {
8925 transaction_hash: field0.value,
8926 })
8927 } else if let Ok(object) = AsObject::deserialize(&temp) {
8928 Ok(Self {
8929 transaction_hash: object.transaction_hash.value,
8930 })
8931 } else {
8932 Err(serde::de::Error::custom("invalid sequence length"))
8933 }
8934 }
8935}
8936
8937impl Serialize for SubscriptionEventsRequest {
8938 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8939 #[derive(Serialize)]
8940 struct AsObject<'a> {
8941 subscription_id: Field0<'a>,
8942 result: Field1<'a>,
8943 }
8944
8945 #[derive(Serialize)]
8946 #[serde(transparent)]
8947 struct Field0<'a> {
8948 pub value: &'a SubscriptionId,
8949 }
8950
8951 #[derive(Serialize)]
8952 #[serde(transparent)]
8953 struct Field1<'a> {
8954 pub value: &'a EmittedEvent,
8955 }
8956
8957 AsObject::serialize(
8958 &AsObject {
8959 subscription_id: Field0 {
8960 value: &self.subscription_id,
8961 },
8962 result: Field1 {
8963 value: &self.result,
8964 },
8965 },
8966 serializer,
8967 )
8968 }
8969}
8970
8971impl Serialize for SubscriptionEventsRequestRef<'_> {
8972 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8973 #[derive(Serialize)]
8974 struct AsObject<'a> {
8975 subscription_id: Field0<'a>,
8976 result: Field1<'a>,
8977 }
8978
8979 #[derive(Serialize)]
8980 #[serde(transparent)]
8981 struct Field0<'a> {
8982 pub value: &'a SubscriptionId,
8983 }
8984
8985 #[derive(Serialize)]
8986 #[serde(transparent)]
8987 struct Field1<'a> {
8988 pub value: &'a EmittedEvent,
8989 }
8990
8991 AsObject::serialize(
8992 &AsObject {
8993 subscription_id: Field0 {
8994 value: self.subscription_id,
8995 },
8996 result: Field1 { value: self.result },
8997 },
8998 serializer,
8999 )
9000 }
9001}
9002
9003impl<'de> Deserialize<'de> for SubscriptionEventsRequest {
9004 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9005 #[derive(Deserialize)]
9006 struct AsObject {
9007 subscription_id: Field0,
9008 result: Field1,
9009 }
9010
9011 #[derive(Deserialize)]
9012 #[serde(transparent)]
9013 struct Field0 {
9014 pub value: SubscriptionId,
9015 }
9016
9017 #[derive(Deserialize)]
9018 #[serde(transparent)]
9019 struct Field1 {
9020 pub value: EmittedEvent,
9021 }
9022
9023 let temp = serde_json::Value::deserialize(deserializer)?;
9024
9025 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
9026 let field1 = serde_json::from_value::<Field1>(
9027 elements
9028 .pop()
9029 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
9030 )
9031 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
9032 let field0 = serde_json::from_value::<Field0>(
9033 elements
9034 .pop()
9035 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
9036 )
9037 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
9038
9039 Ok(Self {
9040 subscription_id: field0.value,
9041 result: field1.value,
9042 })
9043 } else if let Ok(object) = AsObject::deserialize(&temp) {
9044 Ok(Self {
9045 subscription_id: object.subscription_id.value,
9046 result: object.result.value,
9047 })
9048 } else {
9049 Err(serde::de::Error::custom("invalid sequence length"))
9050 }
9051 }
9052}
9053
9054impl Serialize for SubscriptionNewHeadsRequest {
9055 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9056 #[derive(Serialize)]
9057 struct AsObject<'a> {
9058 subscription_id: Field0<'a>,
9059 result: Field1<'a>,
9060 }
9061
9062 #[derive(Serialize)]
9063 #[serde(transparent)]
9064 struct Field0<'a> {
9065 pub value: &'a SubscriptionId,
9066 }
9067
9068 #[derive(Serialize)]
9069 #[serde(transparent)]
9070 struct Field1<'a> {
9071 pub value: &'a BlockHeader,
9072 }
9073
9074 AsObject::serialize(
9075 &AsObject {
9076 subscription_id: Field0 {
9077 value: &self.subscription_id,
9078 },
9079 result: Field1 {
9080 value: &self.result,
9081 },
9082 },
9083 serializer,
9084 )
9085 }
9086}
9087
9088impl Serialize for SubscriptionNewHeadsRequestRef<'_> {
9089 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9090 #[derive(Serialize)]
9091 struct AsObject<'a> {
9092 subscription_id: Field0<'a>,
9093 result: Field1<'a>,
9094 }
9095
9096 #[derive(Serialize)]
9097 #[serde(transparent)]
9098 struct Field0<'a> {
9099 pub value: &'a SubscriptionId,
9100 }
9101
9102 #[derive(Serialize)]
9103 #[serde(transparent)]
9104 struct Field1<'a> {
9105 pub value: &'a BlockHeader,
9106 }
9107
9108 AsObject::serialize(
9109 &AsObject {
9110 subscription_id: Field0 {
9111 value: self.subscription_id,
9112 },
9113 result: Field1 { value: self.result },
9114 },
9115 serializer,
9116 )
9117 }
9118}
9119
9120impl<'de> Deserialize<'de> for SubscriptionNewHeadsRequest {
9121 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9122 #[derive(Deserialize)]
9123 struct AsObject {
9124 subscription_id: Field0,
9125 result: Field1,
9126 }
9127
9128 #[derive(Deserialize)]
9129 #[serde(transparent)]
9130 struct Field0 {
9131 pub value: SubscriptionId,
9132 }
9133
9134 #[derive(Deserialize)]
9135 #[serde(transparent)]
9136 struct Field1 {
9137 pub value: BlockHeader,
9138 }
9139
9140 let temp = serde_json::Value::deserialize(deserializer)?;
9141
9142 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
9143 let field1 = serde_json::from_value::<Field1>(
9144 elements
9145 .pop()
9146 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
9147 )
9148 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
9149 let field0 = serde_json::from_value::<Field0>(
9150 elements
9151 .pop()
9152 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
9153 )
9154 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
9155
9156 Ok(Self {
9157 subscription_id: field0.value,
9158 result: field1.value,
9159 })
9160 } else if let Ok(object) = AsObject::deserialize(&temp) {
9161 Ok(Self {
9162 subscription_id: object.subscription_id.value,
9163 result: object.result.value,
9164 })
9165 } else {
9166 Err(serde::de::Error::custom("invalid sequence length"))
9167 }
9168 }
9169}
9170
9171impl Serialize for SubscriptionPendingTransactionsRequest {
9172 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9173 #[derive(Serialize)]
9174 struct AsObject<'a> {
9175 subscription_id: Field0<'a>,
9176 result: Field1<'a>,
9177 }
9178
9179 #[derive(Serialize)]
9180 #[serde(transparent)]
9181 struct Field0<'a> {
9182 pub value: &'a SubscriptionId,
9183 }
9184
9185 #[derive(Serialize)]
9186 #[serde(transparent)]
9187 struct Field1<'a> {
9188 pub value: &'a TransactionOrHash,
9189 }
9190
9191 AsObject::serialize(
9192 &AsObject {
9193 subscription_id: Field0 {
9194 value: &self.subscription_id,
9195 },
9196 result: Field1 {
9197 value: &self.result,
9198 },
9199 },
9200 serializer,
9201 )
9202 }
9203}
9204
9205impl Serialize for SubscriptionPendingTransactionsRequestRef<'_> {
9206 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9207 #[derive(Serialize)]
9208 struct AsObject<'a> {
9209 subscription_id: Field0<'a>,
9210 result: Field1<'a>,
9211 }
9212
9213 #[derive(Serialize)]
9214 #[serde(transparent)]
9215 struct Field0<'a> {
9216 pub value: &'a SubscriptionId,
9217 }
9218
9219 #[derive(Serialize)]
9220 #[serde(transparent)]
9221 struct Field1<'a> {
9222 pub value: &'a TransactionOrHash,
9223 }
9224
9225 AsObject::serialize(
9226 &AsObject {
9227 subscription_id: Field0 {
9228 value: self.subscription_id,
9229 },
9230 result: Field1 { value: self.result },
9231 },
9232 serializer,
9233 )
9234 }
9235}
9236
9237impl<'de> Deserialize<'de> for SubscriptionPendingTransactionsRequest {
9238 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9239 #[derive(Deserialize)]
9240 struct AsObject {
9241 subscription_id: Field0,
9242 result: Field1,
9243 }
9244
9245 #[derive(Deserialize)]
9246 #[serde(transparent)]
9247 struct Field0 {
9248 pub value: SubscriptionId,
9249 }
9250
9251 #[derive(Deserialize)]
9252 #[serde(transparent)]
9253 struct Field1 {
9254 pub value: TransactionOrHash,
9255 }
9256
9257 let temp = serde_json::Value::deserialize(deserializer)?;
9258
9259 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
9260 let field1 = serde_json::from_value::<Field1>(
9261 elements
9262 .pop()
9263 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
9264 )
9265 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
9266 let field0 = serde_json::from_value::<Field0>(
9267 elements
9268 .pop()
9269 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
9270 )
9271 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
9272
9273 Ok(Self {
9274 subscription_id: field0.value,
9275 result: field1.value,
9276 })
9277 } else if let Ok(object) = AsObject::deserialize(&temp) {
9278 Ok(Self {
9279 subscription_id: object.subscription_id.value,
9280 result: object.result.value,
9281 })
9282 } else {
9283 Err(serde::de::Error::custom("invalid sequence length"))
9284 }
9285 }
9286}
9287
9288impl Serialize for SubscriptionReorgRequest {
9289 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9290 #[derive(Serialize)]
9291 struct AsObject<'a> {
9292 subscription_id: Field0<'a>,
9293 result: Field1<'a>,
9294 }
9295
9296 #[derive(Serialize)]
9297 #[serde(transparent)]
9298 struct Field0<'a> {
9299 pub value: &'a SubscriptionId,
9300 }
9301
9302 #[derive(Serialize)]
9303 #[serde(transparent)]
9304 struct Field1<'a> {
9305 pub value: &'a ReorgData,
9306 }
9307
9308 AsObject::serialize(
9309 &AsObject {
9310 subscription_id: Field0 {
9311 value: &self.subscription_id,
9312 },
9313 result: Field1 {
9314 value: &self.result,
9315 },
9316 },
9317 serializer,
9318 )
9319 }
9320}
9321
9322impl Serialize for SubscriptionReorgRequestRef<'_> {
9323 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9324 #[derive(Serialize)]
9325 struct AsObject<'a> {
9326 subscription_id: Field0<'a>,
9327 result: Field1<'a>,
9328 }
9329
9330 #[derive(Serialize)]
9331 #[serde(transparent)]
9332 struct Field0<'a> {
9333 pub value: &'a SubscriptionId,
9334 }
9335
9336 #[derive(Serialize)]
9337 #[serde(transparent)]
9338 struct Field1<'a> {
9339 pub value: &'a ReorgData,
9340 }
9341
9342 AsObject::serialize(
9343 &AsObject {
9344 subscription_id: Field0 {
9345 value: self.subscription_id,
9346 },
9347 result: Field1 { value: self.result },
9348 },
9349 serializer,
9350 )
9351 }
9352}
9353
9354impl<'de> Deserialize<'de> for SubscriptionReorgRequest {
9355 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9356 #[derive(Deserialize)]
9357 struct AsObject {
9358 subscription_id: Field0,
9359 result: Field1,
9360 }
9361
9362 #[derive(Deserialize)]
9363 #[serde(transparent)]
9364 struct Field0 {
9365 pub value: SubscriptionId,
9366 }
9367
9368 #[derive(Deserialize)]
9369 #[serde(transparent)]
9370 struct Field1 {
9371 pub value: ReorgData,
9372 }
9373
9374 let temp = serde_json::Value::deserialize(deserializer)?;
9375
9376 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
9377 let field1 = serde_json::from_value::<Field1>(
9378 elements
9379 .pop()
9380 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
9381 )
9382 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
9383 let field0 = serde_json::from_value::<Field0>(
9384 elements
9385 .pop()
9386 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
9387 )
9388 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
9389
9390 Ok(Self {
9391 subscription_id: field0.value,
9392 result: field1.value,
9393 })
9394 } else if let Ok(object) = AsObject::deserialize(&temp) {
9395 Ok(Self {
9396 subscription_id: object.subscription_id.value,
9397 result: object.result.value,
9398 })
9399 } else {
9400 Err(serde::de::Error::custom("invalid sequence length"))
9401 }
9402 }
9403}
9404
9405impl Serialize for SubscriptionTransactionStatusRequest {
9406 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9407 #[derive(Serialize)]
9408 struct AsObject<'a> {
9409 subscription_id: Field0<'a>,
9410 result: Field1<'a>,
9411 }
9412
9413 #[derive(Serialize)]
9414 #[serde(transparent)]
9415 struct Field0<'a> {
9416 pub value: &'a SubscriptionId,
9417 }
9418
9419 #[derive(Serialize)]
9420 #[serde(transparent)]
9421 struct Field1<'a> {
9422 pub value: &'a NewTransactionStatus,
9423 }
9424
9425 AsObject::serialize(
9426 &AsObject {
9427 subscription_id: Field0 {
9428 value: &self.subscription_id,
9429 },
9430 result: Field1 {
9431 value: &self.result,
9432 },
9433 },
9434 serializer,
9435 )
9436 }
9437}
9438
9439impl Serialize for SubscriptionTransactionStatusRequestRef<'_> {
9440 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9441 #[derive(Serialize)]
9442 struct AsObject<'a> {
9443 subscription_id: Field0<'a>,
9444 result: Field1<'a>,
9445 }
9446
9447 #[derive(Serialize)]
9448 #[serde(transparent)]
9449 struct Field0<'a> {
9450 pub value: &'a SubscriptionId,
9451 }
9452
9453 #[derive(Serialize)]
9454 #[serde(transparent)]
9455 struct Field1<'a> {
9456 pub value: &'a NewTransactionStatus,
9457 }
9458
9459 AsObject::serialize(
9460 &AsObject {
9461 subscription_id: Field0 {
9462 value: self.subscription_id,
9463 },
9464 result: Field1 { value: self.result },
9465 },
9466 serializer,
9467 )
9468 }
9469}
9470
9471impl<'de> Deserialize<'de> for SubscriptionTransactionStatusRequest {
9472 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9473 #[derive(Deserialize)]
9474 struct AsObject {
9475 subscription_id: Field0,
9476 result: Field1,
9477 }
9478
9479 #[derive(Deserialize)]
9480 #[serde(transparent)]
9481 struct Field0 {
9482 pub value: SubscriptionId,
9483 }
9484
9485 #[derive(Deserialize)]
9486 #[serde(transparent)]
9487 struct Field1 {
9488 pub value: NewTransactionStatus,
9489 }
9490
9491 let temp = serde_json::Value::deserialize(deserializer)?;
9492
9493 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
9494 let field1 = serde_json::from_value::<Field1>(
9495 elements
9496 .pop()
9497 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
9498 )
9499 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
9500 let field0 = serde_json::from_value::<Field0>(
9501 elements
9502 .pop()
9503 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
9504 )
9505 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
9506
9507 Ok(Self {
9508 subscription_id: field0.value,
9509 result: field1.value,
9510 })
9511 } else if let Ok(object) = AsObject::deserialize(&temp) {
9512 Ok(Self {
9513 subscription_id: object.subscription_id.value,
9514 result: object.result.value,
9515 })
9516 } else {
9517 Err(serde::de::Error::custom("invalid sequence length"))
9518 }
9519 }
9520}
9521
9522impl Serialize for SyncingRequest {
9523 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9524 use serde::ser::SerializeSeq;
9525
9526 let seq = serializer.serialize_seq(Some(0))?;
9527 seq.end()
9528 }
9529}
9530
9531impl<'de> Deserialize<'de> for SyncingRequest {
9532 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9533 let elements = Vec::<()>::deserialize(deserializer)?;
9534 if !elements.is_empty() {
9535 return Err(serde::de::Error::custom("invalid sequence length"));
9536 }
9537 Ok(Self)
9538 }
9539}
9540
9541impl Serialize for TraceBlockTransactionsRequest {
9542 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9543 #[derive(Serialize)]
9544 struct AsObject<'a> {
9545 block_id: Field0<'a>,
9546 }
9547
9548 #[derive(Serialize)]
9549 #[serde(transparent)]
9550 struct Field0<'a> {
9551 pub value: &'a BlockId,
9552 }
9553
9554 AsObject::serialize(
9555 &AsObject {
9556 block_id: Field0 {
9557 value: &self.block_id,
9558 },
9559 },
9560 serializer,
9561 )
9562 }
9563}
9564
9565impl Serialize for TraceBlockTransactionsRequestRef<'_> {
9566 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9567 #[derive(Serialize)]
9568 struct AsObject<'a> {
9569 block_id: Field0<'a>,
9570 }
9571
9572 #[derive(Serialize)]
9573 #[serde(transparent)]
9574 struct Field0<'a> {
9575 pub value: &'a BlockId,
9576 }
9577
9578 AsObject::serialize(
9579 &AsObject {
9580 block_id: Field0 {
9581 value: self.block_id,
9582 },
9583 },
9584 serializer,
9585 )
9586 }
9587}
9588
9589impl<'de> Deserialize<'de> for TraceBlockTransactionsRequest {
9590 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9591 #[derive(Deserialize)]
9592 struct AsObject {
9593 block_id: Field0,
9594 }
9595
9596 #[derive(Deserialize)]
9597 #[serde(transparent)]
9598 struct Field0 {
9599 pub value: BlockId,
9600 }
9601
9602 let temp = serde_json::Value::deserialize(deserializer)?;
9603
9604 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
9605 let field0 = serde_json::from_value::<Field0>(
9606 elements
9607 .pop()
9608 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
9609 )
9610 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
9611
9612 Ok(Self {
9613 block_id: field0.value,
9614 })
9615 } else if let Ok(object) = AsObject::deserialize(&temp) {
9616 Ok(Self {
9617 block_id: object.block_id.value,
9618 })
9619 } else {
9620 Err(serde::de::Error::custom("invalid sequence length"))
9621 }
9622 }
9623}
9624
9625impl Serialize for TraceTransactionRequest {
9626 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9627 #[derive(Serialize)]
9628 struct AsObject<'a> {
9629 transaction_hash: Field0<'a>,
9630 }
9631
9632 #[serde_as]
9633 #[derive(Serialize)]
9634 #[serde(transparent)]
9635 struct Field0<'a> {
9636 #[serde_as(as = "UfeHex")]
9637 pub value: &'a Felt,
9638 }
9639
9640 AsObject::serialize(
9641 &AsObject {
9642 transaction_hash: Field0 {
9643 value: &self.transaction_hash,
9644 },
9645 },
9646 serializer,
9647 )
9648 }
9649}
9650
9651impl Serialize for TraceTransactionRequestRef<'_> {
9652 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9653 #[derive(Serialize)]
9654 struct AsObject<'a> {
9655 transaction_hash: Field0<'a>,
9656 }
9657
9658 #[serde_as]
9659 #[derive(Serialize)]
9660 #[serde(transparent)]
9661 struct Field0<'a> {
9662 #[serde_as(as = "UfeHex")]
9663 pub value: &'a Felt,
9664 }
9665
9666 AsObject::serialize(
9667 &AsObject {
9668 transaction_hash: Field0 {
9669 value: self.transaction_hash,
9670 },
9671 },
9672 serializer,
9673 )
9674 }
9675}
9676
9677impl<'de> Deserialize<'de> for TraceTransactionRequest {
9678 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9679 #[derive(Deserialize)]
9680 struct AsObject {
9681 transaction_hash: Field0,
9682 }
9683
9684 #[serde_as]
9685 #[derive(Deserialize)]
9686 #[serde(transparent)]
9687 struct Field0 {
9688 #[serde_as(as = "UfeHex")]
9689 pub value: Felt,
9690 }
9691
9692 let temp = serde_json::Value::deserialize(deserializer)?;
9693
9694 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
9695 let field0 = serde_json::from_value::<Field0>(
9696 elements
9697 .pop()
9698 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
9699 )
9700 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
9701
9702 Ok(Self {
9703 transaction_hash: field0.value,
9704 })
9705 } else if let Ok(object) = AsObject::deserialize(&temp) {
9706 Ok(Self {
9707 transaction_hash: object.transaction_hash.value,
9708 })
9709 } else {
9710 Err(serde::de::Error::custom("invalid sequence length"))
9711 }
9712 }
9713}
9714
9715impl Serialize for UnsubscribeRequest {
9716 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9717 #[derive(Serialize)]
9718 struct AsObject<'a> {
9719 subscription_id: Field0<'a>,
9720 }
9721
9722 #[derive(Serialize)]
9723 #[serde(transparent)]
9724 struct Field0<'a> {
9725 pub value: &'a SubscriptionId,
9726 }
9727
9728 AsObject::serialize(
9729 &AsObject {
9730 subscription_id: Field0 {
9731 value: &self.subscription_id,
9732 },
9733 },
9734 serializer,
9735 )
9736 }
9737}
9738
9739impl Serialize for UnsubscribeRequestRef<'_> {
9740 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9741 #[derive(Serialize)]
9742 struct AsObject<'a> {
9743 subscription_id: Field0<'a>,
9744 }
9745
9746 #[derive(Serialize)]
9747 #[serde(transparent)]
9748 struct Field0<'a> {
9749 pub value: &'a SubscriptionId,
9750 }
9751
9752 AsObject::serialize(
9753 &AsObject {
9754 subscription_id: Field0 {
9755 value: self.subscription_id,
9756 },
9757 },
9758 serializer,
9759 )
9760 }
9761}
9762
9763impl<'de> Deserialize<'de> for UnsubscribeRequest {
9764 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9765 #[derive(Deserialize)]
9766 struct AsObject {
9767 subscription_id: Field0,
9768 }
9769
9770 #[derive(Deserialize)]
9771 #[serde(transparent)]
9772 struct Field0 {
9773 pub value: SubscriptionId,
9774 }
9775
9776 let temp = serde_json::Value::deserialize(deserializer)?;
9777
9778 if let Ok(mut elements) = Vec::<serde_json::Value>::deserialize(&temp) {
9779 let field0 = serde_json::from_value::<Field0>(
9780 elements
9781 .pop()
9782 .ok_or_else(|| serde::de::Error::custom("invalid sequence length"))?,
9783 )
9784 .map_err(|err| serde::de::Error::custom(format!("failed to parse element: {}", err)))?;
9785
9786 Ok(Self {
9787 subscription_id: field0.value,
9788 })
9789 } else if let Ok(object) = AsObject::deserialize(&temp) {
9790 Ok(Self {
9791 subscription_id: object.subscription_id.value,
9792 })
9793 } else {
9794 Err(serde::de::Error::custom("invalid sequence length"))
9795 }
9796 }
9797}