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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
use error::CloseError;

pub mod error;
pub mod monitor;
pub mod work;

pub mod prelude {
    pub use crate::error::CloseError;
    pub use crate::monitor::callback::CallbackProgressMonitor;
    pub use crate::monitor::sub::ChildMonitor;
    pub use crate::monitor::ProgressMonitor;
    pub use crate::monitor::ProgressMonitorDivision;
    pub use crate::work::numeric::NumericWork;
    pub use crate::work::set::SetWork;
    pub use crate::work::Work;
}

#[cfg(test)]
mod test {
    use tracing::Level;
    use tracing_subscriber::FmtSubscriber;

    use crate::prelude::*;

    #[test]
    fn test() {
        tracing::subscriber::set_global_default(
            FmtSubscriber::builder()
                .with_max_level(Level::TRACE)
                .finish(),
        )
        .expect("setting default subscriber failed");

        let mut mon =
            CallbackProgressMonitor::new("root", 300, |a: &NumericWork, w: &NumericWork| {
                tracing::info!("{}/{}", w, a)
            });
        mon.worked(100);

        let mut sub = mon.new_child("a", 100, 5000);
        sub.worked(1000);
        sub.worked(1000);
        sub.worked(1000);
        sub.worked(1000);

        //let mut subsub = sub.new_child("b", 1000, 10);
        //subsub.worked(2);
        //subsub.worked(2);
        //subsub.worked(2);
        //subsub.worked(2);
        ////subsub.worked(2);
        //drop(subsub);
        tracing::info!("drop sub");
        sub.close().unwrap();
        drop(sub);
        tracing::info!("dropped sub");

        mon.worked(120);
    }
}