starknet_devnet_server/api/models/
json_rpc_response.rs1#[cfg(test)]
2use serde::Deserialize;
3use serde::Serialize;
4use starknet_core::CasmContractClass;
5use starknet_rs_core::types::{ContractClass as CodegenContractClass, Felt};
6use starknet_types::rpc::block::{Block, PreConfirmedBlock};
7use starknet_types::rpc::estimate_message_fee::FeeEstimateWrapper;
8use starknet_types::rpc::gas_modification::GasModification;
9use starknet_types::rpc::state::{PreConfirmedStateUpdate, StateUpdate};
10use starknet_types::rpc::transaction_receipt::TransactionReceipt;
11use starknet_types::rpc::transactions::{
12 BlockTransactionTrace, EventsChunk, L1HandlerTransactionStatus, SimulatedTransaction,
13 TransactionStatus, TransactionTrace, TransactionWithHash,
14};
15use starknet_types::starknet_api::block::BlockNumber;
16
17use crate::api::models::{
18 AbortedBlocks, AcceptedOnL1Blocks, AccountBalanceResponse, BlockHashAndNumberOutput,
19 CreatedBlock, DeclareTransactionOutput, DeployAccountTransactionOutput, DumpResponseBody,
20 FlushedMessages, IncreaseTimeResponse, MessageHash, MessagingLoadAddress, MintTokensResponse,
21 SerializableAccount, SetTimeResponse, SyncingOutput, TransactionHashOutput,
22};
23use crate::config::DevnetConfig;
24
25#[derive(Serialize)]
26#[serde(untagged)]
27#[allow(clippy::large_enum_variant)]
28pub enum JsonRpcResponse {
29 Starknet(StarknetResponse),
30 Devnet(DevnetResponse),
31 Empty,
32}
33
34impl From<StarknetResponse> for JsonRpcResponse {
35 fn from(resp: StarknetResponse) -> Self {
36 JsonRpcResponse::Starknet(resp)
37 }
38}
39
40impl From<DevnetResponse> for JsonRpcResponse {
41 fn from(resp: DevnetResponse) -> Self {
42 JsonRpcResponse::Devnet(resp)
43 }
44}
45
46#[derive(Serialize)]
47#[cfg_attr(test, derive(Deserialize))]
48#[serde(untagged)]
49#[allow(clippy::large_enum_variant)]
50pub enum StarknetResponse {
51 Block(Block),
52 PreConfirmedBlock(PreConfirmedBlock),
53 StateUpdate(StateUpdate),
54 PreConfirmedStateUpdate(PreConfirmedStateUpdate),
55 Felt(Felt),
56 Transaction(TransactionWithHash),
57 TransactionReceiptByTransactionHash(Box<TransactionReceipt>),
58 TransactionStatusByHash(TransactionStatus),
59 ContractClass(CodegenContractClass),
60 CompiledCasm(CasmContractClass),
61 BlockTransactionCount(u64),
62 Call(Vec<Felt>),
63 EstimateFee(Vec<FeeEstimateWrapper>),
64 BlockNumber(BlockNumber),
65 BlockHashAndNumber(BlockHashAndNumberOutput),
66 String(String),
67 Syncing(SyncingOutput),
68 Events(EventsChunk),
69 AddDeclareTransaction(DeclareTransactionOutput),
70 AddDeployAccountTransaction(DeployAccountTransactionOutput),
71 TransactionHash(TransactionHashOutput),
72 EstimateMessageFee(FeeEstimateWrapper),
73 SimulateTransactions(Vec<SimulatedTransaction>),
74 TraceTransaction(TransactionTrace),
75 BlockTransactionTraces(Vec<BlockTransactionTrace>),
76 MessagesStatusByL1Hash(Vec<L1HandlerTransactionStatus>),
77}
78
79#[derive(Serialize)]
80#[serde(untagged)]
81#[allow(clippy::large_enum_variant)]
82pub enum DevnetResponse {
83 MessagingContractAddress(MessagingLoadAddress),
84 FlushedMessages(FlushedMessages),
85 MessageHash(MessageHash),
86 CreatedBlock(CreatedBlock),
87 AbortedBlocks(AbortedBlocks),
88 AcceptedOnL1Blocks(AcceptedOnL1Blocks),
89 GasModification(GasModification),
90 SetTime(SetTimeResponse),
91 IncreaseTime(IncreaseTimeResponse),
92 TransactionHash(TransactionHashOutput),
93 PredeployedAccounts(Vec<SerializableAccount>),
94 AccountBalance(AccountBalanceResponse),
95 MintTokens(MintTokensResponse),
96 DevnetConfig(DevnetConfig),
97 DevnetDump(DumpResponseBody),
98}
99
100#[cfg(test)]
101mod response_tests {
102 use crate::api::error::StrictRpcResult;
103 use crate::api::models::{JsonRpcResponse, ToRpcResponseResult};
104
105 #[test]
106 fn serializing_starknet_response_empty_variant_yields_empty_json_on_conversion_to_rpc_result() {
107 assert_eq!(
108 r#"{"result":{}}"#,
109 serde_json::to_string(&StrictRpcResult::Ok(JsonRpcResponse::Empty).to_rpc_result())
110 .unwrap()
111 );
112 }
113}