From 8b16996cb914d0da9d6ae5444b798bf76365c7b3 Mon Sep 17 00:00:00 2001 From: thesimplekid Date: Fri, 22 Dec 2023 18:07:18 +0000 Subject: [PATCH] refactor: join_url accepts slice --- crates/cashu-sdk/src/client/gloo_client.rs | 14 ++++++------- crates/cashu-sdk/src/client/minreq_client.rs | 15 +++++++------ crates/cashu-sdk/src/client/mod.rs | 22 +++++++++++--------- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/crates/cashu-sdk/src/client/gloo_client.rs b/crates/cashu-sdk/src/client/gloo_client.rs index 9cc83622..5a0b23af 100644 --- a/crates/cashu-sdk/src/client/gloo_client.rs +++ b/crates/cashu-sdk/src/client/gloo_client.rs @@ -21,7 +21,7 @@ pub struct HttpClient {} impl Client for HttpClient { /// Get Mint Keys [NUT-01] async fn get_mint_keys(&self, mint_url: Url) -> Result { - let url = join_url(mint_url, "keys")?; + let url = join_url(mint_url, &["v1", "keys"])?; let keys = Request::get(url.as_str()) .send() .await @@ -36,7 +36,7 @@ impl Client for HttpClient { /// Get Keysets [NUT-02] async fn get_mint_keysets(&self, mint_url: Url) -> Result { - let url = join_url(mint_url, "keysets")?; + let url = join_url(mint_url, &["v1", "keysets"])?; let res = Request::get(url.as_str()) .send() .await @@ -61,7 +61,7 @@ impl Client for HttpClient { quote: &str, premint_secrets: PreMintSecrets, ) -> Result { - let url = join_url(mint_url, "mint")?; + let url = join_url(mint_url, &["mint"])?; let request = MintBolt11Request { quote: quote.to_string(), @@ -96,7 +96,7 @@ impl Client for HttpClient { inputs: Vec, outputs: Option>, ) -> Result { - let url = join_url(mint_url, "melt")?; + let url = join_url(mint_url, &["melt"])?; let request = MeltBolt11Request { quote, @@ -129,7 +129,7 @@ impl Client for HttpClient { mint_url: Url, split_request: SwapRequest, ) -> Result { - let url = join_url(mint_url, "split")?; + let url = join_url(mint_url, &["v1", "split"])?; let res = Request::post(url.as_str()) .json(&split_request) @@ -156,7 +156,7 @@ impl Client for HttpClient { mint_url: Url, proofs: Vec, ) -> Result { - let url = join_url(mint_url, "check")?; + let url = join_url(mint_url, &["v1", "check"])?; let request = CheckSpendableRequest { proofs: proofs.to_owned(), }; @@ -182,7 +182,7 @@ impl Client for HttpClient { /// Get Mint Info [NUT-09] async fn get_mint_info(&self, mint_url: Url) -> Result { - let url = join_url(mint_url, "info")?; + let url = join_url(mint_url, &["v1", "info"])?; let res = Request::get(url.as_str()) .send() .await diff --git a/crates/cashu-sdk/src/client/minreq_client.rs b/crates/cashu-sdk/src/client/minreq_client.rs index dbf6f22e..bf0572a2 100644 --- a/crates/cashu-sdk/src/client/minreq_client.rs +++ b/crates/cashu-sdk/src/client/minreq_client.rs @@ -22,7 +22,7 @@ pub struct HttpClient {} impl Client for HttpClient { /// Get Mint Keys [NUT-01] async fn get_mint_keys(&self, mint_url: Url) -> Result { - let url = join_url(mint_url, "keys")?; + let url = join_url(mint_url, &["v1", "keys"])?; let keys = minreq::get(url).send()?.json::()?; let keys: Keys = serde_json::from_str(&keys.to_string())?; @@ -31,7 +31,7 @@ impl Client for HttpClient { /// Get Keysets [NUT-02] async fn get_mint_keysets(&self, mint_url: Url) -> Result { - let url = join_url(mint_url, "keysets")?; + let url = join_url(mint_url, &["v1", "keysets"])?; let res = minreq::get(url).send()?.json::()?; let response: Result = @@ -50,7 +50,7 @@ impl Client for HttpClient { quote: &str, premint_secrets: PreMintSecrets, ) -> Result { - let url = join_url(mint_url, "mint")?; + let url = join_url(mint_url, &["v1", "mint"])?; let request = MintBolt11Request { quote: quote.to_string(), @@ -80,7 +80,7 @@ impl Client for HttpClient { inputs: Vec, outputs: Option>, ) -> Result { - let url = join_url(mint_url, "melt")?; + let url = join_url(mint_url, &["v1", "melt"])?; let request = MeltBolt11Request { quote, @@ -109,7 +109,7 @@ impl Client for HttpClient { split_request: SwapRequest, ) -> Result { // TODO: Add to endpoint - let url = join_url(mint_url, "swap")?; + let url = join_url(mint_url, &["v1", "swap"])?; let res = minreq::post(url).with_json(&split_request)?.send()?; @@ -128,7 +128,7 @@ impl Client for HttpClient { mint_url: Url, proofs: Vec, ) -> Result { - let url = join_url(mint_url, "check")?; + let url = join_url(mint_url, &["v1", "check"])?; let request = CheckSpendableRequest { proofs }; let res = minreq::post(url) @@ -147,8 +147,7 @@ impl Client for HttpClient { /// Get Mint Info [NUT-09] async fn get_mint_info(&self, mint_url: Url) -> Result { - let url = join_url(mint_url, "v1")?; - let url = join_url(url, "info")?; + let url = join_url(mint_url, &["v1", "info"])?; println!("{}", url); diff --git a/crates/cashu-sdk/src/client/mod.rs b/crates/cashu-sdk/src/client/mod.rs index 2ecb7ad5..44c2ed3a 100644 --- a/crates/cashu-sdk/src/client/mod.rs +++ b/crates/cashu-sdk/src/client/mod.rs @@ -123,17 +123,19 @@ pub trait Client { } #[cfg(any(not(target_arch = "wasm32"), feature = "gloo"))] -fn join_url(url: Url, path: &str) -> Result { +fn join_url(url: Url, paths: &[&str]) -> Result { let mut url = url; - if !url.path().ends_with('/') { - url.path_segments_mut() - .map_err(|_| Error::Custom("Url Path Segmants".to_string()))? - .push(path); - } else { - url.path_segments_mut() - .map_err(|_| Error::Custom("Url Path Segmants".to_string()))? - .pop() - .push(path); + for path in paths { + if !url.path().ends_with('/') { + url.path_segments_mut() + .map_err(|_| Error::Custom("Url Path Segmants".to_string()))? + .push(path); + } else { + url.path_segments_mut() + .map_err(|_| Error::Custom("Url Path Segmants".to_string()))? + .pop() + .push(path); + } } Ok(url)