Skip to main content

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