bindings/cashu-js use serde_wasm_bindgen for generic types

This commit is contained in:
thesimplekid
2023-09-25 22:43:29 +01:00
parent 5e9cd1827b
commit 9b40784a88
6 changed files with 36 additions and 49 deletions

View File

@@ -27,9 +27,9 @@ impl From<Token> 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<String>) -> Result<JsToken> {
pub fn new(mint: String, proofs: JsValue, memo: Option<String>) -> Result<JsToken> {
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<String> {
self.inner.convert_to_string().map_err(into_err)
}
// TODO: Getter mint proofs
}

View File

@@ -32,8 +32,8 @@ impl From<Keys> for JsKeys {
impl JsKeys {
/// From Hex
#[wasm_bindgen(constructor)]
pub fn new(keys: String) -> Result<JsKeys> {
let keys = serde_json::from_str(&keys).map_err(into_err)?;
pub fn new(keys: JsValue) -> Result<JsKeys> {
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<String> {
serde_json::to_string(&self.inner.keys()).map_err(into_err)
pub fn keys(&self) -> Result<JsValue> {
serde_wasm_bindgen::to_value(&self.inner.keys()).map_err(into_err)
}
/// Amount Key

View File

@@ -108,14 +108,14 @@ impl From<Response> for JsKeyResponse {
impl JsKeyResponse {
/// From Hex
#[wasm_bindgen(constructor)]
pub fn new(keysets: String) -> Result<JsKeyResponse> {
let response = serde_json::from_str(&keysets).map_err(into_err)?;
pub fn new(keysets: JsValue) -> Result<JsKeyResponse> {
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<String> {
serde_json::to_string(&self.inner.keysets).map_err(into_err)
pub fn keysets(&self) -> Result<JsValue> {
serde_wasm_bindgen::to_value(&self.inner.keysets).map_err(into_err)
}
}

View File

@@ -30,16 +30,16 @@ impl From<MintRequest> for JsMintRequest {
impl JsMintRequest {
/// Try From Base 64 String
#[wasm_bindgen(constructor)]
pub fn new(outputs: String) -> Result<JsMintRequest> {
let outputs = serde_json::from_str(&outputs).map_err(into_err)?;
pub fn new(outputs: JsValue) -> Result<JsMintRequest> {
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<String> {
serde_json::to_string(&self.inner.outputs).map_err(into_err)
pub fn outputs(&self) -> Result<JsValue> {
serde_wasm_bindgen::to_value(&self.inner.outputs).map_err(into_err)
}
#[wasm_bindgen(js_name = totalAmount)]
@@ -70,15 +70,15 @@ impl From<PostMintResponse> for JsPostMintResponse {
impl JsPostMintResponse {
/// Try From Base 64 String
#[wasm_bindgen(constructor)]
pub fn new(promises: String) -> Result<JsPostMintResponse> {
let promises = serde_json::from_str(&promises).map_err(into_err)?;
pub fn new(promises: JsValue) -> Result<JsPostMintResponse> {
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<String> {
serde_json::to_string(&self.inner.promises).map_err(into_err)
pub fn promises(&self) -> Result<JsValue> {
serde_wasm_bindgen::to_value(&self.inner.promises).map_err(into_err)
}
}

View File

@@ -29,9 +29,9 @@ impl From<SplitRequest> for JsSplitRequest {
#[wasm_bindgen(js_class = SplitRequest)]
impl JsSplitRequest {
#[wasm_bindgen(constructor)]
pub fn new(proofs: String, outputs: String) -> Result<JsSplitRequest> {
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<JsSplitRequest> {
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<String> {
serde_json::to_string(&self.inner.proofs).map_err(into_err)
pub fn proofs(&self) -> Result<JsValue> {
serde_wasm_bindgen::to_value(&self.inner.proofs).map_err(into_err)
}
/// Get Outputs
#[wasm_bindgen(getter)]
pub fn outputs(&self) -> Result<String> {
serde_json::to_string(&self.inner.outputs).map_err(into_err)
pub fn outputs(&self) -> Result<JsValue> {
serde_wasm_bindgen::to_value(&self.inner.outputs).map_err(into_err)
}
/// Proofs Amount
@@ -88,8 +88,8 @@ impl From<SplitResponse> for JsSplitResponse {
#[wasm_bindgen(js_class = SplitResponse)]
impl JsSplitResponse {
#[wasm_bindgen(constructor)]
pub fn new(promises: String) -> Result<JsSplitResponse> {
let promises = serde_json::from_str(&promises).map_err(into_err)?;
pub fn new(promises: JsValue) -> Result<JsSplitResponse> {
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<String> {
serde_json::to_string(&self.inner.promises).map_err(into_err)
pub fn promises(&self) -> Result<JsValue> {
serde_wasm_bindgen::to_value(&self.inner.promises).map_err(into_err)
}
/// Promises Amount

View File

@@ -27,8 +27,8 @@ impl From<CheckSpendableRequest> for JsCheckSpendableRequest {
impl JsCheckSpendableRequest {
// REVIEW: Use into serde
#[wasm_bindgen(constructor)]
pub fn new(proofs: String) -> Result<JsCheckSpendableRequest> {
let proofs = serde_json::from_str(&proofs).map_err(into_err)?;
pub fn new(proofs: JsValue) -> Result<JsCheckSpendableRequest> {
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<String> {
serde_json::to_string(&self.inner.proofs).map_err(into_err)
pub fn proofs(&self) -> Result<JsValue> {
serde_wasm_bindgen::to_value(&self.inner.proofs).map_err(into_err)
}
}
@@ -64,21 +64,10 @@ impl From<CheckSpendableResponse> for JsCheckSpendableResponse {
#[wasm_bindgen(js_class = CheckSpendableResponse)]
impl JsCheckSpendableResponse {
#[wasm_bindgen(constructor)]
pub fn new(
js_spendable: Box<[JsValue]>,
js_pending: Box<[JsValue]>,
) -> Result<JsCheckSpendableResponse> {
let spendable: Vec<bool> = js_spendable.iter().flat_map(|s| s.as_bool()).collect();
pub fn new(spendable: JsValue, pending: JsValue) -> Result<JsCheckSpendableResponse> {
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<bool> = 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 },