casper_rust_wasm_sdk/sdk/rpcs/
get_peers.rs1use crate::{types::verbosity::Verbosity, SDK};
2use casper_client::{
3 get_peers, rpcs::results::GetPeersResult as _GetPeersResult, Error, JsonRpcId, SuccessResponse,
4};
5#[cfg(target_arch = "wasm32")]
6use gloo_utils::format::JsValueSerdeExt;
7use rand::Rng;
8#[cfg(target_arch = "wasm32")]
9use serde::{Deserialize, Serialize};
10#[cfg(target_arch = "wasm32")]
11use wasm_bindgen::prelude::*;
12
13#[cfg(target_arch = "wasm32")]
15#[derive(Debug, Deserialize, Clone, Serialize)]
16#[wasm_bindgen]
17pub struct GetPeersResult(_GetPeersResult);
18
19#[cfg(target_arch = "wasm32")]
20impl From<GetPeersResult> for _GetPeersResult {
21 fn from(result: GetPeersResult) -> Self {
22 result.0
23 }
24}
25
26#[cfg(target_arch = "wasm32")]
27impl From<_GetPeersResult> for GetPeersResult {
28 fn from(result: _GetPeersResult) -> Self {
29 GetPeersResult(result)
30 }
31}
32
33#[cfg(target_arch = "wasm32")]
34#[wasm_bindgen]
35impl GetPeersResult {
36 #[wasm_bindgen(getter)]
38 pub fn api_version(&self) -> JsValue {
39 JsValue::from_serde(&self.0.api_version).unwrap()
40 }
41
42 #[wasm_bindgen(getter)]
44 pub fn peers(&self) -> JsValue {
45 JsValue::from_serde(&self.0.peers).unwrap()
46 }
47
48 #[wasm_bindgen(js_name = "toJson")]
50 pub fn to_json(&self) -> JsValue {
51 JsValue::from_serde(&self.0).unwrap_or(JsValue::null())
52 }
53}
54
55#[cfg(target_arch = "wasm32")]
56#[wasm_bindgen]
57impl SDK {
58 #[wasm_bindgen(js_name = "get_peers")]
69 pub async fn get_peers_js_alias(
70 &self,
71 verbosity: Option<Verbosity>,
72 rpc_address: Option<String>,
73 ) -> Result<GetPeersResult, JsError> {
74 let result = self.get_peers(verbosity, rpc_address).await;
75 match result {
76 Ok(data) => Ok(data.result.into()),
77 Err(err) => {
78 let err = &format!("Error occurred with {err:?}");
79 Err(JsError::new(err))
80 }
81 }
82 }
83
84 #[deprecated(note = "This function is an alias. Please use `get_peers` instead.")]
86 #[allow(deprecated)]
87 pub async fn info_get_peers(
88 &self,
89 verbosity: Option<Verbosity>,
90 rpc_address: Option<String>,
91 ) -> Result<GetPeersResult, JsError> {
92 self.get_peers_js_alias(verbosity, rpc_address).await
93 }
94}
95
96impl SDK {
97 pub async fn get_peers(
108 &self,
109 verbosity: Option<Verbosity>,
110 rpc_address: Option<String>,
111 ) -> Result<SuccessResponse<_GetPeersResult>, Error> {
112 let random_id = JsonRpcId::from(rand::thread_rng().gen::<u64>().to_string());
113 get_peers(
114 random_id,
115 &self.get_rpc_address(rpc_address),
116 self.get_verbosity(verbosity).into(),
117 )
118 .await
119 }
120}
121
122#[cfg(test)]
123mod tests {
124 use super::*;
125 use sdk_tests::tests::helpers::get_network_constants;
126
127 #[tokio::test]
128 async fn test_get_peers_with_none_values() {
129 let sdk = SDK::new(None, None, None);
131 let error_message = "failed to parse node address as valid URL";
132
133 let result = sdk.get_peers(None, None).await;
135
136 assert!(result.is_err());
138 let err_string = result.err().unwrap().to_string();
139 assert!(err_string.contains(error_message));
140 }
141
142 #[tokio::test]
143 async fn test_get_peers_with_specific_arguments() {
144 let sdk = SDK::new(None, None, None);
146 let verbosity = Some(Verbosity::High);
147 let (rpc_address, _, _, _, _) = get_network_constants();
148
149 let result = sdk.get_peers(verbosity, Some(rpc_address)).await;
151
152 assert!(result.is_ok());
154 }
155
156 #[tokio::test]
157 async fn test_get_peers_with_error() {
158 let sdk = SDK::new(Some("http://localhost".to_string()), None, None);
159
160 let error_message = "error sending request";
161
162 let result = sdk.get_peers(None, None).await;
164
165 assert!(result.is_err());
167 let err_string = result.err().unwrap().to_string();
168 assert!(err_string.contains(error_message));
169 }
170}