summaryrefslogtreecommitdiffstats
path: root/src/frontend/table.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/table.rs')
-rw-r--r--src/frontend/table.rs66
1 files changed, 19 insertions, 47 deletions
diff --git a/src/frontend/table.rs b/src/frontend/table.rs
index 6a30e9c..35c867c 100644
--- a/src/frontend/table.rs
+++ b/src/frontend/table.rs
@@ -13,16 +13,15 @@ use crate::backend::Backend;
use crate::compare::ComparePackage;
use librepology::v1::api::Api;
+/// A Frontend that formats the output in a nice ASCII-art table
pub struct TableFrontend(Stdout);
impl TableFrontend {
pub fn new(stdout: Stdout) -> Self {
TableFrontend(stdout)
}
-}
-impl Frontend for TableFrontend {
- fn list_packages(&self, packages: Vec<Package>) -> Result<()> {
+ fn mktable(&self) -> Table {
let mut table = Table::new();
let format = format::FormatBuilder::new()
.column_separator('|')
@@ -34,9 +33,20 @@ impl Frontend for TableFrontend {
.padding(1, 1)
.build();
table.set_format(format);
-
table.set_titles(row!["Name", "Version", "Repo", "Status", "URL"]);
+ table
+ }
+
+ fn print(&self, table: Table) -> Result<()> {
+ let mut outlock = self.0.lock();
+ table.print(&mut outlock)?;
+ Ok(())
+ }
+}
+impl Frontend for TableFrontend {
+ fn list_packages(&self, packages: Vec<Package>) -> Result<()> {
+ let mut table = self.mktable();
packages.iter().for_each(|package| {
let status = if let Some(stat) = package.status() {
format!("{}", stat)
@@ -56,28 +66,11 @@ impl Frontend for TableFrontend {
table.add_row(row![package.name(), package.version(), package.repo(), status, url]);
});
-
- let mut outlock = self.0.lock();
- table.print(&mut outlock)?;
-
- Ok(())
+ self.print(table)
}
fn list_problems(&self, problems: Vec<Problem>) -> Result<()> {
- let mut table = Table::new();
- let format = format::FormatBuilder::new()
- .column_separator('|')
- .borders('|')
- .separators(
- &[format::LinePosition::Title, format::LinePosition::Top, format::LinePosition::Bottom],
- format::LineSeparator::new('-', '+', '+', '+')
- )
- .padding(1, 1)
- .build();
- table.set_format(format);
-
- table.set_titles(row!["Repo", "Name", "EffName", "Maintainer", "Description"]);
-
+ let mut table = self.mktable();
problems.iter().for_each(|problem| {
trace!("Adding row for: {:?}", problem);
table.add_row(row![
@@ -88,28 +81,11 @@ impl Frontend for TableFrontend {
problem.problem_description()
]);
});
-
- let mut outlock = self.0.lock();
- table.print(&mut outlock)?;
-
- Ok(())
+ self.print(table)
}
fn compare_packages(&self, packages: Vec<ComparePackage>, backend: &Backend, filter_repos: Vec<Repo>) -> Result<()> {
- let mut table = Table::new();
- let format = format::FormatBuilder::new()
- .column_separator('|')
- .borders('|')
- .separators(
- &[format::LinePosition::Title, format::LinePosition::Top, format::LinePosition::Bottom],
- format::LineSeparator::new('-', '+', '+', '+')
- )
- .padding(1, 1)
- .build();
- table.set_format(format);
-
- table.set_titles(row!["Name", "Local Version", "Repo", "Upstream Version"]);
-
+ let mut table = self.mktable();
for package in packages {
backend
.project(package.name().deref())?
@@ -124,11 +100,7 @@ impl Frontend for TableFrontend {
]);
});
}
-
- let mut outlock = self.0.lock();
- table.print(&mut outlock)?;
-
- Ok(())
+ self.print(table)
}
}