summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2021-03-05 16:16:06 +0100
committerMatthias Beyer <mail@beyermatthias.de>2021-03-07 21:50:29 +0100
commit61fb91fe4a4e0302b97aff777e68a98d15989da0 (patch)
treea887366e10e36c0ed03aaf6b18d9c3968d588686
parent407379afeced6fd3185d054bacd097f4c126ebe3 (diff)
Move display_data() helper to commands::util
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
-rw-r--r--src/commands/db.rs63
-rw-r--r--src/commands/util.rs52
2 files changed, 58 insertions, 57 deletions
diff --git a/src/commands/db.rs b/src/commands/db.rs
index 9ce57a9..0f11837 100644
--- a/src/commands/db.rs
+++ b/src/commands/db.rs
@@ -8,7 +8,6 @@
// SPDX-License-Identifier: EPL-2.0
//
-use std::fmt::Display;
use std::io::Write;
use std::path::PathBuf;
use std::process::Command;
@@ -180,7 +179,7 @@ fn artifacts(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> {
if data.is_empty() {
info!("No artifacts in database");
} else {
- display_data(hdrs, data, csv)?;
+ crate::commands::util::display_data(hdrs, data, csv)?;
}
Ok(())
@@ -201,7 +200,7 @@ fn envvars(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> {
if data.is_empty() {
info!("No environment variables in database");
} else {
- display_data(hdrs, data, csv)?;
+ crate::commands::util::display_data(hdrs, data, csv)?;
}
Ok(())
@@ -222,7 +221,7 @@ fn images(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> {
if data.is_empty() {
info!("No images in database");
} else {
- display_data(hdrs, data, csv)?;
+ crate::commands::util::display_data(hdrs, data, csv)?;
}
Ok(())
@@ -284,7 +283,7 @@ fn submits(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> {
if data.is_empty() {
info!("No submits in database");
} else {
- display_data(hdrs, data, csv)?;
+ crate::commands::util::display_data(hdrs, data, csv)?;
}
Ok(())
@@ -410,7 +409,7 @@ fn jobs(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> {
if data.is_empty() {
info!("No submits in database");
} else {
- display_data(hdrs, data, csv)?;
+ crate::commands::util::display_data(hdrs, data, csv)?;
}
Ok(())
@@ -471,7 +470,7 @@ fn job(conn_cfg: DbConnectionConfig, config: &Configuration, matches: &ArgMatche
data.4.name.to_string(),
data.0.container_hash,
]];
- display_data(hdrs, data, csv)
+ crate::commands::util::display_data(hdrs, data, csv)
} else {
let env_vars = if matches.is_present("show_env") {
Some({
@@ -632,54 +631,6 @@ fn releases(conn_cfg: DbConnectionConfig, config: &Configuration, matches: &ArgM
})
.collect::<Vec<Vec<_>>>();
- display_data(header, data, csv)
-}
-
-
-/// Display the passed data as nice ascii table,
-/// or, if stdout is a pipe, print it nicely parseable
-fn display_data<D: Display>(
- headers: Vec<ascii_table::Column>,
- data: Vec<Vec<D>>,
- csv: bool,
-) -> Result<()> {
- if csv {
- use csv::WriterBuilder;
- let mut wtr = WriterBuilder::new().from_writer(vec![]);
- for record in data.into_iter() {
- let r: Vec<String> = record.into_iter().map(|e| e.to_string()).collect();
-
- wtr.write_record(&r)?;
- }
-
- let out = std::io::stdout();
- let mut lock = out.lock();
-
- wtr.into_inner()
- .map_err(Error::from)
- .and_then(|t| String::from_utf8(t).map_err(Error::from))
- .and_then(|text| writeln!(lock, "{}", text).map_err(Error::from))
- } else if atty::is(atty::Stream::Stdout) {
- let mut ascii_table = ascii_table::AsciiTable {
- columns: Default::default(),
- max_width: terminal_size::terminal_size()
- .map(|tpl| tpl.0 .0 as usize) // an ugly interface indeed!
- .unwrap_or(80),
- };
-
- headers.into_iter().enumerate().for_each(|(i, c)| {
- ascii_table.columns.insert(i, c);
- });
-
- ascii_table.print(data);
- Ok(())
- } else {
- let out = std::io::stdout();
- let mut lock = out.lock();
- for list in data {
- writeln!(lock, "{}", list.iter().map(|d| d.to_string()).join(" "))?;
- }
- Ok(())
- }
+ crate::commands::util::display_data(header, data, csv)
}
diff --git a/src/commands/util.rs b/src/commands/util.rs
index 1660c5d..3b63c1d 100644
--- a/src/commands/util.rs
+++ b/src/commands/util.rs
@@ -8,13 +8,16 @@
// SPDX-License-Identifier: EPL-2.0
//
+use std::io::Write;
+use std::fmt::Display;
use std::path::Path;
-use anyhow::Error;
use anyhow::Context;
+use anyhow::Error;
use anyhow::Result;
use anyhow::anyhow;
use clap::ArgMatches;
+use itertools::Itertools;
use log::{error, info, trace};
use regex::Regex;
use tokio_stream::StreamExt;
@@ -159,3 +162,50 @@ pub fn mk_header(vec: Vec<&str>) -> Vec<ascii_table::Column> {
.collect()
}
+/// Display the passed data as nice ascii table,
+/// or, if stdout is a pipe, print it nicely parseable
+pub fn display_data<D: Display>(
+ headers: Vec<ascii_table::Column>,
+ data: Vec<Vec<D>>,
+ csv: bool,
+) -> Result<()> {
+ if csv {
+ use csv::WriterBuilder;
+ let mut wtr = WriterBuilder::new().from_writer(vec![]);
+ for record in data.into_iter() {
+ let r: Vec<String> = record.into_iter().map(|e| e.to_string()).collect();
+
+ wtr.write_record(&r)?;
+ }
+
+ let out = std::io::stdout();
+ let mut lock = out.lock();
+
+ wtr.into_inner()
+ .map_err(Error::from)
+ .and_then(|t| String::from_utf8(t).map_err(Error::from))
+ .and_then(|text| writeln!(lock, "{}", text).map_err(Error::from))
+ } else if atty::is(atty::Stream::Stdout) {
+ let mut ascii_table = ascii_table::AsciiTable {
+ columns: Default::default(),
+ max_width: terminal_size::terminal_size()
+ .map(|tpl| tpl.0 .0 as usize) // an ugly interface indeed!
+ .unwrap_or(80),
+ };
+
+ headers.into_iter().enumerate().for_each(|(i, c)| {
+ ascii_table.columns.insert(i, c);
+ });
+
+ ascii_table.print(data);
+ Ok(())
+ } else {
+ let out = std::io::stdout();
+ let mut lock = out.lock();
+ for list in data {
+ writeln!(lock, "{}", list.iter().map(|d| d.to_string()).join(" "))?;
+ }
+ Ok(())
+ }
+}
+