diff --git a/src/db.rs b/src/db.rs index ad1c148a7..202f6c160 100644 --- a/src/db.rs +++ b/src/db.rs @@ -35,10 +35,7 @@ impl Actor for DbExecutor { /// Message used to request a list of threads. /// TODO: This should support page numbers. pub struct ListThreads; - -impl Message for ListThreads { - type Result = Result>; -} +message!(ListThreads, Result>); impl Handler for DbExecutor { type Result = ::Result; @@ -56,10 +53,7 @@ impl Handler for DbExecutor { /// Message used to fetch a specific thread. Returns the thread and /// its posts. pub struct GetThread(pub i32); - -impl Message for GetThread { - type Result = Result<(Thread, Vec)>; -} +message!(GetThread, Result<(Thread, Vec)>); impl Handler for DbExecutor { type Result = ::Result; @@ -82,10 +76,7 @@ pub struct CreateThread { pub new_thread: NewThread, pub post: String, } - -impl Message for CreateThread { - type Result = Result; -} +message!(CreateThread, Result); impl Handler for DbExecutor { type Result = ::Result; @@ -121,10 +112,7 @@ impl Handler for DbExecutor { /// Message used to create a new reply pub struct CreatePost(pub NewPost); - -impl Message for CreatePost { - type Result = Result; -} +message!(CreatePost, Result); impl Handler for DbExecutor { type Result = ::Result; @@ -143,10 +131,7 @@ impl Handler for DbExecutor { /// Message used to search for posts #[derive(Deserialize)] pub struct SearchPosts { pub query: String } - -impl Message for SearchPosts { - type Result = Result>; -} +message!(SearchPosts, Result>); /// Raw PostgreSQL query used to perform full-text search on posts /// with a supplied phrase. For now, the query language is hardcoded @@ -182,10 +167,7 @@ impl Handler for DbExecutor { /// Message that triggers a refresh of the view used for full-text /// searching. pub struct RefreshSearchView; - -impl Message for RefreshSearchView { - type Result = Result<()>; -} +message!(RefreshSearchView, Result<()>); const REFRESH_QUERY: &'static str = "REFRESH MATERIALIZED VIEW search_index"; diff --git a/src/main.rs b/src/main.rs index 9ec600440..8d81a670e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -47,6 +47,16 @@ extern crate tokio_timer; extern crate url; extern crate url_serde; +/// Simple macro used to reduce boilerplate when defining actor +/// message types. +macro_rules! message { + ( $t:ty, $r:ty ) => { + impl Message for $t { + type Result = $r; + } + } +} + pub mod db; pub mod errors; pub mod handlers; diff --git a/src/oidc.rs b/src/oidc.rs index d9ba4237b..3ec15854a 100644 --- a/src/oidc.rs +++ b/src/oidc.rs @@ -70,10 +70,7 @@ impl Actor for OidcExecutor { /// Message used to request the login URL: pub struct GetLoginUrl; // TODO: Add a nonce parameter stored in session. - -impl Message for GetLoginUrl { - type Result = String; -} +message!(GetLoginUrl, String); impl Handler for OidcExecutor { type Result = String; @@ -95,10 +92,7 @@ impl Handler for OidcExecutor { /// Message used to request the token from the returned code and /// retrieve userinfo from the appropriate endpoint. pub struct RetrieveToken(pub CodeResponse); - -impl Message for RetrieveToken { - type Result = Result; -} +message!(RetrieveToken, Result); #[derive(Debug, Deserialize)] struct TokenResponse { diff --git a/src/render.rs b/src/render.rs index 0c1e69d3c..c0a2fe88e 100644 --- a/src/render.rs +++ b/src/render.rs @@ -49,10 +49,7 @@ impl From> for FormattedDate { pub struct IndexPage { pub threads: Vec, } - -impl Message for IndexPage { - type Result = Result; -} +message!(IndexPage, Result); #[derive(Debug, Serialize)] struct IndexThread { @@ -90,10 +87,7 @@ pub struct ThreadPage { pub thread: Thread, pub posts: Vec, } - -impl Message for ThreadPage { - type Result = Result; -} +message!(ThreadPage, Result); // "Renderable" structures with data transformations applied. #[derive(Debug, Serialize)] @@ -200,10 +194,7 @@ pub struct NewThreadPage { pub title: Option, pub post: Option, } - -impl Message for NewThreadPage { - type Result = Result; -} +message!(NewThreadPage, Result); impl Handler for Renderer { type Result = Result; @@ -225,10 +216,7 @@ pub struct SearchResultPage { pub query: String, pub results: Vec, } - -impl Message for SearchResultPage { - type Result = Result; -} +message!(SearchResultPage, Result); impl Handler for Renderer { type Result = Result;