keys.rs 1.1 KB

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