diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/client_async.rs (renamed from src/client.rs) | 26 | ||||
| -rw-r--r-- | src/lib.rs | 8 | ||||
| -rw-r--r-- | src/tests.rs | 4 | ||||
| -rw-r--r-- | src/traits_async.rs (renamed from src/traits.rs) | 9 | ||||
| -rw-r--r-- | src/types.rs | 21 |
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?) + } +} @@ -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>, +} |
