nut06.rs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. use std::ops::Deref;
  2. use cashu::nuts::nut06::{SplitRequest, SplitResponse};
  3. use wasm_bindgen::prelude::*;
  4. use crate::{
  5. error::{into_err, Result},
  6. types::JsAmount,
  7. };
  8. #[wasm_bindgen(js_name = SplitRequest)]
  9. pub struct JsSplitRequest {
  10. inner: SplitRequest,
  11. }
  12. impl Deref for JsSplitRequest {
  13. type Target = SplitRequest;
  14. fn deref(&self) -> &Self::Target {
  15. &self.inner
  16. }
  17. }
  18. impl From<SplitRequest> for JsSplitRequest {
  19. fn from(inner: SplitRequest) -> JsSplitRequest {
  20. JsSplitRequest { inner }
  21. }
  22. }
  23. #[wasm_bindgen(js_class = SplitRequest)]
  24. impl JsSplitRequest {
  25. #[wasm_bindgen(constructor)]
  26. pub fn new(proofs: JsValue, outputs: JsValue) -> Result<JsSplitRequest> {
  27. let proofs = serde_wasm_bindgen::from_value(proofs).map_err(into_err)?;
  28. let outputs = serde_wasm_bindgen::from_value(outputs).map_err(into_err)?;
  29. Ok(JsSplitRequest {
  30. inner: SplitRequest {
  31. amount: None,
  32. proofs,
  33. outputs,
  34. },
  35. })
  36. }
  37. /// Get Proofs
  38. #[wasm_bindgen(getter)]
  39. pub fn proofs(&self) -> Result<JsValue> {
  40. serde_wasm_bindgen::to_value(&self.inner.proofs).map_err(into_err)
  41. }
  42. /// Get Outputs
  43. #[wasm_bindgen(getter)]
  44. pub fn outputs(&self) -> Result<JsValue> {
  45. serde_wasm_bindgen::to_value(&self.inner.outputs).map_err(into_err)
  46. }
  47. /// Proofs Amount
  48. #[wasm_bindgen(js_name = proofsAmount)]
  49. pub fn proofs_amount(&self) -> JsAmount {
  50. self.inner.proofs_amount().into()
  51. }
  52. /// Output Amount
  53. #[wasm_bindgen(js_name = outputAmount)]
  54. pub fn output_amount(&self) -> JsAmount {
  55. self.inner.output_amount().into()
  56. }
  57. }
  58. #[wasm_bindgen(js_name = SplitResponse)]
  59. pub struct JsSplitResponse {
  60. inner: SplitResponse,
  61. }
  62. impl Deref for JsSplitResponse {
  63. type Target = SplitResponse;
  64. fn deref(&self) -> &Self::Target {
  65. &self.inner
  66. }
  67. }
  68. impl From<SplitResponse> for JsSplitResponse {
  69. fn from(inner: SplitResponse) -> JsSplitResponse {
  70. JsSplitResponse { inner }
  71. }
  72. }
  73. #[wasm_bindgen(js_class = SplitResponse)]
  74. impl JsSplitResponse {
  75. #[wasm_bindgen(constructor)]
  76. pub fn new(promises: JsValue) -> Result<JsSplitResponse> {
  77. let promises = serde_wasm_bindgen::from_value(promises).map_err(into_err)?;
  78. Ok(JsSplitResponse {
  79. inner: SplitResponse {
  80. fst: None,
  81. snd: None,
  82. promises: Some(promises),
  83. },
  84. })
  85. }
  86. /// Get Promises
  87. #[wasm_bindgen(getter)]
  88. pub fn promises(&self) -> Result<JsValue> {
  89. serde_wasm_bindgen::to_value(&self.inner.promises).map_err(into_err)
  90. }
  91. /// Promises Amount
  92. #[wasm_bindgen(js_name = promisesAmount)]
  93. pub fn promises_amount(&self) -> Option<JsAmount> {
  94. self.inner.promises_amount().map(|a| a.into())
  95. }
  96. }