diff options
author | Matthias Beyer <matthias.beyer@atos.net> | 2021-03-05 16:16:06 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-03-07 21:50:29 +0100 |
commit | 61fb91fe4a4e0302b97aff777e68a98d15989da0 (patch) | |
tree | a887366e10e36c0ed03aaf6b18d9c3968d588686 /src/commands | |
parent | 407379afeced6fd3185d054bacd097f4c126ebe3 (diff) |
Move display_data() helper to commands::util
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
Diffstat (limited to 'src/commands')
-rw-r--r-- | src/commands/db.rs | 63 | ||||
-rw-r--r-- | src/commands/util.rs | 52 |
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(()) + } +} + |