From 82c39b9633e08df6e461b47d2ae66bfd7085efd7 Mon Sep 17 00:00:00 2001 From: spinline Date: Wed, 4 Feb 2026 00:49:50 +0300 Subject: [PATCH] fix(backend): use i4 instead of i8 for xmlrpc integer params --- backend/src/xmlrpc.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/backend/src/xmlrpc.rs b/backend/src/xmlrpc.rs index 9139a46..9ca6022 100644 --- a/backend/src/xmlrpc.rs +++ b/backend/src/xmlrpc.rs @@ -71,9 +71,10 @@ struct RequestParam<'a> { struct RequestValueInner<'a> { #[serde(skip_serializing_if = "Option::is_none")] string: Option<&'a str>, - // rTorrent uses i8/i4. Let's use i8 (64-bit) which is safer for large limits/sizes + // rTorrent standard is often i4 (32-bit signed int). i8 might not be supported by all XML-RPC libs. + // Casting i64 to i32 is safe for typical speed limits. #[serde(skip_serializing_if = "Option::is_none")] - i8: Option, + i4: Option, } // --- Response Models for d.multicall2 --- @@ -223,11 +224,11 @@ impl RtorrentClient { value: match p { RpcParam::String(s) => RequestValueInner { string: Some(s), - i8: None, + i4: None, }, RpcParam::Int(i) => RequestValueInner { string: None, - i8: Some(*i), + i4: Some(*i as i32), }, }, }) @@ -311,10 +312,8 @@ mod tests { let client = RtorrentClient::new("dummy"); let params = vec![RpcParam::Int(1024)]; let xml = client.build_method_call("test.int", ¶ms).unwrap(); - // quick-xml default for i64 might be just text inside tag if not renamed? - // We mapped i8 field to i64 value. - // It should produce 1024 - assert!(xml.contains("1024")); + // Should produce 1024 + assert!(xml.contains("1024")); } #[test]