From 71391281d49731de6c10046735e188266f4bc514 Mon Sep 17 00:00:00 2001 From: Harald Eilertsen Date: Wed, 22 Nov 2017 19:38:53 +0100 Subject: Move responder impl's for templates to a macro. --- src/main.rs | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) (limited to 'src') 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 } -impl<'a> Responder<'a> for IndexTemplate<'a> { - fn respond_to(self, _: &Request) -> Result, 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, 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, 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 { use schema::posts::dsl::*; -- cgit v1.2.3