diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2020-11-03 18:19:11 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2020-11-03 18:19:11 +0100 |
commit | c3ef30dd543e805b73c005ea93f38b57ef0a7b4d (patch) | |
tree | c2c82f1c8d06a5c09d9f057b80b1ff3a589b9140 /src/db | |
parent | 61851845eeb918ecae253b9391a33315ee204d1c (diff) |
Add subcommand to list env variables from database
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src/db')
-rw-r--r-- | src/db/cli.rs | 4 | ||||
-rw-r--r-- | src/db/interface.rs | 45 | ||||
-rw-r--r-- | src/db/models/envvar.rs | 6 | ||||
-rw-r--r-- | src/db/models/mod.rs | 3 |
4 files changed, 58 insertions, 0 deletions
diff --git a/src/db/cli.rs b/src/db/cli.rs index 445df3e..abf62cc 100644 --- a/src/db/cli.rs +++ b/src/db/cli.rs @@ -35,5 +35,9 @@ pub fn cli<'a>() -> App<'a> { .about("List artifacts from the DB") ) + .subcommand(App::new("envvars") + .about("List envvars from the DB") + ) + } diff --git a/src/db/interface.rs b/src/db/interface.rs index d745c9e..8df69f9 100644 --- a/src/db/interface.rs +++ b/src/db/interface.rs @@ -15,6 +15,7 @@ pub fn interface(db_connection_config: DbConnectionConfig, matches: &ArgMatches, match matches.subcommand() { ("cli", Some(matches)) => cli(db_connection_config, matches, config), ("artifacts", Some(matches)) => artifacts(db_connection_config), + ("envvars", Some(matches)) => envvars(db_connection_config), (other, _) => return Err(anyhow!("Unknown subcommand: {}", other)), } } @@ -149,6 +150,50 @@ fn artifacts(conn_cfg: DbConnectionConfig) -> Result<()> { Ok(()) } +fn envvars(conn_cfg: DbConnectionConfig) -> Result<()> { + use diesel::RunQueryDsl; + use crate::schema::envvars::dsl; + use crate::db::models; + + 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 data = dsl::envvars + .load::<models::EnvVar>(&connection)? + .into_iter() + .map(|evar| { + vec![format!("{}", evar.id), evar.name, evar.value] + }) + .collect::<Vec<_>>(); + + if data.is_empty() { + info!("No environment variables in database"); + } else { + display_as_table(hdrs, data); + } + + Ok(()) +} + fn display_as_table<D: Display>(headers: Vec<ascii_table::Column>, data: Vec<Vec<D>>) { let mut ascii_table = ascii_table::AsciiTable::default(); diff --git a/src/db/models/envvar.rs b/src/db/models/envvar.rs new file mode 100644 index 0000000..c70b406 --- /dev/null +++ b/src/db/models/envvar.rs @@ -0,0 +1,6 @@ +#[derive(Queryable)] +pub struct EnvVar { + pub id: i32, + pub name: String, + pub value: String, +} diff --git a/src/db/models/mod.rs b/src/db/models/mod.rs index 7517fac..17b694b 100644 --- a/src/db/models/mod.rs +++ b/src/db/models/mod.rs @@ -1,3 +1,6 @@ mod artifact; pub use artifact::*; +mod envvar; +pub use envvar::*; + |