diff options
| -rw-r--r-- | src/client.rs | 72 | ||||
| -rw-r--r-- | src/lib.rs | 73 | 
2 files changed, 74 insertions, 71 deletions
| diff --git a/src/client.rs b/src/client.rs new file mode 100644 index 0000000..d6cf629 --- /dev/null +++ b/src/client.rs @@ -0,0 +1,72 @@ +use github_rs::client::{Executor, Github}; +use serde_json::Value; +use thiserror::Error; + +use crate::suggestion::Suggestion; + + +#[derive(Debug, Error)] +pub enum Error { +    #[error("GitHub client error: {0}")] +    Github(String), + +    #[error("Unable to deserialize")] +    Deserialize(#[from] serde_json::error::Error), +} + + +pub struct Client<'a> { +    client: Github, +    owner: &'a str, +    repo: &'a str, +} + +impl<'a> Client<'a> { +    pub fn new(token: &str, owner: &'a str, repo: &'a str) -> Self { +        let client = Github::new(&token).unwrap(); + +        Client { client, owner, repo } +    } + +    pub fn fetch(&self, id: &str) -> Result<Suggestion, Error> { +        let response = self.client +            .get() +            .repos() +            .owner(self.owner) +            .repo(self.repo) +            .pulls() +            .comments() +            .id(id) +            .execute::<Value>(); + +        match response { +            Ok((_, _, Some(json))) => { +                let suggestion = serde_json::from_value(json)?; + +                Ok(suggestion) +            }, +            Ok((_, _, None)) => Err(Error::Github("no response".to_owned())), +            Err(e) => Err(Error::Github(e.to_string())), +        } +    } +} + + +#[cfg(test)] +mod tests { +    use super::*; + +    #[test] +    #[ignore] +    fn suggestion_fetch_gets_pull_request_comment() { +        let client = Client::new( +            env!("GITHUB_TOKEN"), +            "cli", +            "cli", +        ); + +        let suggestion = client.fetch("438947607").unwrap(); + +        println!("{:?}", suggestion); +    } +} @@ -1,80 +1,11 @@  #![warn(rust_2018_idioms)] +pub mod client;  pub mod suggestion;  mod url; +pub use crate::client::Client;  pub use crate::suggestion::Suggestion;  pub use crate::url::SuggestionUrl; - - -use github_rs::client::{Executor, Github}; -use serde_json::Value; -use thiserror::Error; - - -#[derive(Debug, Error)] -pub enum Error { -    #[error("GitHub client error: {0}")] -    Github(String), - -    #[error("Unable to deserialize")] -    Deserialize(#[from] serde_json::error::Error), -} - - -pub struct Client<'a> { -    client: Github, -    owner: &'a str, -    repo: &'a str, -} - -impl<'a> Client<'a> { -    pub fn new(token: &str, owner: &'a str, repo: &'a str) -> Self { -        let client = Github::new(&token).unwrap(); - -        Client { client, owner, repo } -    } - -    pub fn fetch(&self, id: &str) -> Result<Suggestion, Error> { -        let response = self.client -            .get() -            .repos() -            .owner(self.owner) -            .repo(self.repo) -            .pulls() -            .comments() -            .id(id) -            .execute::<Value>(); - -        match response { -            Ok((_, _, Some(json))) => { -                let suggestion = serde_json::from_value(json)?; - -                Ok(suggestion) -            }, -            Ok((_, _, None)) => Err(Error::Github("no response".to_owned())), -            Err(e) => Err(Error::Github(e.to_string())), -        } -    } -} - -#[cfg(test)] -mod tests { -    use super::*; - -    #[test] -    #[ignore] -    fn suggestion_fetch_gets_pull_request_comment() { -        let client = Client::new( -            env!("GITHUB_TOKEN"), -            "cli", -            "cli", -        ); - -        let suggestion = client.fetch("438947607").unwrap(); - -        println!("{:?}", suggestion); -    } -} | 
