Skip to content

Commit

Permalink
Refactor CLI write_rows in print module (gluesql#1319)
Browse files Browse the repository at this point in the history
refactor: extract write_header
refactor: split self.write to self.{write_lf, write, writeln}
  • Loading branch information
devgony committed Jul 22, 2023
1 parent fb1944e commit 5d96a9a
Showing 1 changed file with 24 additions and 31 deletions.
55 changes: 24 additions & 31 deletions cli/src/print.rs
Original file line number Diff line number Diff line change
Expand Up @@ -154,17 +154,8 @@ impl<'a, W: Write> Print<W> {
}
false => {
self.write_header(labels.iter().map(|s| s.as_str()))?;

for row in rows {
let row = row
.iter()
.map(Into::into)
.map(|v: String| format!("{c}{v}{c}", c = self.option.colwrap))
.collect::<Vec<_>>()
.join(self.option.colsep.as_str());

self.write(row)?;
}
let rows = rows.iter().map(|row| row.iter().map(String::from));
self.write_rows(rows)?;
}
},
Payload::SelectMap(rows) => {
Expand All @@ -183,11 +174,7 @@ impl<'a, W: Write> Print<W> {
for row in rows {
let row = labels
.iter()
.map(|label| {
row.get(*label)
.map(Into::into)
.unwrap_or_else(|| "".to_owned())
})
.map(|label| row.get(*label).map(Into::into).unwrap_or_default())
.collect::<Vec<String>>();

table.add_record(row);
Expand All @@ -198,22 +185,12 @@ impl<'a, W: Write> Print<W> {
false => {
self.write_header(labels.iter().map(AsRef::as_ref))?;

for row in rows {
let row = labels
let rows = rows.iter().map(|row| {
labels
.iter()
.map(|label| {
let v = row
.get(*label)
.map(Into::into)
.unwrap_or_else(|| "".to_owned());

format!("{c}{v}{c}", c = self.option.colwrap)
})
.collect::<Vec<_>>()
.join(self.option.colsep.as_str());

self.write(row)?;
}
.map(|label| row.get(*label).map(String::from).unwrap_or_default())
});
self.write_rows(rows)?;
}
}
}
Expand All @@ -222,6 +199,22 @@ impl<'a, W: Write> Print<W> {
Ok(())
}

fn write_rows(
&mut self,
rows: impl Iterator<Item = impl Iterator<Item = String>>,
) -> IOResult<()> {
for row in rows {
let row = row
.map(|v| format!("{c}{v}{c}", c = self.option.colwrap))
.collect::<Vec<_>>()
.join(self.option.colsep.as_str());

self.write(row)?;
}

Ok(())
}

fn write_lf(&mut self, payload: impl Display, lf: &str) -> IOResult<()> {
if let Some(file) = &self.spool_file {
writeln!(file.to_owned(), "{payload}{lf}")?;
Expand Down

0 comments on commit 5d96a9a

Please sign in to comment.