summaryrefslogtreecommitdiffstats
path: root/src/frontend/json.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/json.rs')
-rw-r--r--src/frontend/json.rs28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/frontend/json.rs b/src/frontend/json.rs
index cd7e651..39e86f8 100644
--- a/src/frontend/json.rs
+++ b/src/frontend/json.rs
@@ -15,23 +15,34 @@ use librepology::v1::api::Api;
pub struct JsonFrontend(Stdout);
+/// A Frontend that serializes the data to JSON
+///
+/// Useful for piping the data as structured data to another program.
+///
+/// # Warning
+///
+/// This frontend does _not_ maintain compatibility with repolocli itself. That means that piping
+/// output from repolocli to repolocli is _NOT_ supported by this frontend.
+///
impl JsonFrontend {
pub fn new(stdout: Stdout) -> Self {
JsonFrontend(stdout)
}
+
+ fn write(&self, output: String) -> Result<()> {
+ let mut outlock = self.0.lock();
+ writeln!(outlock, "{}", output).map_err(Error::from)
+ }
}
impl Frontend for JsonFrontend {
fn list_packages(&self, packages: Vec<Package>) -> Result<()> {
- let output = serde_json::ser::to_string_pretty(&packages).map_err(Error::from)?;
- let mut outlock = self.0.lock();
- writeln!(outlock, "{}", output).map_err(Error::from)
+ self.write(serde_json::ser::to_string_pretty(&packages).map_err(Error::from)?)
+
}
fn list_problems(&self, problems: Vec<Problem>) -> Result<()> {
- let output = serde_json::ser::to_string_pretty(&problems).map_err(Error::from)?;
- let mut outlock = self.0.lock();
- writeln!(outlock, "{}", output).map_err(Error::from)
+ 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<()> {
@@ -71,10 +82,7 @@ impl Frontend for JsonFrontend {
});
}
- let output = serde_json::ser::to_string_pretty(&output)?;
-
- let mut outlock = self.0.lock();
- writeln!(outlock, "{}", output).map_err(Error::from)
+ self.write(serde_json::ser::to_string_pretty(&output)?)
}
}