summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2019-04-24 09:56:27 +0200
committerMatthias Beyer <matthias.beyer@atos.net>2019-04-24 09:58:52 +0200
commitfcf973c16d4128dda76b809b0d5b9a2635afae47 (patch)
tree35c24480d94bba8a7fe3d24e9bb088f40e695089
parent4eb2b6a4544f0c2cfd0d72b1fac27bfb2882a4b4 (diff)
Add missing "ComparePackage" type
Because we cannot build a "Package" from the compare file (because we shouldn't, because we only need _some_ information about the package), we should use a special helper type for deserializing the contents of the file.
-rw-r--r--src/compare.rs15
-rw-r--r--src/frontend/json.rs7
-rw-r--r--src/frontend/list.rs3
-rw-r--r--src/frontend/mod.rs3
-rw-r--r--src/frontend/table.rs3
-rw-r--r--src/main.rs9
6 files changed, 30 insertions, 10 deletions
diff --git a/src/compare.rs b/src/compare.rs
new file mode 100644
index 0000000..c13d01e
--- /dev/null
+++ b/src/compare.rs
@@ -0,0 +1,15 @@
+#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)]
+pub struct ComparePackage {
+ name: String,
+ version: String,
+}
+
+impl ComparePackage {
+ pub fn name(&self) -> &String {
+ &self.name
+ }
+
+ pub fn version(&self) -> &String {
+ &self.version
+ }
+} \ No newline at end of file
diff --git a/src/frontend/json.rs b/src/frontend/json.rs
index 63b7bbe..b6a34e5 100644
--- a/src/frontend/json.rs
+++ b/src/frontend/json.rs
@@ -10,6 +10,7 @@ use failure::Error;
use crate::frontend::Frontend;
use crate::backend::Backend;
+use crate::compare::ComparePackage;
use librepology::v1::api::Api;
pub struct JsonFrontend(Stdout);
@@ -33,7 +34,7 @@ impl Frontend for JsonFrontend {
writeln!(outlock, "{}", output).map_err(Error::from)
}
- fn compare_packages(&self, packages: Vec<Package>, 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
@@ -53,8 +54,8 @@ impl Frontend for JsonFrontend {
.filter(|p| filter_repos.contains(p.repo()))
.map(|upstream_package| {
PackageComp {
- package_name: package.name().deref().clone(),
- local_version: package.version().deref().clone(),
+ package_name: package.name().clone(),
+ local_version: package.version().clone(),
upstream_repo: upstream_package.repo().deref().clone(),
upstream_version: upstream_package.version().deref().clone(),
}
diff --git a/src/frontend/list.rs b/src/frontend/list.rs
index b229ecd..e870ab0 100644
--- a/src/frontend/list.rs
+++ b/src/frontend/list.rs
@@ -10,6 +10,7 @@ use failure::Error;
use crate::frontend::Frontend;
use crate::backend::Backend;
+use crate::compare::ComparePackage;
use librepology::v1::api::Api;
pub struct ListFrontend(Stdout);
@@ -71,7 +72,7 @@ impl Frontend for ListFrontend {
})
}
- fn compare_packages(&self, packages: Vec<Package>, 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 {
diff --git a/src/frontend/mod.rs b/src/frontend/mod.rs
index 0027fd8..43e5b5e 100644
--- a/src/frontend/mod.rs
+++ b/src/frontend/mod.rs
@@ -7,12 +7,13 @@ use crate::config::Configuration;
use crate::frontend::list::ListFrontend;
use crate::frontend::json::JsonFrontend;
use crate::frontend::table::TableFrontend;
+use crate::compare::ComparePackage;
use crate::backend::Backend;
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<Package>, backend: &Backend, filter_repos: Vec<Repo>) -> Result<()>;
+ fn compare_packages(&self, packages: Vec<ComparePackage>, backend: &Backend, filter_repos: Vec<Repo>) -> Result<()>;
}
pub mod list;
diff --git a/src/frontend/table.rs b/src/frontend/table.rs
index f840482..6a30e9c 100644
--- a/src/frontend/table.rs
+++ b/src/frontend/table.rs
@@ -10,6 +10,7 @@ use prettytable::Table;
use crate::frontend::Frontend;
use crate::backend::Backend;
+use crate::compare::ComparePackage;
use librepology::v1::api::Api;
pub struct TableFrontend(Stdout);
@@ -94,7 +95,7 @@ impl Frontend for TableFrontend {
Ok(())
}
- fn compare_packages(&self, packages: Vec<Package>, backend: &Backend, filter_repos: Vec<Repo>) -> Result<()> {
+ 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('|')
diff --git a/src/main.rs b/src/main.rs
index 62e193d..9acc496 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -21,6 +21,7 @@ mod config;
mod backend;
mod frontend;
mod cli;
+mod compare;
use std::path::PathBuf;
@@ -34,9 +35,9 @@ use clap::ArgMatches;
use filters::filter::Filter;
use config::Configuration;
+use compare::ComparePackage;
use librepology::v1::api::Api;
use librepology::v1::types::Repo;
-use librepology::v1::types::Package;
fn initialize_logging(app: &ArgMatches) -> Result<()> {
let verbosity = app.occurrences_of("verbose");
@@ -65,7 +66,7 @@ fn initialize_logging(app: &ArgMatches) -> Result<()> {
.map_err(Error::from)
}
-fn deserialize_package_list(s: String, filepath: &str) -> Result<Vec<Package>> {
+fn deserialize_package_list(s: String, filepath: &str) -> Result<Vec<ComparePackage>> {
let pb = PathBuf::from(filepath);
let ext = pb
.extension()
@@ -81,7 +82,7 @@ fn deserialize_package_list(s: String, filepath: &str) -> Result<Vec<Package>> {
#[cfg(feature = "compare_csv")]
"csv" => {
let cursor = Cursor::new(s);
- let mut v : Vec<Package> = vec![];
+ let mut v : Vec<ComparePackage> = vec![];
for element in csv::Reader::from_reader(cursor).deserialize() {
v.push(element?);
}
@@ -185,7 +186,7 @@ fn main() -> Result<()> {
let repos = mtch.values_of("compare-distros").unwrap().map(|s| Repo::new(String::from(s))).collect();
let file_path = mtch.value_of("compare-list").unwrap(); // safe by clap
let content = ::std::fs::read_to_string(file_path).map_err(Error::from)?;
- let pkgs : Vec<Package> = deserialize_package_list(content, file_path)?;
+ let pkgs : Vec<ComparePackage> = deserialize_package_list(content, file_path)?;
frontend.compare_packages(pkgs, &backend, repos)?;
},