transmission_client/
utils.rs1use serde::{Deserialize, Deserializer};
2
3pub fn torrent_fields() -> Vec<String> {
4 vec![
5 "id".into(),
6 "activityDate".into(),
7 "addedDate".into(),
8 "bandwidthPriority".into(),
9 "comment".into(),
10 "corruptEver".into(),
11 "creator".into(),
12 "dateCreated".into(),
13 "desiredAvailable".into(),
14 "doneDate".into(),
15 "downloadDir".into(),
16 "downloadedEver".into(),
17 "downloadLimit".into(),
18 "downloadLimited".into(),
19 "editDate".into(),
20 "error".into(),
21 "errorString".into(),
22 "eta".into(),
23 "etaIdle".into(),
24 "hashString".into(),
25 "haveUnchecked".into(),
26 "haveValid".into(),
27 "honorsSessionLimits".into(),
28 "isFinished".into(),
29 "isPrivate".into(),
30 "isStalled".into(),
31 "labels".into(),
32 "leftUntilDone".into(),
33 "magnetLink".into(),
34 "manualAnnounceTime".into(),
35 "metadataPercentComplete".into(),
36 "name".into(),
37 "percentDone".into(),
38 "pieces".into(),
39 "pieceCount".into(),
40 "pieceSize".into(),
41 "primary-mime-type".into(),
42 "queuePosition".into(),
43 "rateDownload".into(),
44 "rateUpload".into(),
45 "recheckProgress".into(),
46 "secondsDownloading".into(),
47 "secondsSeeding".into(),
48 "seedIdleLimit".into(),
49 "seedIdleMode".into(),
50 "seedRatioLimit".into(),
51 "seedRatioMode".into(),
52 "sizeWhenDone".into(),
53 "startDate".into(),
54 "status".into(),
55 "totalSize".into(),
56 "torrentFile".into(),
57 "uploadedEver".into(),
58 "uploadLimit".into(),
59 "uploadLimited".into(),
60 "uploadRatio".into(),
61 ]
62}
63
64pub fn torrent_files_fields() -> Vec<String> {
65 vec![
66 "id".into(),
67 "file-count".into(),
68 "files".into(),
69 "fileStats".into(),
70 "wanted".into(),
71 "priorities".into(),
72 ]
73}
74
75pub fn torrent_peers_fields() -> Vec<String> {
76 vec![
77 "id".into(),
78 "peer-limit".into(),
79 "peers".into(),
80 "peersConnected".into(),
81 "peersFrom".into(),
82 "peersGettingFromUs".into(),
83 "peersSendingToUs".into(),
84 "maxConnectedPeers".into(),
85 "webseeds".into(),
86 "webseedsSendingToUs".into(),
87 ]
88}
89
90pub fn torrent_trackers_fields() -> Vec<String> {
91 vec!["id".into(), "trackers".into(), "trackerStats".into()]
92}
93
94pub fn string_fallback<'de, D>(deserializer: D) -> Result<String, D::Error>
95where
96 D: Deserializer<'de>,
97{
98 #[derive(Deserialize)]
99 #[serde(untagged)]
100 enum StringOrNumber {
101 String(String),
102 Number(i64),
103 }
104
105 match StringOrNumber::deserialize(deserializer)? {
106 StringOrNumber::String(s) => Ok(s),
107 StringOrNumber::Number(i) => Ok(i.to_string()),
108 }
109}