1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use super::Progress;

#[derive(Default)]
pub struct ProgressBuilder {
    starting_value: Option<usize>,
    ending_value: Option<usize>,

    caption: Option<String>,
}

impl ProgressBuilder {
    pub fn new() -> Self {
        ProgressBuilder::default()
    }

    pub fn build(self) -> Progress {
        Progress {
            current: self.starting_value.unwrap_or(0),
            total: self.ending_value.unwrap_or(100),
            caption: self.caption.unwrap_or("Progress".to_string()),
            started: false,
        }
    }

    pub fn set_start(self, v: usize) -> Self {
        ProgressBuilder { starting_value: Some(v),
                          .. self }
    }

    pub fn set_finish(self, v: usize) -> Self {
        ProgressBuilder { ending_value: Some(v),
                          .. self }
    }
}