diff options
-rw-r--r-- | src/main.rs | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/src/main.rs b/src/main.rs index a709cd9..c94dab5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -23,23 +23,27 @@ struct IndexTemplate<'a> { posts: Vec<models::Post> } -impl<'a> Responder<'a> for IndexTemplate<'a> { - fn respond_to(self, _: &Request) -> Result<Response<'static>, Status> { - Response::build() - .header(ContentType::HTML) - .sized_body(Cursor::new(format!("{}", &self))) - .ok() - } +macro_rules! implement_responder_for { + // Implement a responder for the given template type + // + // Seems I can't add the lifetime after the matcher, + // like this: `$template_type<'a>` + // So it will have to be passed in to the argument at + // the macro incovation instead. + ($template_type:ty) => ( + impl<'a> Responder<'a> for $template_type { + fn respond_to(self, _: &Request) -> Result<Response<'static>, Status> { + Response::build() + .header(ContentType::HTML) + .sized_body(Cursor::new(format!("{}", &self))) + .ok() + } + } + ) } -impl<'a> Responder<'a> for posts::NewPostTemplate<'a> { - fn respond_to(self, _: &Request) -> Result<Response<'static>, Status> { - Response::build() - .header(ContentType::HTML) - .sized_body(Cursor::new(format!("{}", &self))) - .ok() - } -} +implement_responder_for!(IndexTemplate<'a>); +implement_responder_for!(posts::NewPostTemplate<'a>); fn get_posts(conn: rocket_blog::DbConn) -> Vec<models::Post> { use schema::posts::dsl::*; |