token.rs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. use std::str::FromStr;
  2. use std::sync::Arc;
  3. use cashu::nuts::nut00::wallet::Token as TokenSdk;
  4. use cashu::url::UncheckedUrl;
  5. use crate::error::Result;
  6. use crate::{MintProofs, Proof};
  7. pub struct Token {
  8. inner: TokenSdk,
  9. }
  10. impl Token {
  11. pub fn new(
  12. mint: String,
  13. proofs: Vec<Arc<Proof>>,
  14. unit: Option<String>,
  15. memo: Option<String>,
  16. ) -> Result<Self> {
  17. let mint = UncheckedUrl::from_str(&mint)?;
  18. let proofs = proofs.into_iter().map(|p| p.as_ref().into()).collect();
  19. Ok(Self {
  20. inner: TokenSdk::new(mint, proofs, unit, memo)?,
  21. })
  22. }
  23. pub fn token(&self) -> Vec<Arc<MintProofs>> {
  24. self.inner
  25. .token
  26. .clone()
  27. .into_iter()
  28. .map(|p| Arc::new(p.into()))
  29. .collect()
  30. }
  31. pub fn memo(&self) -> Option<String> {
  32. self.inner.memo.clone()
  33. }
  34. pub fn from_string(token: String) -> Result<Self> {
  35. Ok(Self {
  36. inner: TokenSdk::from_str(&token)?,
  37. })
  38. }
  39. pub fn as_string(&self) -> Result<String> {
  40. Ok(self.inner.to_string())
  41. }
  42. }
  43. impl From<cashu::nuts::nut00::wallet::Token> for Token {
  44. fn from(inner: cashu::nuts::nut00::wallet::Token) -> Token {
  45. Token { inner }
  46. }
  47. }