diff options
Diffstat (limited to 'src/frontend/json.rs')
-rw-r--r-- | src/frontend/json.rs | 28 |
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)?) } } |