diff options
| author | jakka <jakka@jakka.su> | 2025-09-18 17:12:57 +0300 |
|---|---|---|
| committer | jakka <jakka@jakka.su> | 2025-09-18 17:12:57 +0300 |
| commit | 6b0a6c0ca36c181d55c78a5dca46f1890c9cce38 (patch) | |
| tree | 31f47d540ee8f36a2a093b65161f655ba4a72455 /src/types.rs | |
| parent | bdc2e645c2d174881f7278139de95b141328431e (diff) | |
cleaned up documentation. added the rest of file importing and deleting api functions
Diffstat (limited to 'src/types.rs')
| -rw-r--r-- | src/types.rs | 112 |
1 files changed, 88 insertions, 24 deletions
diff --git a/src/types.rs b/src/types.rs index 39bb3b7..df2c387 100644 --- a/src/types.rs +++ b/src/types.rs @@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize}; use serde_repr::{Deserialize_repr, Serialize_repr}; use thiserror::Error; -/// various errors +/// Error wrapper #[derive(Error, Debug)] pub enum HydrusError { #[error("failed to connect to Hydrus")] @@ -35,7 +35,7 @@ impl From<reqwest::Error> for HydrusError { } } -/// hydrus permissions +/// Hydrus serivce permissions object #[derive(PartialEq, Debug, Clone, Serialize_repr, Deserialize_repr)] #[repr(u8)] pub enum HydrusPermissions { @@ -56,7 +56,7 @@ pub enum HydrusPermissions { Null = 255, } -/// hydrus key information struct +/// Hydrus key information struct #[derive(Deserialize, Debug)] pub struct KeyInfo { pub name: String, @@ -65,7 +65,7 @@ pub struct KeyInfo { pub human_permissions: String, } -/// hydrus service type struct +/// Hydrus service type object #[derive(PartialEq, Debug, Clone, Serialize_repr, Deserialize_repr)] #[repr(u8)] pub enum ServiceType { @@ -91,8 +91,8 @@ pub enum ServiceType { Null = 255, } -/// hydrus service struct -#[derive(Deserialize, Debug)] +/// Hydrus service struct +#[derive(Deserialize, Debug, Clone)] pub struct Service { pub name: String, #[serde(default)] @@ -107,7 +107,7 @@ pub struct Service { pub max_stars: Option<u8>, } -/// hydrus file domains +/// Hydrus file domains pub enum FileDomain { FileServiceKey(String), FileServiceKeys(Vec<String>), @@ -115,22 +115,22 @@ pub enum FileDomain { DeletedFileServiceKeys(Vec<String>), } -/// payload for importing a file via providing a local path +/// Payload for importing a file via providing a local path #[derive(Serialize, Debug, Default)] pub struct AddFileRequest { pub path: PathBuf, - #[serde(skip)] + #[serde(skip_serializing_if = "Option::is_none")] pub delete_after_successful_import: Option<bool>, - #[serde(skip)] + #[serde(skip_serializing_if = "Option::is_none")] pub file_service_key: Option<String>, - #[serde(skip)] + #[serde(skip_serializing_if = "Option::is_none")] pub file_service_keys: Option<Vec<String>>, - #[serde(skip)] + #[serde(skip_serializing_if = "Option::is_none")] pub deleted_file_service_key: Option<String>, - #[serde(skip)] + #[serde(skip_serializing_if = "Option::is_none")] pub deleted_file_service_keys: Option<Vec<String>>, } -/// file importing status +/// File importing status #[derive(PartialEq, Debug, Clone, Serialize_repr, Deserialize_repr)] #[repr(u8)] pub enum AddFileStatus { @@ -140,25 +140,89 @@ pub enum AddFileStatus { FailedToImport, FileVetoed = 7, } -/// file importing api response +/// File importing api response #[derive(Deserialize)] pub struct AddFileResponse { pub status: AddFileStatus, pub hash: String, pub note: String, } -/// payload for deleting a file -#[derive(Serialize, Debug, Default)] -pub struct DeleteFileRequest { - pub path: String, - #[serde(skip)] + +/// Hydrus file object +#[derive(Debug, Clone, Serialize)] +pub enum HydrusFile { + #[serde(rename(serialize = "file_id"))] + FileId(String), + #[serde(rename(serialize = "file_ids"))] + FileIds(Vec<String>), + #[serde(rename(serialize = "hash"))] + Hash(String), + #[serde(rename(serialize = "hashes"))] + Hashes(Vec<String>), +} + +impl Default for HydrusFile { + fn default() -> Self { + Self::FileId(String::from("")) + } +} + +/// Payload for various file-related requests +#[derive(Debug, Default)] +pub struct FileRequest { + pub file: HydrusFile, + pub delete_after_successful_import: Option<bool>, pub file_service_key: Option<String>, - #[serde(skip)] pub file_service_keys: Option<Vec<String>>, - #[serde(skip)] pub deleted_file_service_key: Option<String>, - #[serde(skip)] pub deleted_file_service_keys: Option<Vec<String>>, - #[serde(skip)] pub reason: Option<String>, } + +impl Serialize for FileRequest { + fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> + where + S: serde::Serializer, + { + use serde::ser::SerializeMap; + let mut map = serializer.serialize_map(Some(1))?; + + match &self.file { + HydrusFile::FileId(id) => map.serialize_entry("file_id", &id)?, + HydrusFile::FileIds(ids) => map.serialize_entry("file_ids", &ids)?, + HydrusFile::Hash(hash) => map.serialize_entry("hash", &hash)?, + HydrusFile::Hashes(hashes) => map.serialize_entry("hashes", &hashes)?, + } + + if let Some(val) = &self.reason { + map.serialize_entry("reason", &val)?; + } + + if let Some(val) = &self.file_service_key { + map.serialize_entry("file_service_key", &val)?; + } + + if let Some(val) = &self.file_service_keys { + map.serialize_entry("file_service_keys", &val)?; + } + + if let Some(val) = &self.deleted_file_service_key { + map.serialize_entry("deleted_file_service_key", &val)?; + } + + if let Some(val) = &self.deleted_file_service_keys { + map.serialize_entry("deleted_file_service_keys", &val)?; + } + + map.end() + } +} + +#[derive(Debug, Deserialize)] +pub struct HashResponse { + pub hash: String, + #[serde(default)] + pub perceptual_hashes: Option<Vec<String>>, + #[serde(default)] + pub pixel_hash: Option<String>, +} |
