use std::sync::Arc;
use wasm_bindgen::prelude::*;
use gmsol_programs::gmsol_store::accounts::UserHeader;
use crate::utils::{optional::optional_address, zero_copy::try_deserialize_zero_copy_from_base64};
#[wasm_bindgen(js_name = User)]
pub struct JsUser {
user: Arc<UserHeader>,
}
#[wasm_bindgen(js_class = User)]
impl JsUser {
pub fn decode_from_base64(data: &str) -> crate::Result<Self> {
let user = try_deserialize_zero_copy_from_base64(data)?;
Ok(Self {
user: Arc::new(user.0),
})
}
pub fn owner_address(&self) -> String {
self.user.owner.to_string()
}
pub fn store_address(&self) -> String {
self.user.store.to_string()
}
pub fn referral_code_address(&self) -> Option<String> {
optional_address(&self.user.referral.code).map(|k| k.to_string())
}
pub fn referrer_address(&self) -> Option<String> {
optional_address(&self.user.referral.referrer).map(|k| k.to_string())
}
pub fn gt_rank(&self) -> u8 {
self.user.gt.rank
}
pub fn gt_last_minted_at(&self) -> i64 {
self.user.gt.last_minted_at
}
pub fn gt_total_minted(&self) -> u64 {
self.user.gt.total_minted
}
pub fn gt_amount(&self) -> u64 {
self.user.gt.amount
}
pub fn gt_paid_fee_value(&self) -> u128 {
self.user.gt.paid_fee_value
}
pub fn gt_minted_fee_value(&self) -> u128 {
self.user.gt.minted_fee_value
}
}