rialo_api_types/
parameters.rs

1// Copyright (c) Subzero Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4//! Structured parameter types for RPC calls
5//!
6//! This module provides strongly-typed parameter structures to replace
7//! dynamic JSON parameter construction and parsing throughout the RPC system.
8//!
9//! All parameter types have been consolidated into Request types in their respective message modules
10//! and are re-exported here for backward compatibility.
11
12// Re-export request types from their new locations in message modules
13use serde::{Deserialize, Serialize};
14
15pub use crate::messages::{
16    get_account_info::{EncodingConfig, GetAccountInfoRequest},
17    get_balance::GetBalanceRequest,
18    get_block::GetBlockRequest,
19    get_connected_full_nodes::GetConnectedFullNodesRequest,
20    get_epoch_info::GetEpochInfoRequest,
21    get_fee_for_message::GetFeeForMessageRequest,
22    get_health::GetHealthRequest,
23    get_minimum_balance_for_rent_exemption::GetMinimumBalanceForRentExemptionRequest,
24    get_multiple_accounts::GetMultipleAccountsRequest,
25    get_signature_statuses::GetSignatureStatusesRequest,
26    get_signatures_for_address::GetSignaturesForAddressRequest,
27    get_subscriptions::GetSubscriptionsRequest,
28    get_transaction::GetTransactionRequest,
29    get_transaction_count::GetTransactionCountRequest,
30    get_triggered_transactions::GetTriggeredTransactionsRequest,
31    get_validator_health::GetValidatorHealthRequest,
32    get_workflow_lineage::GetWorkflowLineageRequest,
33    is_blockhash_valid::IsBlockhashValidRequest,
34    request_airdrop::RequestAirdropRequest,
35    send_transaction::SendTransactionRequest,
36};
37
38/// Simple address parameter wrapper
39#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
40pub struct AddressParam {
41    pub address: String,
42}
43
44impl AddressParam {
45    pub fn new(address: String) -> Self {
46        Self { address }
47    }
48}
49
50#[cfg(test)]
51mod tests {
52    use serde_json::{from_value, json, to_value};
53
54    use super::*;
55
56    #[test]
57    fn test_encoding_config_serialization() {
58        let config = EncodingConfig::base64();
59        let json = to_value(&config).unwrap();
60        assert_eq!(json, json!({"encoding": "base64"}));
61
62        let deserialized: EncodingConfig = from_value(json).unwrap();
63        assert_eq!(deserialized, config);
64    }
65
66    #[test]
67    fn test_get_balance_request_serialization() {
68        let request =
69            GetBalanceRequest::new("84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri".to_string());
70        let json = to_value(&request).unwrap();
71        assert_eq!(
72            json,
73            json!({
74                "address": "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri"
75            })
76        );
77
78        let deserialized: GetBalanceRequest = from_value(json).unwrap();
79        assert_eq!(deserialized, request);
80    }
81
82    #[test]
83    fn test_get_account_info_request_serialization() {
84        let request = GetAccountInfoRequest {
85            address: "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri".to_string(),
86            config: Some(crate::messages::get_account_info::GetAccountInfoConfig {
87                encoding: Some("base64".to_string()),
88                data_slice: None,
89                min_context_slot: None,
90            }),
91        };
92        let json = to_value(&request).unwrap();
93
94        let deserialized: GetAccountInfoRequest = from_value(json).unwrap();
95        assert_eq!(deserialized.address, request.address);
96    }
97
98    #[test]
99    fn test_request_airdrop_request_serialization() {
100        let request = RequestAirdropRequest::new(
101            "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri".to_string(),
102            1000000000,
103        );
104        let json = to_value(&request).unwrap();
105        assert_eq!(
106            json,
107            json!({"pubkey": "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri", "lamports": 1000000000})
108        );
109
110        let deserialized: RequestAirdropRequest = from_value(json).unwrap();
111        assert_eq!(deserialized, request);
112    }
113
114    #[test]
115    fn test_get_signature_statuses_request_serialization() {
116        let signatures = vec!["signature1".to_string(), "signature2".to_string()];
117        let request = GetSignatureStatusesRequest {
118            signatures: signatures.clone(),
119            config: None,
120        };
121        let json = to_value(&request).unwrap();
122        assert_eq!(json, json!({"signatures": signatures}));
123
124        let deserialized: GetSignatureStatusesRequest = from_value(json).unwrap();
125        assert_eq!(deserialized.signatures, request.signatures);
126    }
127}