casper_rust_wasm_sdk/sdk/rpcs/
get_peers.rs1use crate::{
2 types::{sdk_error::SdkError, verbosity::Verbosity},
3 SDK,
4};
5use casper_client::{
6 get_peers, rpcs::results::GetPeersResult as _GetPeersResult, JsonRpcId, SuccessResponse,
7};
8#[cfg(all(feature = "js", target_arch = "wasm32"))]
9use gloo_utils::format::JsValueSerdeExt;
10use rand::RngExt;
11#[cfg(all(feature = "js", target_arch = "wasm32"))]
12use serde::{Deserialize, Serialize};
13#[cfg(all(feature = "js", target_arch = "wasm32"))]
14use wasm_bindgen::prelude::*;
15
16#[cfg(all(feature = "js", target_arch = "wasm32"))]
18#[derive(Debug, Deserialize, Clone, Serialize)]
19#[cfg_attr(feature = "js", wasm_bindgen)]
20pub struct GetPeersResult(_GetPeersResult);
21
22#[cfg(all(feature = "js", target_arch = "wasm32"))]
23impl From<GetPeersResult> for _GetPeersResult {
24 fn from(result: GetPeersResult) -> Self {
25 result.0
26 }
27}
28
29#[cfg(all(feature = "js", target_arch = "wasm32"))]
30impl From<_GetPeersResult> for GetPeersResult {
31 fn from(result: _GetPeersResult) -> Self {
32 GetPeersResult(result)
33 }
34}
35
36#[cfg(all(feature = "js", target_arch = "wasm32"))]
37#[cfg_attr(feature = "js", wasm_bindgen)]
38impl GetPeersResult {
39 #[cfg_attr(feature = "js", wasm_bindgen(getter))]
41 #[cfg(feature = "js")]
42 pub fn api_version(&self) -> JsValue {
43 JsValue::from_serde(&self.0.api_version).unwrap()
44 }
45
46 #[cfg_attr(feature = "js", wasm_bindgen(getter))]
48 #[cfg(feature = "js")]
49 pub fn peers(&self) -> JsValue {
50 JsValue::from_serde(&self.0.peers).unwrap()
51 }
52
53 #[cfg_attr(feature = "js", wasm_bindgen(js_name = "toJson"))]
55 #[cfg(feature = "js")]
56 pub fn to_json(&self) -> JsValue {
57 JsValue::from_serde(&self.0).unwrap_or(JsValue::null())
58 }
59}
60
61#[cfg(all(feature = "js", target_arch = "wasm32"))]
62#[cfg_attr(feature = "js", wasm_bindgen)]
63impl SDK {
64 #[cfg_attr(feature = "js", wasm_bindgen(js_name = "get_peers"))]
75 #[cfg(feature = "js")]
76 pub async fn get_peers_js_alias(
77 &self,
78 verbosity: Option<Verbosity>,
79 rpc_address: Option<String>,
80 ) -> Result<GetPeersResult, JsError> {
81 let result = self.get_peers(verbosity, rpc_address).await;
82 match result {
83 Ok(data) => Ok(data.result.into()),
84 Err(err) => {
85 let err = &format!("Error occurred with {err:?}");
86 Err(JsError::new(err))
87 }
88 }
89 }
90
91 #[deprecated(note = "This function is an alias. Please use `get_peers` instead.")]
93 #[allow(deprecated)]
94 #[cfg(feature = "js")]
95 pub async fn info_get_peers(
96 &self,
97 verbosity: Option<Verbosity>,
98 rpc_address: Option<String>,
99 ) -> Result<GetPeersResult, JsError> {
100 self.get_peers_js_alias(verbosity, rpc_address).await
101 }
102}
103
104impl SDK {
105 pub async fn get_peers(
116 &self,
117 verbosity: Option<Verbosity>,
118 rpc_address: Option<String>,
119 ) -> Result<SuccessResponse<_GetPeersResult>, SdkError> {
120 let random_id = JsonRpcId::from(rand::rng().random::<u64>().to_string());
121 get_peers(
122 random_id,
123 &self.get_rpc_address(rpc_address),
124 self.get_verbosity(verbosity).into(),
125 )
126 .await
127 .map_err(Into::into)
128 }
129}
130
131#[cfg(test)]
132mod tests {
133 use super::*;
134 use sdk_tests::tests::helpers::get_network_constants;
135
136 #[tokio::test]
137 async fn test_get_peers_with_none_values() {
138 let sdk = SDK::new(None, None, None);
140 let error_message = "failed to parse node address as valid URL";
141
142 let result = sdk.get_peers(None, None).await;
144
145 assert!(result.is_err());
147 let err_string = result.err().unwrap().to_string();
148 assert!(err_string.contains(error_message));
149 }
150
151 #[tokio::test]
152 async fn test_get_peers_with_specific_arguments() {
153 let sdk = SDK::new(None, None, None);
155 let verbosity = Some(Verbosity::High);
156 let (rpc_address, _, _, _, _) = get_network_constants();
157
158 let result = sdk.get_peers(verbosity, Some(rpc_address)).await;
160
161 assert!(result.is_ok());
163 }
164
165 #[tokio::test]
166 async fn test_get_peers_with_error() {
167 let sdk = SDK::new(Some("http://localhost".to_string()), None, None);
168
169 let error_message = "error sending request";
170
171 let result = sdk.get_peers(None, None).await;
173
174 assert!(result.is_err());
176 let err_string = result.err().unwrap().to_string();
177 assert!(err_string.contains(error_message));
178 }
179}