openmina_node_common/service/rpc/
ledger.rs

1#[cfg(target_family = "wasm")]
2use gloo_utils::format::JsValueSerdeExt;
3use node::rpc::*;
4#[cfg(target_family = "wasm")]
5use wasm_bindgen::prelude::*;
6
7use super::RpcSender;
8
9#[derive(Clone)]
10#[cfg_attr(target_family = "wasm", wasm_bindgen)]
11pub struct Ledger {
12    #[allow(unused)]
13    sender: RpcSender,
14}
15
16#[derive(Clone)]
17#[cfg_attr(target_family = "wasm", wasm_bindgen)]
18pub struct LedgerSelected {
19    #[allow(unused)]
20    sender: RpcSender,
21}
22
23#[derive(Clone)]
24#[cfg_attr(target_family = "wasm", wasm_bindgen)]
25pub struct LedgerAccounts {
26    #[allow(unused)]
27    sender: RpcSender,
28}
29
30impl Ledger {
31    pub fn new(sender: RpcSender) -> Self {
32        Self { sender }
33    }
34}
35
36#[cfg_attr(target_family = "wasm", wasm_bindgen)]
37impl Ledger {
38    pub fn latest(&self) -> LedgerSelected {
39        LedgerSelected {
40            sender: self.sender.clone(),
41        }
42    }
43}
44
45#[cfg_attr(target_family = "wasm", wasm_bindgen)]
46impl LedgerSelected {
47    pub fn accounts(&self) -> LedgerAccounts {
48        LedgerAccounts {
49            sender: self.sender.clone(),
50        }
51    }
52}
53
54impl LedgerAccounts {
55    async fn _all(&self) -> Option<RpcLedgerSlimAccountsResponse> {
56        self.sender
57            .oneshot_request(RpcRequest::LedgerAccountsGet(AccountQuery::All))
58            .await
59    }
60}
61
62#[cfg(not(target_family = "wasm"))]
63impl LedgerAccounts {
64    pub async fn all(&self) -> Option<RpcLedgerSlimAccountsResponse> {
65        self._all().await
66    }
67}
68
69#[cfg(target_family = "wasm")]
70#[cfg_attr(target_family = "wasm", wasm_bindgen)]
71impl LedgerAccounts {
72    pub async fn all(&self) -> JsValue {
73        JsValue::from_serde(&self._all().await).unwrap_or_default()
74    }
75}