summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-09-10 10:25:30 +0200
committerMatthias Beyer <mail@beyermatthias.de>2020-09-10 10:25:30 +0200
commit328ba3865c4efc83eca9ec9d71ad402d12bb1f65 (patch)
tree2757544883728b5af04e8d35e99185508ef92510
parent71fc2a63ae4953df1f01dee86c2d3e337c54de53 (diff)
parent1a1ef22fa99096b7a997b313d90bdad542d8742b (diff)
Merge branch 'api-update'
-rw-r--r--librepology/src/v1/stdinapi.rs2
-rw-r--r--librepology/src/v1/types/package.rs38
-rw-r--r--src/frontend/list.rs3
-rw-r--r--src/frontend/mod.rs2
-rw-r--r--src/frontend/table.rs8
5 files changed, 45 insertions, 8 deletions
diff --git a/librepology/src/v1/stdinapi.rs b/librepology/src/v1/stdinapi.rs
index 8ee26a4..61bc093 100644
--- a/librepology/src/v1/stdinapi.rs
+++ b/librepology/src/v1/stdinapi.rs
@@ -55,7 +55,7 @@ impl Api for StdinWrapper {
}
-fn read_to_string(input: &mut Read) -> Result<String> {
+fn read_to_string(input: &mut dyn Read) -> Result<String> {
let mut buffer = String::new();
let read = input.read_to_string(&mut buffer)?;
trace!("Read {} bytes from stdin", read);
diff --git a/librepology/src/v1/types/package.rs b/librepology/src/v1/types/package.rs
index fc66faa..4623fd3 100644
--- a/librepology/src/v1/types/package.rs
+++ b/librepology/src/v1/types/package.rs
@@ -5,8 +5,17 @@ pub struct Package {
/// name of repository for this package
repo: Repo,
- /// name
- name: Name,
+ /// package name(s) as used in repository - generic one and/or source package name and/or binary package name, whichever is applicable
+ name: Option<Name>,
+
+ /// package name(s) as used in repository - generic one and/or source package name and/or binary package name, whichever is applicable
+ srcname: Option<Name>,
+
+ /// package name(s) as used in repository - generic one and/or source package name and/or binary package name, whichever is applicable
+ binname: Option<Name>,
+
+ /// package name as shown to the user by Repology
+ visiblename: Option<Name>,
/// version
version: Version,
@@ -35,8 +44,29 @@ impl Package {
&self.repo
}
- pub fn name(&self) -> &Name {
- &self.name
+ pub fn name(&self) -> Option<&Name> {
+ self.name.as_ref()
+ }
+
+ pub fn srcname(&self) -> Option<&Name> {
+ self.srcname.as_ref()
+ }
+
+ pub fn binname(&self) -> Option<&Name> {
+ self.binname.as_ref()
+ }
+
+ pub fn visiblename(&self) -> Option<&Name> {
+ self.visiblename.as_ref()
+ }
+
+ /// Get name, srcname, binname or visiblename, whatever is set
+ /// (in this order)
+ pub fn any_name(&self) -> Option<&Name> {
+ self.name()
+ .or_else(|| self.srcname())
+ .or_else(|| self.binname())
+ .or_else(|| self.visiblename())
}
pub fn version(&self) -> &Version {
diff --git a/src/frontend/list.rs b/src/frontend/list.rs
index e4ed7d7..950cfe2 100644
--- a/src/frontend/list.rs
+++ b/src/frontend/list.rs
@@ -2,6 +2,7 @@ use std::io::Stdout;
use std::io::Write;
use std::ops::Deref;
+use librepology::v1::types::Name;
use librepology::v1::types::Package;
use librepology::v1::types::Problem;
use librepology::v1::types::Repo;
@@ -48,7 +49,7 @@ impl Frontend for ListFrontend {
writeln!(outlock,
"{name:10} - {version:8} - {repo:15} - {status:5} - {www}",
- name = package.name().deref(),
+ name = package.any_name().map(Name::deref).map(String::deref).unwrap_or_else(|| "<unknown>"),
version = package.version().deref(),
repo = package.repo().deref(),
status = status,
diff --git a/src/frontend/mod.rs b/src/frontend/mod.rs
index 3bb912c..bcce43a 100644
--- a/src/frontend/mod.rs
+++ b/src/frontend/mod.rs
@@ -22,7 +22,7 @@ pub mod json;
pub mod table;
/// Helper function for building a new Frontend object based on the commandline parameters
-pub fn new_frontend(app: &ArgMatches, _config: &Configuration) -> Result<Box<Frontend>> {
+pub fn new_frontend(app: &ArgMatches, _config: &Configuration) -> Result<Box<dyn Frontend>> {
match app.value_of("output") {
None | Some("lines") => {
debug!("No output specified, using default");
diff --git a/src/frontend/table.rs b/src/frontend/table.rs
index 35c867c..cf95173 100644
--- a/src/frontend/table.rs
+++ b/src/frontend/table.rs
@@ -1,6 +1,7 @@
use std::io::Stdout;
use std::ops::Deref;
+use librepology::v1::types::Name;
use librepology::v1::types::Package;
use librepology::v1::types::Problem;
use librepology::v1::types::Repo;
@@ -64,7 +65,12 @@ impl Frontend for TableFrontend {
String::from("")
}; // not optimal, but works for now
- table.add_row(row![package.name(), package.version(), package.repo(), status, url]);
+ let name = package.any_name()
+ .map(Name::deref)
+ .map(String::clone)
+ .unwrap_or_else(|| String::from("<unknown>"));
+
+ table.add_row(row![name, package.version(), package.repo(), status, url]);
});
self.print(table)
}