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_latest_blockhash::GetLatestBlockhashRequest,
24    get_minimum_balance_for_rent_exemption::GetMinimumBalanceForRentExemptionRequest,
25    get_multiple_accounts::GetMultipleAccountsRequest,
26    get_signature_statuses::GetSignatureStatusesRequest,
27    get_signatures_for_address::GetSignaturesForAddressRequest,
28    get_subscriptions::GetSubscriptionsRequest,
29    get_transaction::GetTransactionRequest,
30    get_transaction_count::GetTransactionCountRequest,
31    get_triggered_transactions::GetTriggeredTransactionsRequest,
32    get_validator_health::GetValidatorHealthRequest,
33    get_workflow_lineage::GetWorkflowLineageRequest,
34    is_blockhash_valid::IsBlockhashValidRequest,
35    request_airdrop::RequestAirdropRequest,
36    send_transaction::SendTransactionRequest,
37};
38
39/// Simple address parameter wrapper
40#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
41pub struct AddressParam {
42    pub address: String,
43}
44
45impl AddressParam {
46    pub fn new(address: String) -> Self {
47        Self { address }
48    }
49}
50
51#[cfg(test)]
52mod tests {
53    use serde_json::{from_value, json, to_value};
54
55    use super::*;
56
57    #[test]
58    fn test_encoding_config_serialization() {
59        let config = EncodingConfig::base64();
60        let json = to_value(&config).unwrap();
61        assert_eq!(json, json!({"encoding": "base64"}));
62
63        let deserialized: EncodingConfig = from_value(json).unwrap();
64        assert_eq!(deserialized, config);
65    }
66
67    #[test]
68    fn test_get_balance_request_serialization() {
69        let request =
70            GetBalanceRequest::new("84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri".to_string());
71        let json = to_value(&request).unwrap();
72        assert_eq!(
73            json,
74            json!({
75                "address": "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri"
76            })
77        );
78
79        let deserialized: GetBalanceRequest = from_value(json).unwrap();
80        assert_eq!(deserialized, request);
81    }
82
83    #[test]
84    fn test_get_account_info_request_serialization() {
85        let request = GetAccountInfoRequest {
86            address: "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri".to_string(),
87            config: Some(crate::messages::get_account_info::GetAccountInfoConfig {
88                encoding: Some("base64".to_string()),
89                data_slice: None,
90                min_context_slot: None,
91            }),
92        };
93        let json = to_value(&request).unwrap();
94
95        let deserialized: GetAccountInfoRequest = from_value(json).unwrap();
96        assert_eq!(deserialized.address, request.address);
97    }
98
99    #[test]
100    fn test_request_airdrop_request_serialization() {
101        let request = RequestAirdropRequest::new(
102            "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri".to_string(),
103            1000000000,
104        );
105        let json = to_value(&request).unwrap();
106        assert_eq!(
107            json,
108            json!({"pubkey": "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri", "lamports": 1000000000})
109        );
110
111        let deserialized: RequestAirdropRequest = from_value(json).unwrap();
112        assert_eq!(deserialized, request);
113    }
114
115    #[test]
116    fn test_get_signature_statuses_request_serialization() {
117        let signatures = vec!["signature1".to_string(), "signature2".to_string()];
118        let request = GetSignatureStatusesRequest {
119            signatures: signatures.clone(),
120            config: None,
121        };
122        let json = to_value(&request).unwrap();
123        assert_eq!(json, json!({"signatures": signatures}));
124
125        let deserialized: GetSignatureStatusesRequest = from_value(json).unwrap();
126        assert_eq!(deserialized.signatures, request.signatures);
127    }
128}