keys.rs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. use std::ops::Deref;
  2. use cashu::nuts::nut01::Keys;
  3. use wasm_bindgen::prelude::*;
  4. use crate::{
  5. error::{into_err, Result},
  6. types::JsAmount,
  7. };
  8. use super::JsPublicKey;
  9. #[wasm_bindgen(js_name = Keys)]
  10. pub struct JsKeys {
  11. inner: Keys,
  12. }
  13. impl Deref for JsKeys {
  14. type Target = Keys;
  15. fn deref(&self) -> &Self::Target {
  16. &self.inner
  17. }
  18. }
  19. impl From<Keys> for JsKeys {
  20. fn from(inner: Keys) -> JsKeys {
  21. JsKeys { inner }
  22. }
  23. }
  24. #[wasm_bindgen(js_class = Keys)]
  25. impl JsKeys {
  26. /// From Hex
  27. #[wasm_bindgen(constructor)]
  28. pub fn new(keys: String) -> Result<JsKeys> {
  29. let keys = serde_json::from_str(&keys).map_err(into_err)?;
  30. Ok(JsKeys {
  31. inner: Keys::new(keys),
  32. })
  33. }
  34. /// Keys
  35. #[wasm_bindgen(js_name = keys)]
  36. pub fn keys(&self) -> Result<String> {
  37. serde_json::to_string(&self.inner.keys()).map_err(into_err)
  38. }
  39. /// Amount Key
  40. #[wasm_bindgen(js_name = amountKey)]
  41. pub fn amount_key(&self, amount: JsAmount) -> Option<JsPublicKey> {
  42. self.inner.amount_key(*amount.deref()).map(|k| k.into())
  43. }
  44. }