actix_json_responder/
lib.rs1extern crate proc_macro;
2extern crate quote;
3
4use proc_macro::TokenStream;
5use quote::quote;
6use syn::{parse_macro_input, DeriveInput};
7
8#[proc_macro_derive(JsonResponder)]
11pub fn responder_derive(input: TokenStream) -> TokenStream {
12 let input = parse_macro_input!(input as DeriveInput);
13 let ident = input.ident;
14
15 (quote! {
16 impl actix_web::Responder for #ident {
17 type Body = actix_web::body::BoxBody;
18
19 fn respond_to(self, _: &actix_web::HttpRequest) -> actix_web::HttpResponse<Self::Body> {
20 match serde_json::to_string(&self) {
21 Err(err) => actix_web::HttpResponse::from_error(err),
22 Ok(value) => actix_web::HttpResponse::Ok().content_type("application/json").body(value)
23 }
24 }
25 }
26 }).into()
27}