From b3a313f8e5e0185104727e75747251121eddf92d Mon Sep 17 00:00:00 2001 From: Kevin J Hoerr Date: Wed, 30 Oct 2019 09:40:39 -0400 Subject: Refactor messages module to be separate from routes and easily referencable --- src/main.rs | 1 + src/messages/callback.rs | 67 +++++++++++++++++++++++++++++++++++ src/messages/mod.rs | 26 ++++++++++++++ src/messages/not_understood.rs | 48 +++++++++++++++++++++++++ src/routes/messages/callback.rs | 67 ----------------------------------- src/routes/messages/mod.rs | 23 ------------ src/routes/messages/not_understood.rs | 48 ------------------------- src/routes/mod.rs | 4 +-- 8 files changed, 143 insertions(+), 141 deletions(-) create mode 100644 src/messages/callback.rs create mode 100644 src/messages/mod.rs create mode 100644 src/messages/not_understood.rs delete mode 100644 src/routes/messages/callback.rs delete mode 100644 src/routes/messages/mod.rs delete mode 100644 src/routes/messages/not_understood.rs (limited to 'src') diff --git a/src/main.rs b/src/main.rs index c0fbf13..1b5ac70 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,6 +10,7 @@ extern crate serde; #[macro_use] extern crate serde_derive; +pub mod messages; pub mod routes; pub mod schema; diff --git a/src/messages/callback.rs b/src/messages/callback.rs new file mode 100644 index 0000000..d98ac15 --- /dev/null +++ b/src/messages/callback.rs @@ -0,0 +1,67 @@ +use messages::Message; +use std::collections::HashMap; + +#[derive(Debug, Serialize)] +pub struct Callback { + pub path: Vec, + pub request: String, + pub content: HashMap, +} + +impl Message for Callback { + fn name(&self) -> String { + String::from("CALLBACK") + } +} + +impl PartialEq for Callback { + fn eq(&self, other: &Self) -> bool { + self.request == other.request && self.path == other.path && self.content == other.content + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_name() { + // Arrange + let query = HashMap::new(); + let message = Callback { + path: vec![], + request: String::from("GET"), + content: query, + }; + + // Act + let name = message.name(); + + // Assert + assert_eq!(name, "CALLBACK"); + } + + #[test] + fn test_asoutgoing() { + // Arrange + let message = Callback { + path: vec![], + request: String::from("GET"), + content: HashMap::new(), + }; + + // Act + let outgoing = message.as_outgoing(); + + // Assert + assert_eq!(outgoing.result_type, "CALLBACK"); + assert_eq!( + outgoing.content, + Callback { + path: vec![], + request: String::from("GET"), + content: HashMap::new(), + } + ); + } +} diff --git a/src/messages/mod.rs b/src/messages/mod.rs new file mode 100644 index 0000000..ca74078 --- /dev/null +++ b/src/messages/mod.rs @@ -0,0 +1,26 @@ +use std::marker::Sized; + +pub mod callback; +pub mod not_understood; + +pub use self::callback::Callback; +pub use self::not_understood::NotUnderstood; + +#[derive(Serialize)] +pub struct OutgoingMsg { + pub result_type: String, + pub content: T, +} + +pub trait Message { + fn name(&self) -> String; + fn as_outgoing(self) -> OutgoingMsg + where + Self: Sized, + { + OutgoingMsg { + result_type: self.name(), + content: self, + } + } +} diff --git a/src/messages/not_understood.rs b/src/messages/not_understood.rs new file mode 100644 index 0000000..6c2c3ae --- /dev/null +++ b/src/messages/not_understood.rs @@ -0,0 +1,48 @@ +use messages::Message; + +#[derive(Debug, Serialize)] +pub struct NotUnderstood { + pub path: Vec, +} + +impl Message for NotUnderstood { + fn name(&self) -> String { + String::from("NOT_UNDERSTOOD") + } +} + +impl PartialEq for NotUnderstood { + fn eq(&self, other: &Self) -> bool { + self.path == other.path + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_name() { + // Arrange + let message = NotUnderstood { path: vec![] }; + + // Act + let name = message.name(); + + // Assert + assert_eq!(name, "NOT_UNDERSTOOD"); + } + + #[test] + fn test_asoutgoing() { + // Arrange + let message = NotUnderstood { path: vec![] }; + + // Act + let outgoing = message.as_outgoing(); + + // Assert + assert_eq!(outgoing.result_type, "NOT_UNDERSTOOD"); + assert_eq!(outgoing.content, NotUnderstood { path: vec![] }); + } +} diff --git a/src/routes/messages/callback.rs b/src/routes/messages/callback.rs deleted file mode 100644 index d98ac15..0000000 --- a/src/routes/messages/callback.rs +++ /dev/null @@ -1,67 +0,0 @@ -use messages::Message; -use std::collections::HashMap; - -#[derive(Debug, Serialize)] -pub struct Callback { - pub path: Vec, - pub request: String, - pub content: HashMap, -} - -impl Message for Callback { - fn name(&self) -> String { - String::from("CALLBACK") - } -} - -impl PartialEq for Callback { - fn eq(&self, other: &Self) -> bool { - self.request == other.request && self.path == other.path && self.content == other.content - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_name() { - // Arrange - let query = HashMap::new(); - let message = Callback { - path: vec![], - request: String::from("GET"), - content: query, - }; - - // Act - let name = message.name(); - - // Assert - assert_eq!(name, "CALLBACK"); - } - - #[test] - fn test_asoutgoing() { - // Arrange - let message = Callback { - path: vec![], - request: String::from("GET"), - content: HashMap::new(), - }; - - // Act - let outgoing = message.as_outgoing(); - - // Assert - assert_eq!(outgoing.result_type, "CALLBACK"); - assert_eq!( - outgoing.content, - Callback { - path: vec![], - request: String::from("GET"), - content: HashMap::new(), - } - ); - } -} diff --git a/src/routes/messages/mod.rs b/src/routes/messages/mod.rs deleted file mode 100644 index 26ae1bb..0000000 --- a/src/routes/messages/mod.rs +++ /dev/null @@ -1,23 +0,0 @@ -use std::marker::Sized; - -pub mod callback; -pub mod not_understood; - -#[derive(Serialize)] -pub struct OutgoingMsg { - pub result_type: String, - pub content: T, -} - -pub trait Message { - fn name(&self) -> String; - fn as_outgoing(self) -> OutgoingMsg - where - Self: Sized, - { - OutgoingMsg { - result_type: self.name(), - content: self, - } - } -} diff --git a/src/routes/messages/not_understood.rs b/src/routes/messages/not_understood.rs deleted file mode 100644 index 6c2c3ae..0000000 --- a/src/routes/messages/not_understood.rs +++ /dev/null @@ -1,48 +0,0 @@ -use messages::Message; - -#[derive(Debug, Serialize)] -pub struct NotUnderstood { - pub path: Vec, -} - -impl Message for NotUnderstood { - fn name(&self) -> String { - String::from("NOT_UNDERSTOOD") - } -} - -impl PartialEq for NotUnderstood { - fn eq(&self, other: &Self) -> bool { - self.path == other.path - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_name() { - // Arrange - let message = NotUnderstood { path: vec![] }; - - // Act - let name = message.name(); - - // Assert - assert_eq!(name, "NOT_UNDERSTOOD"); - } - - #[test] - fn test_asoutgoing() { - // Arrange - let message = NotUnderstood { path: vec![] }; - - // Act - let outgoing = message.as_outgoing(); - - // Assert - assert_eq!(outgoing.result_type, "NOT_UNDERSTOOD"); - assert_eq!(outgoing.content, NotUnderstood { path: vec![] }); - } -} diff --git a/src/routes/mod.rs b/src/routes/mod.rs index 4a8ed5a..6039f44 100644 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -1,9 +1,7 @@ use actix_web::{web::Json, web::Query, HttpRequest, Result}; +use messages::*; use std::collections::HashMap; -pub mod messages; -use messages::{callback::*, not_understood::*, *}; - type JsonMessage = Result>>; // Sends a default response message when requested an undefined resource. -- cgit