diff options
| author | jakka <jakka@jakka.su> | 2025-10-19 13:52:31 +0300 |
|---|---|---|
| committer | jakka <jakka@jakka.su> | 2025-10-19 13:52:31 +0300 |
| commit | 73d2abeab17a63815476f76c29c3b9dd70820ccc (patch) | |
| tree | baa0ac5520e6f137905b07b28803c475c3d19554 /src | |
| parent | 0e0164158366389cf7c749089881f987ef8fc4d5 (diff) | |
added serde derives
rewrote file request object serialization in serde derives instead of
manually checking for options
Diffstat (limited to 'src')
| -rw-r--r-- | src/types.rs | 51 |
1 files changed, 7 insertions, 44 deletions
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<bool>, + #[serde(skip_serializing_if = "Option::is_none")] pub file_service_key: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] pub file_service_keys: Option<Vec<String>>, + #[serde(skip_serializing_if = "Option::is_none")] pub deleted_file_service_key: Option<String>, + #[serde(skip_serializing_if = "Option::is_none")] pub deleted_file_service_keys: Option<Vec<String>>, + #[serde(skip_serializing_if = "Option::is_none")] 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.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 { |
