Skip to main content

gmsol_sdk/js/
user.rs

1use std::sync::Arc;
2use wasm_bindgen::prelude::*;
3
4use gmsol_programs::gmsol_store::accounts::UserHeader;
5
6use crate::utils::{optional::optional_address, zero_copy::try_deserialize_zero_copy_from_base64};
7
8/// JS binding wrapper for [`UserHeader`]
9#[wasm_bindgen(js_name = User)]
10pub struct JsUser {
11    user: Arc<UserHeader>,
12}
13
14#[wasm_bindgen(js_class = User)]
15impl JsUser {
16    /// Create from base64 encoded account data.
17    pub fn decode_from_base64(data: &str) -> crate::Result<Self> {
18        let user = try_deserialize_zero_copy_from_base64(data)?;
19
20        Ok(Self {
21            user: Arc::new(user.0),
22        })
23    }
24
25    /// Get the owner address.
26    pub fn owner_address(&self) -> String {
27        self.user.owner.to_string()
28    }
29
30    /// Get the store address.
31    pub fn store_address(&self) -> String {
32        self.user.store.to_string()
33    }
34
35    /// Get the referral code address.
36    pub fn referral_code_address(&self) -> Option<String> {
37        optional_address(&self.user.referral.code).map(|k| k.to_string())
38    }
39
40    /// Get the referrer address.
41    pub fn referrer_address(&self) -> Option<String> {
42        optional_address(&self.user.referral.referrer).map(|k| k.to_string())
43    }
44
45    /// Get the GT rank.
46    pub fn gt_rank(&self) -> u8 {
47        self.user.gt.rank
48    }
49
50    /// Get GT last minted at.
51    pub fn gt_last_minted_at(&self) -> i64 {
52        self.user.gt.last_minted_at
53    }
54
55    /// Get total minted GT amount.
56    pub fn gt_total_minted(&self) -> u64 {
57        self.user.gt.total_minted
58    }
59
60    /// Get GT amount.
61    pub fn gt_amount(&self) -> u64 {
62        self.user.gt.amount
63    }
64
65    /// Get paid fee value of GT.
66    pub fn gt_paid_fee_value(&self) -> u128 {
67        self.user.gt.paid_fee_value
68    }
69
70    /// Get minted fee value of GT.
71    pub fn gt_minted_fee_value(&self) -> u128 {
72        self.user.gt.minted_fee_value
73    }
74}