diff --git a/src/types/mod.rs b/src/types/mod.rs index 4ef6cf7..3e3da76 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -12,7 +12,7 @@ pub struct BasicAuth { pub(crate) use self::request::RpcRequest; pub use self::request::{ ArgumentFields, Id, TorrentAction, TorrentAddArgs, TorrentGetField, TorrentRenamePathArgs, - TorrentSetArgs, + TorrentSetArgs, TrackerList, }; pub(crate) use self::response::RpcResponseArgument; diff --git a/src/types/request.rs b/src/types/request.rs index e165d4a..d9bdb6c 100644 --- a/src/types/request.rs +++ b/src/types/request.rs @@ -351,16 +351,73 @@ impl TorrentAction { } } +#[derive(Debug, Clone, Default)] +pub struct TrackerList(pub Vec); + +impl Serialize for TrackerList { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + self.0.join("\n").serialize(serializer) + } +} + #[derive(Serialize, Debug, Clone, Default)] +#[serde(rename_all = "camelCase")] pub struct TorrentSetArgs { #[serde(skip_serializing_if = "Option::is_none")] - pub labels: Option>, - #[serde(rename = "priority-low", skip_serializing_if = "Option::is_none")] - pub priority_low: Option>, - #[serde(rename = "priority-normal", skip_serializing_if = "Option::is_none")] - pub priority_normal: Option>, - #[serde(rename = "priority-high", skip_serializing_if = "Option::is_none")] - pub priority_high: Option>, + pub bandwidth_priority: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub download_limit: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub download_limited: Option, + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(rename = "files-wanted")] + pub files_wanted: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(rename = "files-unwanted")] + pub files_unwanted: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + pub honors_session_limits: Option, #[serde(skip_serializing_if = "Option::is_none")] pub ids: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + pub location: Option, + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(rename = "peer-limit")] + pub peer_limit: Option, + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(rename = "priority-high")] + pub priority_high: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(rename = "priority-low")] + pub priority_low: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(rename = "priority-normal")] + pub priority_normal: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + pub queue_position: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub seed_idle_limit: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub seed_idle_mode: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub seed_ratio_limit: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub seed_ratio_mode: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub tracker_add: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + pub tracker_list: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub tracker_remove: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + pub tracker_replace: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + pub upload_limit: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub upload_limited: Option, }