| use std::io::{BufRead, BufReader}; |
| use std::process; |
| use std::time::{Duration, Instant}; |
| |
| use indicatif::{HumanDuration, ProgressBar, ProgressStyle}; |
| |
| pub fn main() { |
| let started = Instant::now(); |
| |
| println!("Compiling package in release mode..."); |
| |
| let pb = ProgressBar::new_spinner(); |
| pb.enable_steady_tick(Duration::from_millis(200)); |
| pb.set_style( |
| ProgressStyle::with_template("{spinner:.dim.bold} cargo: {wide_msg}") |
| .unwrap() |
| .tick_chars("/|\\- "), |
| ); |
| |
| let mut p = process::Command::new("cargo") |
| .arg("build") |
| .arg("--release") |
| .stderr(process::Stdio::piped()) |
| .spawn() |
| .unwrap(); |
| |
| for line in BufReader::new(p.stderr.take().unwrap()).lines() { |
| let line = line.unwrap(); |
| let stripped_line = line.trim(); |
| if !stripped_line.is_empty() { |
| pb.set_message(stripped_line.to_owned()); |
| } |
| pb.tick(); |
| } |
| |
| p.wait().unwrap(); |
| |
| pb.finish_and_clear(); |
| |
| println!("Done in {}", HumanDuration(started.elapsed())); |
| } |