getblob/
getblob.rs

1use tokio;
2use threema_client::blob_api;
3use std::io::prelude::*;
4use env_logger;
5
6#[tokio::main]
7async fn main(){
8    env_logger::init();
9    let argv = std::env::args().collect::<Vec<_>>();
10    let hexid;
11    let mark_done;
12    if argv.len() == 2 {
13        hexid = &argv[1];
14        mark_done = false;
15    }
16    else if argv.len() == 3 && argv[1] == "-d" {
17        hexid = &argv[2];
18        mark_done = true;
19    }
20    else {
21        eprintln!("usage: {} HEXBLOBREF", std::env::args().next().unwrap());
22        std::process::exit(1);
23    }
24    let blobref = blob_api::BlobRef::from_hex(hexid).expect("invalid id given.");
25    let c = blob_api::Client::new();
26    let blob = c.download(&blobref).await.expect("retrieving blob");
27    std::io::stdout().lock().write_all(&blob).expect("write out failed");
28    if mark_done {
29        c.mark_done(&blobref.id).await.expect("mark_done failed");
30    }
31}