interfacer_http_attribute/
lib.rs1#![feature(proc_macro_diagnostic)]
2
3extern crate proc_macro;
4use proc_macro::TokenStream;
5use quote::quote;
6use syn::{parse_macro_input, DeriveInput, ItemTrait};
7
8#[proc_macro_attribute]
9pub fn http_service(_args: TokenStream, input: TokenStream) -> TokenStream {
10 service_impl::implement(parse_macro_input!(input as ItemTrait)).into()
11}
12
13#[proc_macro_derive(ToContent)]
15pub fn derive_to_content(input: TokenStream) -> TokenStream {
16 let input = parse_macro_input!(input as DeriveInput);
17 let name = input.ident.clone();
18 let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
19 quote!(
20 impl #impl_generics interfacer_http::ToContent for #name #ty_generics #where_clause {
21 #[inline]
22 fn to_content(&self, content_type: &interfacer_http::mime::Mime) -> core::result::Result<Vec<u8>, interfacer_http::ToContentError> {
23 use interfacer_http::polyfill::*;
24 self._to_content(content_type)
25 }
26 }
27 ).into()
28}
29
30#[proc_macro_derive(FromContent)]
32pub fn derive_from_content(input: TokenStream) -> TokenStream {
33 let input = parse_macro_input!(input as DeriveInput);
34 let name = input.ident.clone();
35 let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
36 quote!(
37 impl #impl_generics interfacer_http::FromContent for #name #ty_generics #where_clause {
38 #[inline]
39 fn from_content(data: Vec<u8>, content_type: &interfacer_http::mime::Mime) -> core::result::Result<Self, interfacer_http::FromContentError> {
40 use interfacer_http::polyfill::*;
41 Self::_from_content(data, content_type)
42 }
43 }
44 ).into()
45}
46
47mod attr;
48mod method;
49mod param;
50mod parse;
51mod service_impl;