diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2020-09-10 10:25:30 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2020-09-10 10:25:30 +0200 |
commit | 328ba3865c4efc83eca9ec9d71ad402d12bb1f65 (patch) | |
tree | 2757544883728b5af04e8d35e99185508ef92510 | |
parent | 71fc2a63ae4953df1f01dee86c2d3e337c54de53 (diff) | |
parent | 1a1ef22fa99096b7a997b313d90bdad542d8742b (diff) |
Merge branch 'api-update'
-rw-r--r-- | librepology/src/v1/stdinapi.rs | 2 | ||||
-rw-r--r-- | librepology/src/v1/types/package.rs | 38 | ||||
-rw-r--r-- | src/frontend/list.rs | 3 | ||||
-rw-r--r-- | src/frontend/mod.rs | 2 | ||||
-rw-r--r-- | src/frontend/table.rs | 8 |
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) } |