openmina_node_common/service/rpc/
ledger.rs1#[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}