From 9b40784a88f26a8b1850167e29427519a8a9a7be Mon Sep 17 00:00:00 2001 From: thesimplekid Date: Mon, 25 Sep 2023 22:43:29 +0100 Subject: [PATCH] `bindings/cashu-js` use `serde_wasm_bindgen` for generic types --- bindings/cashu-js/src/nuts/nut00/token.rs | 6 ++---- bindings/cashu-js/src/nuts/nut01/keys.rs | 8 +++---- bindings/cashu-js/src/nuts/nut02/keyset.rs | 8 +++---- bindings/cashu-js/src/nuts/nut04.rs | 16 +++++++------- bindings/cashu-js/src/nuts/nut06.rs | 22 +++++++++---------- bindings/cashu-js/src/nuts/nut07.rs | 25 ++++++---------------- 6 files changed, 36 insertions(+), 49 deletions(-) diff --git a/bindings/cashu-js/src/nuts/nut00/token.rs b/bindings/cashu-js/src/nuts/nut00/token.rs index 728ef913..4171f94a 100644 --- a/bindings/cashu-js/src/nuts/nut00/token.rs +++ b/bindings/cashu-js/src/nuts/nut00/token.rs @@ -27,9 +27,9 @@ impl From for JsToken { impl JsToken { // TODO: Simply passing a string for proofs is not ideal #[wasm_bindgen(constructor)] - pub fn new(mint: String, proofs: String, memo: Option) -> Result { + pub fn new(mint: String, proofs: JsValue, memo: Option) -> Result { let mint = UncheckedUrl::from_str(&mint).map_err(into_err)?; - let proofs = serde_json::from_str(&proofs).map_err(into_err)?; + let proofs = serde_wasm_bindgen::from_value(proofs).map_err(into_err)?; Ok(Self { inner: Token::new(mint, proofs, memo).map_err(into_err)?, }) @@ -54,6 +54,4 @@ impl JsToken { pub fn as_string(&self) -> Result { self.inner.convert_to_string().map_err(into_err) } - - // TODO: Getter mint proofs } diff --git a/bindings/cashu-js/src/nuts/nut01/keys.rs b/bindings/cashu-js/src/nuts/nut01/keys.rs index 978c8295..c3d69c94 100644 --- a/bindings/cashu-js/src/nuts/nut01/keys.rs +++ b/bindings/cashu-js/src/nuts/nut01/keys.rs @@ -32,8 +32,8 @@ impl From for JsKeys { impl JsKeys { /// From Hex #[wasm_bindgen(constructor)] - pub fn new(keys: String) -> Result { - let keys = serde_json::from_str(&keys).map_err(into_err)?; + pub fn new(keys: JsValue) -> Result { + let keys = serde_wasm_bindgen::from_value(keys).map_err(into_err)?; Ok(JsKeys { inner: Keys::new(keys), @@ -42,8 +42,8 @@ impl JsKeys { /// Keys #[wasm_bindgen(js_name = keys)] - pub fn keys(&self) -> Result { - serde_json::to_string(&self.inner.keys()).map_err(into_err) + pub fn keys(&self) -> Result { + serde_wasm_bindgen::to_value(&self.inner.keys()).map_err(into_err) } /// Amount Key diff --git a/bindings/cashu-js/src/nuts/nut02/keyset.rs b/bindings/cashu-js/src/nuts/nut02/keyset.rs index ffaac1d1..362a032f 100644 --- a/bindings/cashu-js/src/nuts/nut02/keyset.rs +++ b/bindings/cashu-js/src/nuts/nut02/keyset.rs @@ -108,14 +108,14 @@ impl From for JsKeyResponse { impl JsKeyResponse { /// From Hex #[wasm_bindgen(constructor)] - pub fn new(keysets: String) -> Result { - let response = serde_json::from_str(&keysets).map_err(into_err)?; + pub fn new(keysets: JsValue) -> Result { + let response = serde_wasm_bindgen::from_value(keysets).map_err(into_err)?; Ok(Self { inner: response }) } /// Get Keysets #[wasm_bindgen(getter)] - pub fn keysets(&self) -> Result { - serde_json::to_string(&self.inner.keysets).map_err(into_err) + pub fn keysets(&self) -> Result { + serde_wasm_bindgen::to_value(&self.inner.keysets).map_err(into_err) } } diff --git a/bindings/cashu-js/src/nuts/nut04.rs b/bindings/cashu-js/src/nuts/nut04.rs index 8ea20a91..7737603e 100644 --- a/bindings/cashu-js/src/nuts/nut04.rs +++ b/bindings/cashu-js/src/nuts/nut04.rs @@ -30,16 +30,16 @@ impl From for JsMintRequest { impl JsMintRequest { /// Try From Base 64 String #[wasm_bindgen(constructor)] - pub fn new(outputs: String) -> Result { - let outputs = serde_json::from_str(&outputs).map_err(into_err)?; + pub fn new(outputs: JsValue) -> Result { + let outputs = serde_wasm_bindgen::from_value(outputs).map_err(into_err)?; Ok(JsMintRequest { inner: MintRequest { outputs }, }) } #[wasm_bindgen(getter)] - pub fn outputs(&self) -> Result { - serde_json::to_string(&self.inner.outputs).map_err(into_err) + pub fn outputs(&self) -> Result { + serde_wasm_bindgen::to_value(&self.inner.outputs).map_err(into_err) } #[wasm_bindgen(js_name = totalAmount)] @@ -70,15 +70,15 @@ impl From for JsPostMintResponse { impl JsPostMintResponse { /// Try From Base 64 String #[wasm_bindgen(constructor)] - pub fn new(promises: String) -> Result { - let promises = serde_json::from_str(&promises).map_err(into_err)?; + pub fn new(promises: JsValue) -> Result { + let promises = serde_wasm_bindgen::from_value(promises).map_err(into_err)?; Ok(JsPostMintResponse { inner: PostMintResponse { promises }, }) } #[wasm_bindgen(getter)] - pub fn promises(&self) -> Result { - serde_json::to_string(&self.inner.promises).map_err(into_err) + pub fn promises(&self) -> Result { + serde_wasm_bindgen::to_value(&self.inner.promises).map_err(into_err) } } diff --git a/bindings/cashu-js/src/nuts/nut06.rs b/bindings/cashu-js/src/nuts/nut06.rs index e9749450..eb6272ce 100644 --- a/bindings/cashu-js/src/nuts/nut06.rs +++ b/bindings/cashu-js/src/nuts/nut06.rs @@ -29,9 +29,9 @@ impl From for JsSplitRequest { #[wasm_bindgen(js_class = SplitRequest)] impl JsSplitRequest { #[wasm_bindgen(constructor)] - pub fn new(proofs: String, outputs: String) -> Result { - let proofs = serde_json::from_str(&proofs).map_err(into_err)?; - let outputs = serde_json::from_str(&outputs).map_err(into_err)?; + pub fn new(proofs: JsValue, outputs: JsValue) -> Result { + let proofs = serde_wasm_bindgen::from_value(proofs).map_err(into_err)?; + let outputs = serde_wasm_bindgen::from_value(outputs).map_err(into_err)?; Ok(JsSplitRequest { inner: SplitRequest { @@ -44,14 +44,14 @@ impl JsSplitRequest { /// Get Proofs #[wasm_bindgen(getter)] - pub fn proofs(&self) -> Result { - serde_json::to_string(&self.inner.proofs).map_err(into_err) + pub fn proofs(&self) -> Result { + serde_wasm_bindgen::to_value(&self.inner.proofs).map_err(into_err) } /// Get Outputs #[wasm_bindgen(getter)] - pub fn outputs(&self) -> Result { - serde_json::to_string(&self.inner.outputs).map_err(into_err) + pub fn outputs(&self) -> Result { + serde_wasm_bindgen::to_value(&self.inner.outputs).map_err(into_err) } /// Proofs Amount @@ -88,8 +88,8 @@ impl From for JsSplitResponse { #[wasm_bindgen(js_class = SplitResponse)] impl JsSplitResponse { #[wasm_bindgen(constructor)] - pub fn new(promises: String) -> Result { - let promises = serde_json::from_str(&promises).map_err(into_err)?; + pub fn new(promises: JsValue) -> Result { + let promises = serde_wasm_bindgen::from_value(promises).map_err(into_err)?; Ok(JsSplitResponse { inner: SplitResponse { @@ -102,8 +102,8 @@ impl JsSplitResponse { /// Get Promises #[wasm_bindgen(getter)] - pub fn promises(&self) -> Result { - serde_json::to_string(&self.inner.promises).map_err(into_err) + pub fn promises(&self) -> Result { + serde_wasm_bindgen::to_value(&self.inner.promises).map_err(into_err) } /// Promises Amount diff --git a/bindings/cashu-js/src/nuts/nut07.rs b/bindings/cashu-js/src/nuts/nut07.rs index 2ba4516e..66409a38 100644 --- a/bindings/cashu-js/src/nuts/nut07.rs +++ b/bindings/cashu-js/src/nuts/nut07.rs @@ -27,8 +27,8 @@ impl From for JsCheckSpendableRequest { impl JsCheckSpendableRequest { // REVIEW: Use into serde #[wasm_bindgen(constructor)] - pub fn new(proofs: String) -> Result { - let proofs = serde_json::from_str(&proofs).map_err(into_err)?; + pub fn new(proofs: JsValue) -> Result { + let proofs = serde_wasm_bindgen::from_value(proofs).map_err(into_err)?; Ok(JsCheckSpendableRequest { inner: CheckSpendableRequest { proofs }, @@ -38,8 +38,8 @@ impl JsCheckSpendableRequest { /// Get Proofs #[wasm_bindgen(getter)] // REVIEW: INTO Serde - pub fn proofs(&self) -> Result { - serde_json::to_string(&self.inner.proofs).map_err(into_err) + pub fn proofs(&self) -> Result { + serde_wasm_bindgen::to_value(&self.inner.proofs).map_err(into_err) } } @@ -64,21 +64,10 @@ impl From for JsCheckSpendableResponse { #[wasm_bindgen(js_class = CheckSpendableResponse)] impl JsCheckSpendableResponse { #[wasm_bindgen(constructor)] - pub fn new( - js_spendable: Box<[JsValue]>, - js_pending: Box<[JsValue]>, - ) -> Result { - let spendable: Vec = js_spendable.iter().flat_map(|s| s.as_bool()).collect(); + pub fn new(spendable: JsValue, pending: JsValue) -> Result { + let spendable = serde_wasm_bindgen::from_value(spendable).map_err(into_err)?; - if spendable.len().ne(&js_spendable.len()) { - return Err(JsValue::from_str("Wrong value")); - } - - let pending: Vec = js_pending.iter().flat_map(|p| p.as_bool()).collect(); - - if pending.len().ne(&js_pending.len()) { - return Err(JsValue::from_str("Wrong value")); - } + let pending = serde_wasm_bindgen::from_value(pending).map_err(into_err)?; Ok(JsCheckSpendableResponse { inner: CheckSpendableResponse { spendable, pending },