token.rs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. use std::{ops::Deref, str::FromStr};
  2. use cashu::{nuts::nut00::wallet::Token, url::UncheckedUrl};
  3. use wasm_bindgen::prelude::*;
  4. use crate::error::{into_err, Result};
  5. #[wasm_bindgen(js_name = Token)]
  6. pub struct JsToken {
  7. inner: Token,
  8. }
  9. impl Deref for JsToken {
  10. type Target = Token;
  11. fn deref(&self) -> &Self::Target {
  12. &self.inner
  13. }
  14. }
  15. impl From<Token> for JsToken {
  16. fn from(inner: Token) -> JsToken {
  17. JsToken { inner }
  18. }
  19. }
  20. #[wasm_bindgen(js_class = Token)]
  21. impl JsToken {
  22. // TODO: Simply passing a string for proofs is not ideal
  23. #[wasm_bindgen(constructor)]
  24. pub fn new(mint: String, proofs: String, memo: Option<String>) -> Result<JsToken> {
  25. let mint = UncheckedUrl::from_str(&mint).map_err(into_err)?;
  26. let proofs = serde_json::from_str(&proofs).map_err(into_err)?;
  27. Ok(Self {
  28. inner: Token::new(mint, proofs, memo).map_err(into_err)?,
  29. })
  30. }
  31. /// Memo
  32. #[wasm_bindgen(getter)]
  33. pub fn memo(&self) -> Option<String> {
  34. self.inner.memo.clone()
  35. }
  36. /// From String
  37. #[wasm_bindgen(js_name = fromString)]
  38. pub fn from_string(token: String) -> Result<JsToken> {
  39. Ok(JsToken {
  40. inner: Token::from_str(&token).map_err(into_err)?,
  41. })
  42. }
  43. /// As String
  44. #[wasm_bindgen(js_name = asString)]
  45. pub fn as_string(&self) -> Result<String> {
  46. Ok(self.inner.convert_to_string().map_err(into_err)?)
  47. }
  48. // TODO: Getter mint proofs
  49. }