pkg/callback/
plain.rs

1use std::io::Write;
2
3use crate::Callback;
4
5#[derive(Clone)]
6pub struct PlainCallback {
7    size: u64,
8    pos: u64,
9    len: u64,
10    seek: u64,
11}
12
13impl PlainCallback {
14    pub fn new() -> Self {
15        Self {
16            size: 0,
17            pos: 0,
18            len: 10,
19            seek: 0,
20        }
21    }
22
23    fn flush(&self) {
24        let _ = std::io::stderr().flush();
25    }
26}
27
28impl Callback for PlainCallback {
29    fn start_download(&mut self, length: u64, file: &str) {
30        eprint!("Downloading {}", file);
31        self.size = length;
32        self.pos = 0;
33        self.seek = 0;
34        self.flush();
35    }
36
37    fn increment_downloaded(&mut self, downloaded: usize) {
38        self.pos += downloaded as u64;
39        let new_seek = (self.pos * self.len) / self.size;
40        while self.seek < new_seek {
41            self.seek += 1;
42            eprint!(".");
43        }
44        self.flush();
45    }
46
47    fn end_download(&mut self) {
48        while self.seek < self.len {
49            self.seek += 1;
50            eprint!(".");
51        }
52        eprintln!("done");
53    }
54}