summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2019-04-25 09:36:21 +0200
committerMatthias Beyer <matthias.beyer@atos.net>2019-04-25 09:36:21 +0200
commit79d82cf3d349d7914de5e198d1e191171a8fcea6 (patch)
treeabcd62d07cbb55a5d055d57f12e6946643bd3b5d
parent6850e90c5402873970c39726b74b6bef442aa4cb (diff)
Refactor: Move StdinWrapper to own module
-rw-r--r--librepology/src/v1/api.rs57
-rw-r--r--librepology/src/v1/mod.rs1
-rw-r--r--librepology/src/v1/stdinapi.rs63
-rw-r--r--src/backend.rs2
4 files changed, 65 insertions, 58 deletions
diff --git a/librepology/src/v1/api.rs b/librepology/src/v1/api.rs
index b493209..e192022 100644
--- a/librepology/src/v1/api.rs
+++ b/librepology/src/v1/api.rs
@@ -1,10 +1,4 @@
-use std::io::{Stdin, Read};
-use std::cell::RefCell;
-use std::ops::Deref;
-use std::ops::DerefMut;
-
use failure::Fallible as Result;
-use failure::Error;
use crate::v1::types::Problem;
use crate::v1::types::Package;
@@ -26,54 +20,3 @@ pub trait Api {
}
-/// Wrapper for "stdin"
-///
-/// This way we can implement the `Api` trait for StdIn (via a Wrapper for interior mutability)
-/// This way we can read the data from stdin and process it.
-pub struct StdinWrapper(RefCell<Stdin>);
-
-impl From<Stdin> for StdinWrapper {
- fn from(inner: Stdin) -> Self {
- StdinWrapper(RefCell::new(inner))
- }
-}
-
-impl Deref for StdinWrapper {
- type Target = RefCell<Stdin>;
-
- fn deref(&self) -> &Self::Target {
- &self.0
- }
-}
-
-impl DerefMut for StdinWrapper {
- fn deref_mut(&mut self) -> &mut Self::Target {
- &mut self.0
- }
-}
-
-impl Api for StdinWrapper {
-
- fn project<N: AsRef<str>>(&self, _name: N) -> Result<Vec<Package>> {
- let s = read_to_string(self.0.try_borrow_mut()?.deref_mut())?;
- serde_json::de::from_str(&s).map_err(Error::from)
- }
-
- fn problems_for_repo<R: AsRef<str>>(&self, _repo: R) -> Result<Vec<Problem>> {
- let s = read_to_string(self.0.try_borrow_mut()?.deref_mut())?;
- serde_json::de::from_str(&s).map_err(Error::from)
- }
-
- fn problems_for_maintainer<M: AsRef<str>>(&self, _maintainer: M) -> Result<Vec<Problem>> {
- let s = read_to_string(self.0.try_borrow_mut()?.deref_mut())?;
- serde_json::de::from_str(&s).map_err(Error::from)
- }
-
-}
-
-fn read_to_string(input: &mut Read) -> Result<String> {
- let mut buffer = String::new();
- let read = input.read_to_string(&mut buffer)?;
- trace!("Read {} bytes from stdin", read);
- Ok(buffer)
-}
diff --git a/librepology/src/v1/mod.rs b/librepology/src/v1/mod.rs
index cd4d2fe..1d5eed6 100644
--- a/librepology/src/v1/mod.rs
+++ b/librepology/src/v1/mod.rs
@@ -1,3 +1,4 @@
pub mod restapi;
+pub mod stdinapi;
pub mod api;
pub mod types;
diff --git a/librepology/src/v1/stdinapi.rs b/librepology/src/v1/stdinapi.rs
new file mode 100644
index 0000000..8ee26a4
--- /dev/null
+++ b/librepology/src/v1/stdinapi.rs
@@ -0,0 +1,63 @@
+use std::io::{Stdin, Read};
+use std::cell::RefCell;
+use std::ops::Deref;
+use std::ops::DerefMut;
+
+use failure::Fallible as Result;
+use failure::Error;
+
+use crate::v1::types::Problem;
+use crate::v1::types::Package;
+use crate::v1::api::Api;
+
+/// Wrapper for "stdin"
+///
+/// This way we can implement the `Api` trait for StdIn (via a Wrapper for interior mutability)
+/// This way we can read the data from stdin and process it.
+pub struct StdinWrapper(RefCell<Stdin>);
+
+impl From<Stdin> for StdinWrapper {
+ fn from(inner: Stdin) -> Self {
+ StdinWrapper(RefCell::new(inner))
+ }
+}
+
+impl Deref for StdinWrapper {
+ type Target = RefCell<Stdin>;
+
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+
+impl DerefMut for StdinWrapper {
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ &mut self.0
+ }
+}
+
+impl Api for StdinWrapper {
+
+ fn project<N: AsRef<str>>(&self, _name: N) -> Result<Vec<Package>> {
+ let s = read_to_string(self.0.try_borrow_mut()?.deref_mut())?;
+ serde_json::de::from_str(&s).map_err(Error::from)
+ }
+
+ fn problems_for_repo<R: AsRef<str>>(&self, _repo: R) -> Result<Vec<Problem>> {
+ let s = read_to_string(self.0.try_borrow_mut()?.deref_mut())?;
+ serde_json::de::from_str(&s).map_err(Error::from)
+ }
+
+ fn problems_for_maintainer<M: AsRef<str>>(&self, _maintainer: M) -> Result<Vec<Problem>> {
+ let s = read_to_string(self.0.try_borrow_mut()?.deref_mut())?;
+ serde_json::de::from_str(&s).map_err(Error::from)
+ }
+
+}
+
+fn read_to_string(input: &mut Read) -> Result<String> {
+ let mut buffer = String::new();
+ let read = input.read_to_string(&mut buffer)?;
+ trace!("Read {} bytes from stdin", read);
+ Ok(buffer)
+}
diff --git a/src/backend.rs b/src/backend.rs
index 23a09d4..fe1fa7e 100644
--- a/src/backend.rs
+++ b/src/backend.rs
@@ -3,8 +3,8 @@ use failure::Fallible as Result;
use librepology::v1::api::Api;
use librepology::v1::restapi::RestApi;
+use librepology::v1::stdinapi::StdinWrapper;
use librepology::v1::types::*;
-use librepology::v1::api::StdinWrapper;
use crate::config::Configuration;