use std::sync::{Arc, Weak};
use std::time::Instant;
use crate::cli::Tick;
use crate::cli::fmt::ansi;
use crate::cli::progress::ProgressBar;
#[derive(Debug)]
pub enum ChildState {
Done(String),
Interrupted(String),
Progress(usize, Weak<ProgressBar>),
}
impl ChildState {
pub fn upgrade(&self) -> Option<ChildStateStrong<'_>> {
Some(match self {
ChildState::Done(x) => ChildStateStrong::Done(x),
ChildState::Interrupted(x) => ChildStateStrong::Interrupted(x),
ChildState::Progress(_, weak) => ChildStateStrong::Progress(weak.upgrade()?),
})
}
}
pub enum ChildStateStrong<'a> {
Done(&'a str),
Interrupted(&'a str),
Progress(Arc<ProgressBar>),
}
#[derive(Default, Clone)]
pub enum BarResult {
#[default]
DontKeep,
Done(String),
Interrupted(String),
}
pub struct BarFormatter<'a, 'b, 'c> {
pub colors: ansi::Colors,
pub bar_color: &'a str,
pub width: usize,
pub tick: Tick,
pub now: &'c mut Option<Instant>,
pub out: &'b mut String,
pub temp: &'b mut String,
}