summaryrefslogtreecommitdiff
path: root/src/client.rs
diff options
context:
space:
mode:
authorjakka <jakka@jakka.su>2025-09-17 23:02:14 +0300
committerjakka <jakka@jakka.su>2025-09-17 23:02:14 +0300
commit2cea08a292a75abce7130c1d8522de7cb9739cb6 (patch)
tree212161635213ec2cb6d749b2440840931aaa2d50 /src/client.rs
parente67153693983c8fff3d45f22e3fe8cd3e3a00418 (diff)
implemeted better nested hydrus api response objects
Diffstat (limited to 'src/client.rs')
-rw-r--r--src/client.rs47
1 files changed, 25 insertions, 22 deletions
diff --git a/src/client.rs b/src/client.rs
index a8061e4..28e3544 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -1,8 +1,7 @@
-use std::path::PathBuf;
+use std::{collections::HashMap, path::PathBuf};
use async_trait::async_trait;
use reqwest::{Body, RequestBuilder};
-use serde_json::Value;
use tokio_util::codec::{BytesCodec, FramedRead};
use crate::{traits::*, types::*};
@@ -124,14 +123,13 @@ impl AccessManagement for HydrusClient {
req_url.push_str("get_service?service_name=");
req_url.push_str(&urlencoding::encode(name));
- Ok(serde_json::from_value::<Service>(
- self.set_get_request_key(&req_url)?
- .send()
- .await?
- .json::<Value>()
- .await?["service"]
- .take(),
- )?)
+ Ok(self
+ .set_get_request_key(&req_url)?
+ .send()
+ .await?
+ .json::<HydrusResponse<Service>>()
+ .await?
+ .body)
}
async fn get_service_key(&self, key: &str) -> Result<Service> {
@@ -139,27 +137,32 @@ impl AccessManagement for HydrusClient {
req_url.push_str("get_service?service_key=");
req_url.push_str(&urlencoding::encode(key));
- Ok(serde_json::from_value::<Service>(
- self.set_get_request_key(&req_url)?
- .send()
- .await?
- .json::<Value>()
- .await?["service"]
- .take(),
- )?)
+ Ok(self
+ .set_get_request_key(&req_url)?
+ .send()
+ .await?
+ .json::<HydrusResponse<Service>>()
+ .await?
+ .body)
}
- async fn get_services(&self) -> Result<Vec<Service>> {
+ async fn get_services(&self) -> Result<HashMap<String, Service>> {
let mut req_url = self.url.to_owned();
req_url.push_str("get_services");
- Ok(self
+ let mut services = self
.set_get_request_key(&req_url)?
.send()
.await?
- .json::<ServiceResponse>()
+ .json::<HydrusResponse<HashMap<String, Service>>>()
.await?
- .service_vec())
+ .body;
+
+ for (key, service) in services.iter_mut() {
+ service.service_key = key.to_string();
+ }
+
+ Ok(services)
}
}