summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjakka <jakka@jakka.su>2025-10-01 00:25:24 +0300
committerjakka <jakka@jakka.su>2025-10-01 00:25:24 +0300
commitc177ba7a49caf63582719a4086e5032e2c939cfa (patch)
treeb922d01ef0061137f79101ff1de513ba402fbfa2 /src
parent6b0a6c0ca36c181d55c78a5dca46f1890c9cce38 (diff)
reconfigured the library, moved async client and trait to their own module. in the future sync and async implementations will be separated
Diffstat (limited to 'src')
-rw-r--r--src/client_async.rs (renamed from src/client.rs)26
-rw-r--r--src/lib.rs8
-rw-r--r--src/tests.rs4
-rw-r--r--src/traits_async.rs (renamed from src/traits.rs)9
-rw-r--r--src/types.rs21
5 files changed, 61 insertions, 7 deletions
diff --git a/src/client.rs b/src/client_async.rs
index c73b962..c189a06 100644
--- a/src/client.rs
+++ b/src/client_async.rs
@@ -5,7 +5,7 @@ use reqwest::{Body, RequestBuilder};
use serde::Deserialize;
use tokio_util::codec::{BytesCodec, FramedRead};
-use crate::{traits::*, types::*};
+use crate::{traits_async::*, types::*};
type Result<T> = std::result::Result<T, HydrusError>;
@@ -81,7 +81,7 @@ impl AccessManagement for HydrusClient {
req_url.push_str("request_new_permissions");
let mut request = self.client.get(req_url);
- request = request.query(&[("name", &urlencoding::encode(&name))]);
+ request = request.query(&[("name", &urlencoding::encode(name))]);
if permissions.is_empty() {
request = request.query(&[("permit_everything", "true")]);
@@ -425,3 +425,25 @@ impl ImportingAndDeletingFiles for HydrusClient {
.await?)
}
}
+
+#[async_trait]
+impl ImportingAndEditingUrls for HydrusClient {
+ async fn get_url_files(
+ &self,
+ url: &str,
+ doublecheck_file_system: Option<bool>,
+ ) -> Result<FilesUrlResponse> {
+ let mut req_url = self.url.to_owned();
+ req_url.push_str("add_urls/get_url_files");
+
+ let mut request = self.set_get_request_key(&req_url)?;
+
+ request = request.query(&[("url", url)]);
+
+ if let Some(doublecheck) = doublecheck_file_system {
+ request = request.query(&[("doublecheck_file_system", doublecheck)]);
+ }
+
+ Ok(request.send().await?.json::<FilesUrlResponse>().await?)
+ }
+}
diff --git a/src/lib.rs b/src/lib.rs
index 3d70b70..c2a0350 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,9 +1,11 @@
//! crate with hydrus client and traits necessary for accesing hydrus API
-/// this crates hydrus client implementation
-pub mod client;
+/// this crate's hydrus client async implementation
+#[cfg(feature = "async")]
+pub mod client_async;
/// traits for accessing hydrus API
-pub mod traits;
+#[cfg(feature = "async")]
+pub mod traits_async;
/// various objects for de/serializing requests
pub mod types;
diff --git a/src/tests.rs b/src/tests.rs
index 5e8d9a7..8cb725e 100644
--- a/src/tests.rs
+++ b/src/tests.rs
@@ -1,5 +1,5 @@
-use crate::client::HydrusClient;
-use crate::{traits::*, types::*};
+use crate::client_async::HydrusClient;
+use crate::{traits_async::*, types::*};
#[tokio::test]
async fn test_service_name_info() {
diff --git a/src/traits.rs b/src/traits_async.rs
index 6cdf094..9c4de18 100644
--- a/src/traits.rs
+++ b/src/traits_async.rs
@@ -60,3 +60,12 @@ pub trait ImportingAndDeletingFiles {
/// Generate hashes for an arbitrary file by sending the file.
async fn generate_hashes_for_file(&self, file: PathBuf) -> Result<HashResponse>;
}
+
+#[async_trait]
+pub trait ImportingAndEditingUrls {
+ async fn get_url_files(
+ &self,
+ url: &str,
+ doublecheck_file_system: Option<bool>,
+ ) -> Result<FilesUrlResponse>;
+}
diff --git a/src/types.rs b/src/types.rs
index df2c387..7762065 100644
--- a/src/types.rs
+++ b/src/types.rs
@@ -226,3 +226,24 @@ pub struct HashResponse {
#[serde(default)]
pub pixel_hash: Option<String>,
}
+
+#[derive(Debug, Deserialize_repr)]
+#[repr(u8)]
+pub enum UrlStatus {
+ NotInDatabase = 0,
+ AlreadyInDatabase = 2,
+ PreviouslyDeleted,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct UrlFileStatus {
+ pub status: UrlStatus,
+ pub hash: String,
+ pub note: String,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct FilesUrlResponse {
+ pub normalised_url: String,
+ pub url_file_statuses: Vec<UrlFileStatus>,
+}