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                "address": "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri"
59            })
60        );
61
62        let deserialized: GetBalanceRequest = from_value(json).unwrap();
63        assert_eq!(deserialized, request);
64    }
65
66    #[test]
67    fn test_get_account_info_request_serialization() {
68        let request = GetAccountInfoRequest {
69            address: "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri".to_string(),
70            config: Some(crate::messages::get_account_info::GetAccountInfoConfig {
71                data_slice: None,
72                min_context_slot: None,
73            }),
74        };
75        let json = to_value(&request).unwrap();
76
77        let deserialized: GetAccountInfoRequest = from_value(json).unwrap();
78        assert_eq!(deserialized.address, request.address);
79    }
80
81    #[test]
82    fn test_request_airdrop_request_serialization() {
83        let request = RequestAirdropRequest::new(
84            "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri".to_string(),
85            1000000000,
86        );
87        let json = to_value(&request).unwrap();
88        assert_eq!(
89            json,
90            json!({"pubkey": "84astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDVcgri", "kelvins": 1000000000})
91        );
92
93        let deserialized: RequestAirdropRequest = from_value(json).unwrap();
94        assert_eq!(deserialized, request);
95    }
96
97    #[test]
98    fn test_get_signature_statuses_request_serialization() {
99        let signatures = vec!["signature1".to_string(), "signature2".to_string()];
100        let request = GetSignatureStatusesRequest {
101            signatures: signatures.clone(),
102            config: None,
103        };
104        let json = to_value(&request).unwrap();
105        assert_eq!(json, json!({"signatures": signatures}));
106
107        let deserialized: GetSignatureStatusesRequest = from_value(json).unwrap();
108        assert_eq!(deserialized.signatures, request.signatures);
109    }
110}