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}