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