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#[wasm_bindgen(js_name = User)]
10pub struct JsUser {
11 user: Arc<UserHeader>,
12}
13
14#[wasm_bindgen(js_class = User)]
15impl JsUser {
16 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 pub fn owner_address(&self) -> String {
27 self.user.owner.to_string()
28 }
29
30 pub fn store_address(&self) -> String {
32 self.user.store.to_string()
33 }
34
35 pub fn referral_code_address(&self) -> Option<String> {
37 optional_address(&self.user.referral.code).map(|k| k.to_string())
38 }
39
40 pub fn referrer_address(&self) -> Option<String> {
42 optional_address(&self.user.referral.referrer).map(|k| k.to_string())
43 }
44
45 pub fn gt_rank(&self) -> u8 {
47 self.user.gt.rank
48 }
49
50 pub fn gt_last_minted_at(&self) -> i64 {
52 self.user.gt.last_minted_at
53 }
54
55 pub fn gt_total_minted(&self) -> u64 {
57 self.user.gt.total_minted
58 }
59
60 pub fn gt_amount(&self) -> u64 {
62 self.user.gt.amount
63 }
64
65 pub fn gt_paid_fee_value(&self) -> u128 {
67 self.user.gt.paid_fee_value
68 }
69
70 pub fn gt_minted_fee_value(&self) -> u128 {
72 self.user.gt.minted_fee_value
73 }
74}