13 个版本 (5 个稳定版)
1.0.4 | 2022年5月7日 |
---|---|
1.0.3 | 2021年12月12日 |
1.0.2 | 2021年10月28日 |
0.2.1 | 2021年10月23日 |
0.1.0 | 2021年9月16日 |
#622 in 网络编程
每月下载量 47 次
在 rtorrent-utils 中使用
72KB
1K SLoC
rtorrent-xmlrpc-bindings
针对 XMLRPC rtorrent API 的类型化 Rust 绑定
接口
顶级结构是 Server
,它表示一个逻辑 XMLRPC 端点。(目前只支持 HTTP 端点,但可以相对容易地进行扩展。)
可以通过 Server::download_list()
获取已加载的种子列表。 Download
对象表示一个已加载的种子(由 SHA1 摘要识别,十六进制表示)。
对于每个 Download
,都有一些访问器可以访问该已加载种子的属性。(Download
上的访问器对应于 rtorrent API 中的 d.*
方法。)此外,可以通过 Download::trackes()
获取该下载的跟踪器列表。
Tracker
对象表示特定下载的跟踪器。(Tracker
上的访问器对应于 rtorrent API 中的 t.*
方法。)一个例子是 Tracker::url()
。
可以通过 Download::peers()
方法获取已加载种子的 Peer
。Peer 代表特定种子的其他参与者。(Peer
上的访问器对应于 rtorrent API 中的 p.*
方法。)一个例子是 Peer::address()
。
File
对象代表与下载相关联的单独文件。下载可能有一个或多个 Download::files()
。对 File
的访问器对应于 rtorrent API 中的 f.*
方法。例如 File::path()
。
示例
对于每个种子,打印其名称和是否活跃。
use rtorrent_xmlrpc_bindings as rtorrent;
use rtorrent::Result;
fn main() -> Result<()> {
let handle = rtorrent::Server::new("http://1.2.3.4/RPC2");
for dl in handle.download_list()? {
println!("{}: {}", dl.name()?, if dl.is_active()? { "active" } else { "inactive" });
}
Ok(())
}
使用多调用 API 执行相同操作。
use rtorrent_xmlrpc_bindings as rtorrent;
use rtorrent::multicall::d;
let handle = rtorrent::Server::new("http://1.2.3.4/RPC2");
d::MultiBuilder::new("default")
.call(d::NAME)
.call(d::IS_ACTIVE)
.invoke()?
.iter()
.for_each(|(name, active)| {
println!("{}: {}", name, if active { "active" } else { "inactive" });
});
依赖关系
~1.5MB
~32K SLoC