openmina_node_common/service/rpc/
state.rs

1#[cfg(target_family = "wasm")]
2use gloo_utils::format::JsValueSerdeExt;
3#[cfg(target_family = "wasm")]
4use node::rpc::*;
5#[cfg(target_family = "wasm")]
6use wasm_bindgen::prelude::*;
7
8use super::RpcSender;
9
10#[derive(Clone)]
11#[cfg_attr(target_family = "wasm", wasm_bindgen)]
12pub struct State {
13    #[allow(unused)]
14    sender: RpcSender,
15}
16
17impl State {
18    pub fn new(sender: RpcSender) -> Self {
19        Self { sender }
20    }
21}
22
23#[cfg(target_family = "wasm")]
24#[cfg_attr(target_family = "wasm", wasm_bindgen)]
25impl State {
26    pub async fn get(&self, filter: String) -> JsValue {
27        let res = self
28            .sender
29            .oneshot_request::<RpcStateGetResponse>(RpcRequest::StateGet(Some(filter)))
30            .await
31            .and_then(|v| v.ok());
32        res.map(|res| JsValue::from_serde(&res).unwrap_or_default())
33            .unwrap_or_default()
34    }
35
36    pub async fn peers(&self) -> JsValue {
37        let res = self
38            .sender
39            .oneshot_request::<RpcPeersGetResponse>(RpcRequest::PeersGet)
40            .await;
41        JsValue::from_serde(&res).unwrap_or_default()
42    }
43
44    pub async fn message_progress(&self) -> JsValue {
45        let res = self
46            .sender
47            .oneshot_request::<RpcMessageProgressResponse>(RpcRequest::MessageProgressGet)
48            .await;
49        JsValue::from_serde(&res).unwrap_or_default()
50    }
51}