aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main.rs34
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::*;