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 get_peers(
113 JsonRpcId::from(rand::thread_rng().gen::<u64>().to_string()),
114 &self.get_rpc_address(rpc_address),
115 self.get_verbosity(verbosity).into(),
116 )
117 .await
118 }
119}
120
121#[cfg(test)]
122mod tests {
123 use super::*;
124 use sdk_tests::tests::helpers::get_network_constants;
125
126 #[tokio::test]
127 async fn test_get_peers_with_none_values() {
128 let sdk = SDK::new(None, None, None);
130 let error_message = "failed to parse node address as valid URL";
131
132 let result = sdk.get_peers(None, None).await;
134
135 assert!(result.is_err());
137 let err_string = result.err().unwrap().to_string();
138 assert!(err_string.contains(error_message));
139 }
140
141 #[tokio::test]
142 async fn test_get_peers_with_specific_arguments() {
143 let sdk = SDK::new(None, None, None);
145 let verbosity = Some(Verbosity::High);
146 let (rpc_address, _, _, _, _) = get_network_constants();
147
148 let result = sdk.get_peers(verbosity, Some(rpc_address)).await;
150
151 assert!(result.is_ok());
153 }
154
155 #[tokio::test]
156 async fn test_get_peers_with_error() {
157 let sdk = SDK::new(Some("http://localhost".to_string()), None, None);
158
159 let error_message = "error sending request for url (http://localhost/rpc)";
160
161 let result = sdk.get_peers(None, None).await;
163
164 assert!(result.is_err());
166 let err_string = result.err().unwrap().to_string();
167 assert!(err_string.contains(error_message));
168 }
169}