From 73d2abeab17a63815476f76c29c3b9dd70820ccc Mon Sep 17 00:00:00 2001 From: jakka Date: Sun, 19 Oct 2025 13:52:31 +0300 Subject: added serde derives rewrote file request object serialization in serde derives instead of manually checking for options --- src/types.rs | 51 +++++++-------------------------------------------- 1 file changed, 7 insertions(+), 44 deletions(-) (limited to 'src/types.rs') diff --git a/src/types.rs b/src/types.rs index ddc238b..7518760 100644 --- a/src/types.rs +++ b/src/types.rs @@ -136,60 +136,23 @@ impl Default for HydrusFile { } /// Payload for various file-related requests -#[derive(Debug, Default)] +#[derive(Debug, Default, Serialize)] pub(crate) struct FileRequest { pub file: HydrusFile, + #[serde(skip_serializing_if = "Option::is_none")] pub delete_after_successful_import: Option, + #[serde(skip_serializing_if = "Option::is_none")] pub file_service_key: Option, + #[serde(skip_serializing_if = "Option::is_none")] pub file_service_keys: Option>, + #[serde(skip_serializing_if = "Option::is_none")] pub deleted_file_service_key: Option, + #[serde(skip_serializing_if = "Option::is_none")] pub deleted_file_service_keys: Option>, + #[serde(skip_serializing_if = "Option::is_none")] pub reason: Option, } -impl Serialize for FileRequest { - fn serialize(&self, serializer: S) -> Result - 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.delete_after_successful_import { - map.serialize_entry("delete_after_successful_import", 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() - } -} - /// object for per-item hash response #[derive(Debug, Deserialize)] pub struct HashResponse { -- cgit v1.3.1