This commit allows us to have a global progress bar to write data to giving us the following benefits: - Consistent ways to handle types of messages such as errors and warnings - Easy interface to add progress bars of various types - Easy to maintain, add new types of bars, or more while encapsulating the login in a single modulemaster
parent
40c98867b3
commit
aa629b320c
@ -1,13 +1,63 @@ |
||||
use indicatif::{ProgressBar, ProgressStyle}; |
||||
|
||||
pub fn new(msg: String) -> ProgressBar { |
||||
let pb = ProgressBar::new_spinner(); |
||||
pb.enable_steady_tick(200); |
||||
pb.set_style( |
||||
ProgressStyle::default_spinner() |
||||
.tick_chars("/|\\- ") |
||||
.template("{spinner:.dim.bold} {wide_msg}"), |
||||
); |
||||
pb.set_message(&msg); |
||||
pb |
||||
use console::style; |
||||
use emoji; |
||||
use failure::Error; |
||||
use indicatif::{MultiProgress, ProgressBar, ProgressStyle}; |
||||
|
||||
pub struct ProgressOutput { |
||||
bar: MultiProgress, |
||||
} |
||||
|
||||
impl ProgressOutput { |
||||
pub fn new() -> Self { |
||||
Self { |
||||
bar: MultiProgress::new(), |
||||
} |
||||
} |
||||
|
||||
pub fn message(&self, message: &str) -> ProgressBar { |
||||
self.bar.add(Self::progressbar(message)) |
||||
} |
||||
|
||||
pub fn one_off_message(&self, message: &str) { |
||||
let bar = self.bar.add(Self::progressbar(message)); |
||||
bar.finish(); |
||||
} |
||||
|
||||
pub fn warn(&self, message: &str) { |
||||
let warn = format!( |
||||
"{} {}: {}", |
||||
style("[WARN]").bold().dim(), |
||||
emoji::WARN, |
||||
message |
||||
); |
||||
let bar = self.bar.add(Self::progressbar(&warn)); |
||||
bar.finish(); |
||||
} |
||||
|
||||
pub fn error(&self, message: &str) { |
||||
let err = format!( |
||||
"{} {}: {}", |
||||
emoji::ERROR, |
||||
style("[Error]").bold().dim(), |
||||
message |
||||
); |
||||
let bar = self.bar.add(Self::progressbar(&err)); |
||||
bar.finish(); |
||||
} |
||||
|
||||
fn progressbar(msg: &str) -> ProgressBar { |
||||
let pb = ProgressBar::new_spinner(); |
||||
pb.enable_steady_tick(200); |
||||
pb.set_style( |
||||
ProgressStyle::default_spinner() |
||||
.tick_chars("/|\\- ") |
||||
.template("{spinner:.dim.bold} {wide_msg}"), |
||||
); |
||||
pb.set_message(&msg); |
||||
pb |
||||
} |
||||
|
||||
pub fn done(&self) -> Result<(), Error> { |
||||
self.bar.join_and_clear().map_err(|e| Error::from(e)) |
||||
} |
||||
} |
||||
|
@ -1,31 +1,22 @@ |
||||
use console::style; |
||||
use failure::Error; |
||||
use indicatif::MultiProgress; |
||||
use std::fs; |
||||
|
||||
use PBAR; |
||||
use emoji; |
||||
use progressbar; |
||||
|
||||
pub fn copy_from_crate(path: &str) -> Result<(), Error> { |
||||
let m = MultiProgress::new(); |
||||
let step = format!( |
||||
"{} {}Copying over your README...", |
||||
style("[5/7]").bold().dim(), |
||||
emoji::DANCERS |
||||
); |
||||
let pb = m.add(progressbar::new(step)); |
||||
let pb = PBAR.message(&step); |
||||
let crate_readme_path = format!("{}/README.md", path); |
||||
let new_readme_path = format!("{}/pkg/README.md", path); |
||||
if let Err(_) = fs::copy(&crate_readme_path, &new_readme_path) { |
||||
let warn = format!( |
||||
"{} {}: origin crate has no README", |
||||
emoji::WARN, |
||||
style("[WARN]").bold().dim() |
||||
); |
||||
let warn_pb = m.add(progressbar::new(warn)); |
||||
warn_pb.finish(); |
||||
PBAR.warn("origin crate has no README"); |
||||
}; |
||||
pb.finish(); |
||||
m.join_and_clear()?; |
||||
Ok(()) |
||||
} |
||||
|
Loading…
Reference in new issue