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}; |
use console::style; |
||||||
|
use emoji; |
||||||
pub fn new(msg: String) -> ProgressBar { |
use failure::Error; |
||||||
let pb = ProgressBar::new_spinner(); |
use indicatif::{MultiProgress, ProgressBar, ProgressStyle}; |
||||||
pb.enable_steady_tick(200); |
|
||||||
pb.set_style( |
pub struct ProgressOutput { |
||||||
ProgressStyle::default_spinner() |
bar: MultiProgress, |
||||||
.tick_chars("/|\\- ") |
} |
||||||
.template("{spinner:.dim.bold} {wide_msg}"), |
|
||||||
); |
impl ProgressOutput { |
||||||
pb.set_message(&msg); |
pub fn new() -> Self { |
||||||
pb |
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 console::style; |
||||||
use failure::Error; |
use failure::Error; |
||||||
use indicatif::MultiProgress; |
|
||||||
use std::fs; |
use std::fs; |
||||||
|
|
||||||
|
use PBAR; |
||||||
use emoji; |
use emoji; |
||||||
use progressbar; |
|
||||||
|
|
||||||
pub fn copy_from_crate(path: &str) -> Result<(), Error> { |
pub fn copy_from_crate(path: &str) -> Result<(), Error> { |
||||||
let m = MultiProgress::new(); |
|
||||||
let step = format!( |
let step = format!( |
||||||
"{} {}Copying over your README...", |
"{} {}Copying over your README...", |
||||||
style("[5/7]").bold().dim(), |
style("[5/7]").bold().dim(), |
||||||
emoji::DANCERS |
emoji::DANCERS |
||||||
); |
); |
||||||
let pb = m.add(progressbar::new(step)); |
let pb = PBAR.message(&step); |
||||||
let crate_readme_path = format!("{}/README.md", path); |
let crate_readme_path = format!("{}/README.md", path); |
||||||
let new_readme_path = format!("{}/pkg/README.md", path); |
let new_readme_path = format!("{}/pkg/README.md", path); |
||||||
if let Err(_) = fs::copy(&crate_readme_path, &new_readme_path) { |
if let Err(_) = fs::copy(&crate_readme_path, &new_readme_path) { |
||||||
let warn = format!( |
PBAR.warn("origin crate has no README"); |
||||||
"{} {}: origin crate has no README", |
|
||||||
emoji::WARN, |
|
||||||
style("[WARN]").bold().dim() |
|
||||||
); |
|
||||||
let warn_pb = m.add(progressbar::new(warn)); |
|
||||||
warn_pb.finish(); |
|
||||||
}; |
}; |
||||||
pb.finish(); |
pb.finish(); |
||||||
m.join_and_clear()?; |
|
||||||
Ok(()) |
Ok(()) |
||||||
} |
} |
||||||
|
Loading…
Reference in new issue