diff options
Diffstat (limited to 'src/frontend/table.rs')
-rw-r--r-- | src/frontend/table.rs | 66 |
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) } } |