summaryrefslogtreecommitdiffstats
path: root/src/cmd/sql.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2018-11-10 02:39:03 -0500
committerJesse Luehrs <doy@tozt.net>2018-11-10 02:39:03 -0500
commit07f8d93eff3fd186b7c9bc5125e00cef16bd1a42 (patch)
tree1cf63259e94cb5bbb828a585037b4f7cf5a9acac /src/cmd/sql.rs
parenta683b67a7e459dffd67ba6321b97b1c3ce263bde (diff)
downloadlastfm-query-07f8d93eff3fd186b7c9bc5125e00cef16bd1a42.tar.gz
lastfm-query-07f8d93eff3fd186b7c9bc5125e00cef16bd1a42.zip
more refactoring
Diffstat (limited to 'src/cmd/sql.rs')
-rw-r--r--src/cmd/sql.rs59
1 files changed, 32 insertions, 27 deletions
diff --git a/src/cmd/sql.rs b/src/cmd/sql.rs
index b6a77cf..f0dd4b0 100644
--- a/src/cmd/sql.rs
+++ b/src/cmd/sql.rs
@@ -1,9 +1,10 @@
+use cli;
use db;
use paths;
use clap;
-pub struct Options {
+pub struct Command {
query: String,
tsv: bool,
}
@@ -23,37 +24,41 @@ pub fn subcommand<'a, 'b>() -> clap::App<'a, 'b> {
)
}
-pub fn options<'a>(matches: &clap::ArgMatches<'a>) -> Options {
- Options {
- query: matches.value_of("query").unwrap().to_string(),
- tsv: matches.is_present("tsv"),
+impl Command {
+ pub fn new<'a>(matches: &clap::ArgMatches<'a>) -> Command {
+ Command {
+ query: matches.value_of("query").unwrap().to_string(),
+ tsv: matches.is_present("tsv"),
+ }
}
}
-pub fn run(options: &Options) -> failure::Fallible<()> {
- let db = db::DB::new(&paths::db_path()?)?;
-
- let rows_cell = std::cell::Cell::new(Some(vec![]));
- let cols = db.query(&options.query, |row| {
- let display_row: Vec<String> = (0..row.column_count())
- .map(|i| row.get_raw(i))
- .map(|v| format_value(&v))
- .collect();
- let mut rows = rows_cell.replace(None).unwrap();
- rows.push(display_row);
- rows_cell.replace(Some(rows));
- })?;
-
- let rows = rows_cell.into_inner().unwrap();
+impl cli::Command for Command {
+ fn run(&self) -> failure::Fallible<()> {
+ let db = db::DB::new(&paths::db_path()?)?;
+
+ let rows_cell = std::cell::Cell::new(Some(vec![]));
+ let cols = db.query(&self.query, |row| {
+ let display_row: Vec<String> = (0..row.column_count())
+ .map(|i| row.get_raw(i))
+ .map(|v| format_value(&v))
+ .collect();
+ let mut rows = rows_cell.replace(None).unwrap();
+ rows.push(display_row);
+ rows_cell.replace(Some(rows));
+ })?;
+
+ let rows = rows_cell.into_inner().unwrap();
+
+ if self.tsv {
+ print_tsv(&rows);
+ }
+ else {
+ print_table(&cols, &rows);
+ }
- if options.tsv {
- print_tsv(&rows);
- }
- else {
- print_table(&cols, &rows);
+ Ok(())
}
-
- Ok(())
}
fn print_table(cols: &[String], rows: &[Vec<String>]) {