Schneider
6 years ago
commit
c77f6b72e4
4 changed files with 107 additions and 0 deletions
-
2.gitignore
-
66Cargo.lock
-
8Cargo.toml
-
31src/main.rs
@ -0,0 +1,2 @@ |
|||
/target |
|||
**/*.rs.bk |
@ -0,0 +1,66 @@ |
|||
# This file is automatically @generated by Cargo. |
|||
# It is not intended for manual editing. |
|||
[[package]] |
|||
name = "cfg-if" |
|||
version = "0.1.6" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
|
|||
[[package]] |
|||
name = "crossbeam-channel" |
|||
version = "0.3.8" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
dependencies = [ |
|||
"crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", |
|||
"smallvec 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "crossbeam-utils" |
|||
version = "0.6.5" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
dependencies = [ |
|||
"cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", |
|||
"lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "lazy_static" |
|||
version = "1.2.0" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
|
|||
[[package]] |
|||
name = "smallvec" |
|||
version = "0.6.8" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
dependencies = [ |
|||
"unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "stopwatch" |
|||
version = "0.1.0" |
|||
dependencies = [ |
|||
"crossbeam-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "unreachable" |
|||
version = "1.0.0" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
dependencies = [ |
|||
"void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", |
|||
] |
|||
|
|||
[[package]] |
|||
name = "void" |
|||
version = "1.0.2" |
|||
source = "registry+https://github.com/rust-lang/crates.io-index" |
|||
|
|||
[metadata] |
|||
"checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4" |
|||
"checksum crossbeam-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "0f0ed1a4de2235cabda8558ff5840bffb97fcb64c97827f354a451307df5f72b" |
|||
"checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c" |
|||
"checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1" |
|||
"checksum smallvec 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "88aea073965ab29f6edb5493faf96ad662fb18aa9eeb186a3b7057951605ed15" |
|||
"checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" |
|||
"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" |
@ -0,0 +1,8 @@ |
|||
[package] |
|||
name = "stopwatch" |
|||
version = "0.1.0" |
|||
authors = ["Marcel Schneider <marcel@webschneider.org>"] |
|||
edition = "2018" |
|||
|
|||
[dependencies] |
|||
crossbeam-channel = "0.3" |
@ -0,0 +1,31 @@ |
|||
//! stopwatch is a simple CLI stopwatch
|
|||
|
|||
use crossbeam_channel::tick;
|
|||
use std::io::{stdout, Write};
|
|||
use std::time::{Duration, Instant};
|
|||
|
|||
#[macro_use]
|
|||
extern crate crossbeam_channel;
|
|||
|
|||
fn main() {
|
|||
let out = stdout();
|
|||
let mut out = out.lock();
|
|||
|
|||
// 30 fps should be enough
|
|||
let step_duration = Duration::from_millis(1000 / 30);
|
|||
let start = Instant::now();
|
|||
let ticker = tick(step_duration);
|
|||
|
|||
loop {
|
|||
select! {
|
|||
recv(ticker) -> now => {
|
|||
let elapsed = now.unwrap().duration_since(start);
|
|||
let secs = elapsed.as_secs();
|
|||
let millis = elapsed.subsec_millis();
|
|||
write!(out, "\r[2K").unwrap();
|
|||
write!(out, "{:02}:{:02}:{:03}", secs/60, secs % 60, millis).unwrap();
|
|||
out.flush().unwrap();
|
|||
}
|
|||
}
|
|||
}
|
|||
}
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue