1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
#![recursion_limit = "128"] #![crate_type = "proc-macro"] use proc_macro::{TokenStream}; use syn::{parse_macro_input}; use quote::{quote}; mod dot; mod dot_template; use dot_template::DotTemplate; mod dot_html; use dot_html::DotHtmlInvocation; mod dot_include; use dot_include::DotInclude; #[proc_macro_attribute] pub fn dot(attr: TokenStream, item: TokenStream) -> TokenStream { let cfg = parse_macro_input!(attr as dot::Cfg); let f = parse_macro_input!(item as syn::ItemFn); let expanded = dot::quote_itemfn(cfg, f); TokenStream::from(expanded) } #[proc_macro_attribute] pub fn dot_template(_attr: TokenStream, item: TokenStream) -> TokenStream { let f = parse_macro_input!(item as DotTemplate); let expanded = quote! { #f }; TokenStream::from(expanded) } #[proc_macro] pub fn dot_html(input: TokenStream) -> TokenStream { let c = parse_macro_input!(input as DotHtmlInvocation); let expanded = quote! { #c }; TokenStream::from(expanded) } #[proc_macro] pub fn dot_include(input: TokenStream) -> TokenStream { let c = parse_macro_input!(input as DotInclude); let expanded = quote! { #c }; TokenStream::from(expanded) }