#aria2c #aria2

aria2-rs-yet

Yet Another Aria2 JSON-RPC Client

6 releases

new 0.1.5 Apr 26, 2025
0.1.4 Apr 23, 2025
0.1.1 Jan 13, 2025

#93 in WebSocket

Download history 232/week @ 2025-01-10 31/week @ 2025-01-17 2/week @ 2025-01-31 1/week @ 2025-02-07 34/week @ 2025-02-14 14/week @ 2025-02-21 14/week @ 2025-02-28 123/week @ 2025-04-04 137/week @ 2025-04-11 147/week @ 2025-04-18

407 downloads per month

MIT license

32KB
836 lines

Aria2-rs

Crates.io

Yet Another Aria2 JSON-RPC Client. Inspired by aria2-rs

Features

  • Simple direct call via websocket.
  • Notification from websocket.

example

download a file and print taks status.

use aria2_rs_yet::{Client, ConnectionMeta, Result};
use aria2_rs_yet::call::{AddUri, TellStatus, TellStatusField};
use aria2_rs_yet::options::Aria2Options;

#[tokio::main]
async fn main() -> Result<()> {
    tracing_subscriber::fmt().with_max_level(tracing::Level::INFO).init();
    
    let (client, _) = Client::connect(
        ConnectionMeta::new(
            "ws://localhost:6800/jsonrpc",
            Some("<rpc-secret>"),
        )
    ).await?;

    let gid = client.call(
        AddUri::new(
            vec!["https://github.com/hxzhao527/aria2-rs-yet/archive/refs/heads/master.zip"],
            Some(Aria2Options{
                dir: Some("/tmp".to_string()),
                out: Some("aria2-rs-yet.zip".to_string()),
                ..Default::default()
            }),
            None,
        )
    ).await?;
    println!("{:?}", gid);

    let status = client.call(
        TellStatus::new(gid).fields(Some([TellStatusField::Status, TellStatusField::Gid]))
    ).await?;
    println!("{:?}", status);

    // drop(client); // uncomment this line to see the client disconnecting
    println!("waiting for ctrl-c");
    tokio::signal::ctrl_c().await.unwrap();
    Ok(())
}

License

MIT License

Dependencies

~5–12MB
~127K SLoC