refactor: Add a message!-macro to reduce message boilerplate
This commit is contained in:
parent
d9d1a3313f
commit
ce18cfa2d6
4 changed files with 22 additions and 48 deletions
30
src/db.rs
30
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<Vec<ThreadIndex>>;
|
||||
}
|
||||
message!(ListThreads, Result<Vec<ThreadIndex>>);
|
||||
|
||||
impl Handler<ListThreads> for DbExecutor {
|
||||
type Result = <ListThreads as Message>::Result;
|
||||
|
@ -56,10 +53,7 @@ impl Handler<ListThreads> 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<Post>)>;
|
||||
}
|
||||
message!(GetThread, Result<(Thread, Vec<Post>)>);
|
||||
|
||||
impl Handler<GetThread> for DbExecutor {
|
||||
type Result = <GetThread as Message>::Result;
|
||||
|
@ -82,10 +76,7 @@ pub struct CreateThread {
|
|||
pub new_thread: NewThread,
|
||||
pub post: String,
|
||||
}
|
||||
|
||||
impl Message for CreateThread {
|
||||
type Result = Result<Thread>;
|
||||
}
|
||||
message!(CreateThread, Result<Thread>);
|
||||
|
||||
impl Handler<CreateThread> for DbExecutor {
|
||||
type Result = <CreateThread as Message>::Result;
|
||||
|
@ -121,10 +112,7 @@ impl Handler<CreateThread> for DbExecutor {
|
|||
|
||||
/// Message used to create a new reply
|
||||
pub struct CreatePost(pub NewPost);
|
||||
|
||||
impl Message for CreatePost {
|
||||
type Result = Result<Post>;
|
||||
}
|
||||
message!(CreatePost, Result<Post>);
|
||||
|
||||
impl Handler<CreatePost> for DbExecutor {
|
||||
type Result = <CreatePost as Message>::Result;
|
||||
|
@ -143,10 +131,7 @@ impl Handler<CreatePost> for DbExecutor {
|
|||
/// Message used to search for posts
|
||||
#[derive(Deserialize)]
|
||||
pub struct SearchPosts { pub query: String }
|
||||
|
||||
impl Message for SearchPosts {
|
||||
type Result = Result<Vec<SearchResult>>;
|
||||
}
|
||||
message!(SearchPosts, Result<Vec<SearchResult>>);
|
||||
|
||||
/// 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<SearchPosts> 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";
|
||||
|
||||
|
|
10
src/main.rs
10
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;
|
||||
|
|
10
src/oidc.rs
10
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<GetLoginUrl> for OidcExecutor {
|
||||
type Result = String;
|
||||
|
@ -95,10 +92,7 @@ impl Handler<GetLoginUrl> 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<Author>;
|
||||
}
|
||||
message!(RetrieveToken, Result<Author>);
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct TokenResponse {
|
||||
|
|
|
@ -49,10 +49,7 @@ impl From<DateTime<Utc>> for FormattedDate {
|
|||
pub struct IndexPage {
|
||||
pub threads: Vec<ThreadIndex>,
|
||||
}
|
||||
|
||||
impl Message for IndexPage {
|
||||
type Result = Result<String>;
|
||||
}
|
||||
message!(IndexPage, Result<String>);
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
struct IndexThread {
|
||||
|
@ -90,10 +87,7 @@ pub struct ThreadPage {
|
|||
pub thread: Thread,
|
||||
pub posts: Vec<Post>,
|
||||
}
|
||||
|
||||
impl Message for ThreadPage {
|
||||
type Result = Result<String>;
|
||||
}
|
||||
message!(ThreadPage, Result<String>);
|
||||
|
||||
// "Renderable" structures with data transformations applied.
|
||||
#[derive(Debug, Serialize)]
|
||||
|
@ -200,10 +194,7 @@ pub struct NewThreadPage {
|
|||
pub title: Option<String>,
|
||||
pub post: Option<String>,
|
||||
}
|
||||
|
||||
impl Message for NewThreadPage {
|
||||
type Result = Result<String>;
|
||||
}
|
||||
message!(NewThreadPage, Result<String>);
|
||||
|
||||
impl Handler<NewThreadPage> for Renderer {
|
||||
type Result = Result<String>;
|
||||
|
@ -225,10 +216,7 @@ pub struct SearchResultPage {
|
|||
pub query: String,
|
||||
pub results: Vec<SearchResult>,
|
||||
}
|
||||
|
||||
impl Message for SearchResultPage {
|
||||
type Result = Result<String>;
|
||||
}
|
||||
message!(SearchResultPage, Result<String>);
|
||||
|
||||
impl Handler<SearchResultPage> for Renderer {
|
||||
type Result = Result<String>;
|
||||
|
|
Loading…
Reference in a new issue