diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2020-11-03 19:03:25 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2020-11-03 19:03:25 +0100 |
commit | 21a0786c8d3122bac1a3c989ee89e9cd28354b98 (patch) | |
tree | 188de280a06bd435adc4b8c1c80e4abaa1785558 /src/db | |
parent | ce29de4d37e11cda5b0118cf005b7a38a70b479f (diff) |
Simplify code by removing repeating parts
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src/db')
-rw-r--r-- | src/db/interface.rs | 98 |
1 files changed, 26 insertions, 72 deletions
diff --git a/src/db/interface.rs b/src/db/interface.rs index 496f5b8..e855bc5 100644 --- a/src/db/interface.rs +++ b/src/db/interface.rs @@ -8,9 +8,11 @@ use anyhow::Context; use anyhow::Error; use anyhow::Result; use itertools::Itertools; +use diesel::RunQueryDsl; use crate::config::Configuration; use crate::db::DbConnectionConfig; +use crate::db::models; pub fn interface(db_connection_config: DbConnectionConfig, matches: &ArgMatches, config: &Configuration) -> Result<()> { match matches.subcommand() { @@ -115,34 +117,15 @@ fn cli(db_connection_config: DbConnectionConfig, matches: &ArgMatches, config: & } fn artifacts(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> { - use diesel::RunQueryDsl; use crate::schema::artifacts::dsl; - use crate::db::models; - let csv = matches.is_present("csv"); - - let hdrs = vec![ - { - let mut column = ascii_table::Column::default(); - column.header = "Id".into(); - column.align = ascii_table::Align::Left; - column - }, - { - let mut column = ascii_table::Column::default(); - column.header = "Path".into(); - column.align = ascii_table::Align::Left; - column - } - ]; - - let connection = crate::db::establish_connection(conn_cfg)?; + let csv = matches.is_present("csv"); + let hdrs = mk_header(vec!["id", "path"]); + let conn = crate::db::establish_connection(conn_cfg)?; let data = dsl::artifacts - .load::<models::Artifact>(&connection)? + .load::<models::Artifact>(&conn)? .into_iter() - .map(|artifact| { - vec![format!("{}", artifact.id), artifact.path] - }) + .map(|artifact| vec![format!("{}", artifact.id), artifact.path]) .collect::<Vec<_>>(); if data.is_empty() { @@ -155,36 +138,13 @@ fn artifacts(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> { } fn envvars(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> { - use diesel::RunQueryDsl; use crate::schema::envvars::dsl; - use crate::db::models; - let csv = matches.is_present("csv"); - - let hdrs = vec![ - { - let mut column = ascii_table::Column::default(); - column.header = "Id".into(); - column.align = ascii_table::Align::Left; - column - }, - { - let mut column = ascii_table::Column::default(); - column.header = "Name".into(); - column.align = ascii_table::Align::Left; - column - }, - { - let mut column = ascii_table::Column::default(); - column.header = "Value".into(); - column.align = ascii_table::Align::Left; - column - } - ]; - - let connection = crate::db::establish_connection(conn_cfg)?; + let csv = matches.is_present("csv"); + let hdrs = mk_header(vec!["id", "name", "value"]); + let conn = crate::db::establish_connection(conn_cfg)?; let data = dsl::envvars - .load::<models::EnvVar>(&connection)? + .load::<models::EnvVar>(&conn)? .into_iter() .map(|evar| { vec![format!("{}", evar.id), evar.name, evar.value] @@ -201,30 +161,13 @@ fn envvars(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> { } fn images(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> { - use diesel::RunQueryDsl; use crate::schema::images::dsl; - use crate::db::models; - - let csv = matches.is_present("csv"); - - let hdrs = vec![ - { - let mut column = ascii_table::Column::default(); - column.header = "Id".into(); - column.align = ascii_table::Align::Left; - column - }, - { - let mut column = ascii_table::Column::default(); - column.header = "Name".into(); - column.align = ascii_table::Align::Left; - column - } - ]; - let connection = crate::db::establish_connection(conn_cfg)?; + let csv = matches.is_present("csv"); + let hdrs = mk_header(vec!["id", "name"]); + let conn = crate::db::establish_connection(conn_cfg)?; let data = dsl::images - .load::<models::Image>(&connection)? + .load::<models::Image>(&conn)? .into_iter() .map(|image| { vec![format!("{}", image.id), image.name] @@ -240,6 +183,17 @@ fn images(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> { Ok(()) } +fn mk_header(vec: Vec<&str>) -> Vec<ascii_table::Column> { + vec.into_iter() + .map(|name| { + let mut column = ascii_table::Column::default(); + column.header = name.into(); + column.align = ascii_table::Align::Left; + column + }) + .collect() +} + /// 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<()> { |