Browse Source

move events definition to github.rs

Pietro Albini 6 years ago
parent
commit
7b9ca8a59e
4 changed files with 40 additions and 41 deletions
  1. 26 0
      src/github.rs
  2. 2 2
      src/handlers/label.rs
  3. 11 33
      src/main.rs
  4. 1 6
      src/registry.rs

+ 26 - 0
src/github.rs

@@ -150,6 +150,32 @@ impl Issue {
     }
 }
 
+#[derive(PartialEq, Eq, Debug, serde::Deserialize)]
+#[serde(rename_all = "lowercase")]
+pub enum IssueCommentAction {
+    Created,
+    Edited,
+    Deleted,
+}
+
+#[derive(Debug, serde::Deserialize)]
+pub struct IssueCommentEvent {
+    pub action: IssueCommentAction,
+    pub issue: Issue,
+    pub comment: Comment,
+    pub repository: Repository,
+}
+
+#[derive(Debug, serde::Deserialize)]
+pub struct Repository {
+    pub full_name: String,
+}
+
+#[derive(Debug)]
+pub enum Event {
+    IssueComment(IssueCommentEvent),
+}
+
 trait RequestSend: Sized {
     fn configure(self, g: &GithubClient) -> Self;
     fn send_req(self) -> Result<Response, HttpError>;

+ 2 - 2
src/handlers/label.rs

@@ -9,9 +9,9 @@
 //! notification noise.
 
 use crate::{
-    github::{self, GithubClient},
+    github::{self, Event, GithubClient},
     interactions::ErrorComment,
-    registry::{Event, Handler},
+    registry::Handler,
 };
 use failure::Error;
 use parser::command::label::{LabelCommand, LabelDelta};

+ 11 - 33
src/main.rs

@@ -21,37 +21,15 @@ mod interactions;
 mod payload;
 mod team;
 
-use github::{Comment, GithubClient, Issue, User};
 use payload::SignedPayload;
 use registry::HandleRegistry;
 
-#[derive(PartialEq, Eq, Debug, serde::Deserialize)]
-#[serde(rename_all = "lowercase")]
-pub enum IssueCommentAction {
-    Created,
-    Edited,
-    Deleted,
-}
-
-#[derive(Debug, serde::Deserialize)]
-pub struct IssueCommentEvent {
-    action: IssueCommentAction,
-    issue: Issue,
-    comment: Comment,
-    repository: Repository,
-}
-
-#[derive(Debug, serde::Deserialize)]
-pub struct Repository {
-    full_name: String,
-}
-
-enum Event {
+enum EventName {
     IssueComment,
     Other,
 }
 
-impl<'a, 'r> request::FromRequest<'a, 'r> for Event {
+impl<'a, 'r> request::FromRequest<'a, 'r> for EventName {
     type Error = String;
     fn from_request(req: &'a Request<'r>) -> request::Outcome<Self, Self::Error> {
         let ev = if let Some(ev) = req.headers().get_one("X-GitHub-Event") {
@@ -60,8 +38,8 @@ impl<'a, 'r> request::FromRequest<'a, 'r> for Event {
             return Outcome::Failure((Status::BadRequest, "Needs a X-GitHub-Event".into()));
         };
         let ev = match ev {
-            "issue_comment" => Event::IssueComment,
-            _ => Event::Other,
+            "issue_comment" => EventName::IssueComment,
+            _ => EventName::Other,
         };
         Outcome::Success(ev)
     }
@@ -89,22 +67,22 @@ impl From<Error> for WebhookError {
 
 #[post("/github-hook", data = "<payload>")]
 fn webhook(
-    event: Event,
+    event: EventName,
     payload: SignedPayload,
     reg: State<HandleRegistry>,
 ) -> Result<(), WebhookError> {
     match event {
-        Event::IssueComment => {
+        EventName::IssueComment => {
             let payload = payload
-                .deserialize::<IssueCommentEvent>()
+                .deserialize::<github::IssueCommentEvent>()
                 .context("IssueCommentEvent failed to deserialize")
                 .map_err(Error::from)?;
 
-            let event = registry::Event::IssueComment(payload);
+            let event = github::Event::IssueComment(payload);
             reg.handle(&event).map_err(Error::from)?;
         }
         // Other events need not be handled
-        Event::Other => {}
+        EventName::Other => {}
     }
     Ok(())
 }
@@ -117,11 +95,11 @@ fn not_found(_: &Request) -> &'static str {
 fn main() {
     dotenv::dotenv().ok();
     let client = Client::new();
-    let gh = GithubClient::new(
+    let gh = github::GithubClient::new(
         client.clone(),
         env::var("GITHUB_API_TOKEN").expect("Missing GITHUB_API_TOKEN"),
     );
-    let username = Arc::new(User::current(&gh).unwrap().login);
+    let username = Arc::new(github::User::current(&gh).unwrap().login);
     let mut registry = HandleRegistry::new();
     handlers::register_all(&mut registry, gh.clone(), username);
 

+ 1 - 6
src/registry.rs

@@ -1,4 +1,4 @@
-use crate::IssueCommentEvent;
+use crate::github::Event;
 use failure::Error;
 
 pub struct HandleRegistry {
@@ -35,11 +35,6 @@ impl HandleRegistry {
     }
 }
 
-#[derive(Debug)]
-pub enum Event {
-    IssueComment(IssueCommentEvent),
-}
-
 pub trait Handler: Sync + Send {
     fn handle_event(&self, event: &Event) -> Result<(), Error>;
 }