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 中使用

MIT 许可证

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