use std::str::FromStr; use std::sync::Arc; use cashu::nuts::nut00::wallet::Token as TokenSdk; use cashu::url::UncheckedUrl; use crate::error::Result; use crate::{MintProofs, Proof}; pub struct Token { inner: TokenSdk, } impl Token { pub fn new( mint: String, proofs: Vec>, unit: Option, memo: Option, ) -> Result { let mint = UncheckedUrl::from_str(&mint)?; let proofs = proofs.into_iter().map(|p| p.as_ref().into()).collect(); Ok(Self { inner: TokenSdk::new(mint, proofs, unit, memo)?, }) } pub fn token(&self) -> Vec> { self.inner .token .clone() .into_iter() .map(|p| Arc::new(p.into())) .collect() } pub fn memo(&self) -> Option { self.inner.memo.clone() } pub fn from_string(token: String) -> Result { Ok(Self { inner: TokenSdk::from_str(&token)?, }) } pub fn as_string(&self) -> Result { Ok(self.inner.to_string()) } } impl From for Token { fn from(inner: cashu::nuts::nut00::wallet::Token) -> Token { Token { inner } } }