Browse Source

refactor: join_url accepts slice

thesimplekid 1 year ago
parent
commit
8b16996cb9

+ 7 - 7
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<Keys, Error> {
-        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<KeysetResponse, Error> {
-        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<MintBolt11Response, Error> {
-        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<Proof>,
         outputs: Option<Vec<BlindedMessage>>,
     ) -> Result<MeltBolt11Response, Error> {
-        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<SwapResponse, Error> {
-        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<nut00::mint::Proof>,
     ) -> Result<CheckSpendableResponse, Error> {
-        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<MintInfo, Error> {
-        let url = join_url(mint_url, "info")?;
+        let url = join_url(mint_url, &["v1", "info"])?;
         let res = Request::get(url.as_str())
             .send()
             .await

+ 7 - 8
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<Keys, Error> {
-        let url = join_url(mint_url, "keys")?;
+        let url = join_url(mint_url, &["v1", "keys"])?;
         let keys = minreq::get(url).send()?.json::<Value>()?;
 
         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<KeysetResponse, Error> {
-        let url = join_url(mint_url, "keysets")?;
+        let url = join_url(mint_url, &["v1", "keysets"])?;
         let res = minreq::get(url).send()?.json::<Value>()?;
 
         let response: Result<KeysetResponse, serde_json::Error> =
@@ -50,7 +50,7 @@ impl Client for HttpClient {
         quote: &str,
         premint_secrets: PreMintSecrets,
     ) -> Result<MintBolt11Response, Error> {
-        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<Proof>,
         outputs: Option<Vec<BlindedMessage>>,
     ) -> Result<MeltBolt11Response, Error> {
-        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<SwapResponse, Error> {
         // 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<nut00::mint::Proof>,
     ) -> Result<CheckSpendableResponse, Error> {
-        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<MintInfo, Error> {
-        let url = join_url(mint_url, "v1")?;
-        let url = join_url(url, "info")?;
+        let url = join_url(mint_url, &["v1", "info"])?;
 
         println!("{}", url);
 

+ 12 - 10
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<Url, Error> {
+fn join_url(url: Url, paths: &[&str]) -> Result<Url, Error> {
     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)