diff options
Diffstat (limited to 'src/frontend')
-rw-r--r-- | src/frontend/json.rs | 12 | ||||
-rw-r--r-- | src/frontend/list.rs | 56 | ||||
-rw-r--r-- | src/frontend/mod.rs | 22 | ||||
-rw-r--r-- | src/frontend/table.rs | 31 |
4 files changed, 75 insertions, 46 deletions
diff --git a/src/frontend/json.rs b/src/frontend/json.rs index 6ef5e0c..42e44d1 100644 --- a/src/frontend/json.rs +++ b/src/frontend/json.rs @@ -8,9 +8,9 @@ use librepology::v1::types::Package; use librepology::v1::types::Problem; use librepology::v1::types::Repo; -use crate::frontend::Frontend; use crate::backend::Backend; use crate::compare::ComparePackage; +use crate::frontend::Frontend; use librepology::v1::api::Api; pub struct JsonFrontend(Stdout); @@ -38,14 +38,18 @@ impl JsonFrontend { impl Frontend for JsonFrontend { fn list_packages(&self, packages: Vec<Package>) -> Result<()> { self.write(serde_json::ser::to_string_pretty(&packages).map_err(Error::from)?) - } fn list_problems(&self, problems: Vec<Problem>) -> Result<()> { self.write(serde_json::ser::to_string_pretty(&problems).map_err(Error::from)?) } - fn compare_packages(&self, packages: Vec<ComparePackage>, backend: &Backend, filter_repos: Vec<Repo>) -> Result<()> { + fn compare_packages( + &self, + packages: Vec<ComparePackage>, + backend: &Backend, + filter_repos: Vec<Repo>, + ) -> Result<()> { #[derive(Serialize)] struct PackageComp { // not optimal, as we have to clone the inner variables from the package @@ -64,7 +68,6 @@ impl Frontend for JsonFrontend { let mut output: Vec<PackageComp> = vec![]; for package in packages.iter() { - let comparisons = backend .project(package.name().deref())? .into_iter() @@ -85,4 +88,3 @@ impl Frontend for JsonFrontend { self.write(serde_json::ser::to_string_pretty(&output)?) } } - diff --git a/src/frontend/list.rs b/src/frontend/list.rs index 61aa670..469d6ec 100644 --- a/src/frontend/list.rs +++ b/src/frontend/list.rs @@ -9,9 +9,9 @@ use librepology::v1::types::Package; use librepology::v1::types::Problem; use librepology::v1::types::Repo; -use crate::frontend::Frontend; use crate::backend::Backend; use crate::compare::ComparePackage; +use crate::frontend::Frontend; use librepology::v1::api::Api; pub struct ListFrontend(Stdout); @@ -31,13 +31,13 @@ impl Frontend for ListFrontend { packages.iter().fold(Ok(()), |accu, package| { accu.and_then(|_| { - let status= if let Some(stat) = package.status() { + let status = if let Some(stat) = package.status() { stat.deref().to_string() } else { String::from("No status") }; // not optimal, but works for now. - let url= if let Some(url) = package.www() { + let url = if let Some(url) = package.www() { if let Some(url) = url.first() { url.deref().to_string() } else { @@ -47,13 +47,21 @@ impl Frontend for ListFrontend { String::from("") }; // not optimal, but works for now - writeln!(outlock, - "{name:10} - {version:8} - {repo:15} - {status:5} - {www}", - name = package.any_name().map(Name::deref).map(String::deref).unwrap_or_else(|| "<unknown>"), - version = package.version().deref(), - repo = package.repo().deref(), - status = status, - www = url).map(|_| ()).map_err(Error::from) + writeln!( + outlock, + "{name:10} - {version:8} - {repo:15} - {status:5} - {www}", + name = package + .any_name() + .map(Name::deref) + .map(String::deref) + .unwrap_or_else(|| "<unknown>"), + version = package.version().deref(), + repo = package.repo().deref(), + status = status, + www = url + ) + .map(|_| ()) + .map_err(Error::from) }) }) } @@ -63,20 +71,27 @@ impl Frontend for ListFrontend { problems.iter().fold(Ok(()), |accu, problem| { accu.and_then(|_| { - writeln!(outlock, - "{repo:10} - {name:10} - {effname:10} - {maintainer:15} - {desc}", - repo = problem.repo().deref(), - name = problem.name().deref(), - effname = problem.effname().deref(), - maintainer = problem.maintainer().deref(), - desc = problem.problem_description()) - .map(|_| ()) - .map_err(Error::from) + writeln!( + outlock, + "{repo:10} - {name:10} - {effname:10} - {maintainer:15} - {desc}", + repo = problem.repo().deref(), + name = problem.name().deref(), + effname = problem.effname().deref(), + maintainer = problem.maintainer().deref(), + desc = problem.problem_description() + ) + .map(|_| ()) + .map_err(Error::from) }) }) } - fn compare_packages(&self, packages: Vec<ComparePackage>, backend: &Backend, filter_repos: Vec<Repo>) -> Result<()> { + fn compare_packages( + &self, + packages: Vec<ComparePackage>, + backend: &Backend, + filter_repos: Vec<Repo>, + ) -> Result<()> { let mut output = self.0.lock(); for package in packages { @@ -99,4 +114,3 @@ impl Frontend for ListFrontend { Ok(()) } } - diff --git a/src/frontend/mod.rs b/src/frontend/mod.rs index e2dda0e..c9ef381 100644 --- a/src/frontend/mod.rs +++ b/src/frontend/mod.rs @@ -3,22 +3,27 @@ use clap::ArgMatches; use librepology::v1::types::*; +use crate::backend::Backend; +use crate::compare::ComparePackage; use crate::config::Configuration; -use crate::frontend::list::ListFrontend; use crate::frontend::json::JsonFrontend; +use crate::frontend::list::ListFrontend; use crate::frontend::table::TableFrontend; -use crate::compare::ComparePackage; -use crate::backend::Backend; /// A Frontend represents a way to show the data to the user pub trait Frontend { fn list_packages(&self, packages: Vec<Package>) -> Result<()>; fn list_problems(&self, problems: Vec<Problem>) -> Result<()>; - fn compare_packages(&self, packages: Vec<ComparePackage>, backend: &Backend, filter_repos: Vec<Repo>) -> Result<()>; + fn compare_packages( + &self, + packages: Vec<ComparePackage>, + backend: &Backend, + filter_repos: Vec<Repo>, + ) -> Result<()>; } -pub mod list; pub mod json; +pub mod list; pub mod table; /// Helper function for building a new Frontend object based on the commandline parameters @@ -27,19 +32,18 @@ pub fn new_frontend(app: &ArgMatches, _config: &Configuration) -> Result<Box<dyn None | Some("lines") => { debug!("No output specified, using default"); Ok(Box::new(ListFrontend::new(::std::io::stdout()))) - }, + } Some("json") => { debug!("Using JSON Frontend"); Ok(Box::new(JsonFrontend::new(::std::io::stdout()))) - }, + } Some("table") => { debug!("Using table Frontend"); Ok(Box::new(TableFrontend::new(::std::io::stdout()))) - }, + } Some(other) => Err(format_err!("Unknown Frontend '{}'", other)), } - } diff --git a/src/frontend/table.rs b/src/frontend/table.rs index 12452a8..6bb42d2 100644 --- a/src/frontend/table.rs +++ b/src/frontend/table.rs @@ -9,9 +9,9 @@ use librepology::v1::types::Repo; use prettytable::format; use prettytable::Table; -use crate::frontend::Frontend; use crate::backend::Backend; use crate::compare::ComparePackage; +use crate::frontend::Frontend; use librepology::v1::api::Api; /// A Frontend that formats the output in a nice ASCII-art table @@ -28,8 +28,12 @@ impl TableFrontend { .column_separator('|') .borders('|') .separators( - &[format::LinePosition::Title, format::LinePosition::Top, format::LinePosition::Bottom], - format::LineSeparator::new('-', '+', '+', '+') + &[ + format::LinePosition::Title, + format::LinePosition::Top, + format::LinePosition::Bottom, + ], + format::LineSeparator::new('-', '+', '+', '+'), ) .padding(1, 1) .build(); @@ -65,7 +69,8 @@ impl Frontend for TableFrontend { String::from("") }; // not optimal, but works for now - let name = package.any_name() + let name = package + .any_name() .map(Name::deref) .map(String::clone) .unwrap_or_else(|| String::from("<unknown>")); @@ -90,7 +95,12 @@ impl Frontend for TableFrontend { self.print(table) } - fn compare_packages(&self, packages: Vec<ComparePackage>, backend: &Backend, filter_repos: Vec<Repo>) -> Result<()> { + fn compare_packages( + &self, + packages: Vec<ComparePackage>, + backend: &Backend, + filter_repos: Vec<Repo>, + ) -> Result<()> { let mut table = self.mktable(); for package in packages { backend @@ -99,14 +109,13 @@ impl Frontend for TableFrontend { .filter(|p| filter_repos.contains(p.repo())) .for_each(|upstream_package| { table.add_row(row![ - package.name().clone(), - package.version().clone(), - upstream_package.repo().clone(), - upstream_package.version().clone(), - ]); + package.name().clone(), + package.version().clone(), + upstream_package.repo().clone(), + upstream_package.version().clone(), + ]); }); } self.print(table) } } - |