summaryrefslogtreecommitdiffstats
path: root/src/format.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2021-11-13 14:07:15 -0500
committerJesse Luehrs <doy@tozt.net>2021-11-13 14:07:15 -0500
commitf3d3aa2d2ae16d3ec33efed9b5c035ec3d523e0a (patch)
treec8f033e00bf6ba8d66b44cda31f6c01e7da770cf /src/format.rs
parentd8ddced881672115f7dd7b7d5199190d5b80a60f (diff)
downloadnbsh-f3d3aa2d2ae16d3ec33efed9b5c035ec3d523e0a.tar.gz
nbsh-f3d3aa2d2ae16d3ec33efed9b5c035ec3d523e0a.zip
clean up formatting a bit
Diffstat (limited to 'src/format.rs')
-rw-r--r--src/format.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/format.rs b/src/format.rs
new file mode 100644
index 0000000..2d59465
--- /dev/null
+++ b/src/format.rs
@@ -0,0 +1,31 @@
+use std::os::unix::process::ExitStatusExt as _;
+
+pub fn exit_status(status: std::process::ExitStatus) -> String {
+ if let Some(sig) = status.signal() {
+ if let Some(name) = signal_hook::low_level::signal_name(sig) {
+ format!("{:4} ", &name[3..])
+ } else {
+ format!("SIG{} ", sig)
+ }
+ } else {
+ format!("{:03} ", status.code().unwrap())
+ }
+}
+
+pub fn duration(dur: std::time::Duration) -> String {
+ let secs = dur.as_secs();
+ let nanos = dur.subsec_nanos();
+ if secs > 60 {
+ let mins = secs / 60;
+ let secs = secs - mins * 60;
+ format!("{}m{}s", mins, secs)
+ } else if secs > 0 {
+ format!("{}.{:03}s", secs, nanos / 1_000_000)
+ } else if nanos >= 1_000_000 {
+ format!("{}ms", nanos / 1_000_000)
+ } else if nanos >= 1_000 {
+ format!("{}us", nanos / 1_000)
+ } else {
+ format!("{}ns", nanos)
+ }
+}