Schneider
6 years ago
5 changed files with 99 additions and 10 deletions
-
23Cargo.lock
-
1Cargo.toml
-
19src/duration.rs
-
32src/lib.rs
-
34src/main.rs
@ -0,0 +1,19 @@ |
|||||
|
use std::convert::From;
|
||||
|
use std::{fmt, time};
|
||||
|
|
||||
|
#[derive(Debug)]
|
||||
|
pub struct FmtDuration(time::Duration);
|
||||
|
|
||||
|
impl fmt::Display for FmtDuration {
|
||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
||||
|
let secs = self.0.as_secs();
|
||||
|
let millis = self.0.subsec_millis();
|
||||
|
write!(f, "{:02}:{:02}:{:03}", secs / 60, secs % 60, millis)
|
||||
|
}
|
||||
|
}
|
||||
|
|
||||
|
impl From<time::Duration> for FmtDuration {
|
||||
|
fn from(dur: time::Duration) -> Self {
|
||||
|
FmtDuration(dur)
|
||||
|
}
|
||||
|
}
|
@ -0,0 +1,32 @@ |
|||||
|
use crossbeam_channel::{bounded, Receiver};
|
||||
|
use duration::*;
|
||||
|
use signal_hook::iterator::Signals;
|
||||
|
use signal_hook::SIGINT;
|
||||
|
use std::io::{Result, StdoutLock, Write};
|
||||
|
use std::thread;
|
||||
|
|
||||
|
pub mod duration;
|
||||
|
|
||||
|
pub fn signal_handler() -> Result<Receiver<()>> {
|
||||
|
let (s, r) = bounded(1);
|
||||
|
let signals = Signals::new(&[SIGINT])?;
|
||||
|
|
||||
|
thread::spawn(move || {
|
||||
|
for _ in signals.forever() {
|
||||
|
if s.send(()).is_err() {
|
||||
|
break;
|
||||
|
}
|
||||
|
}
|
||||
|
});
|
||||
|
|
||||
|
Ok(r)
|
||||
|
}
|
||||
|
|
||||
|
/// Resets the current line on stdout
|
||||
|
///
|
||||
|
/// # Arguments
|
||||
|
///
|
||||
|
/// * w - A reference to the locked stdout handle
|
||||
|
pub fn reset_line(w: &mut StdoutLock) -> Result<()> {
|
||||
|
write!(w, "\r[2K")
|
||||
|
}
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue