1pub mod ast;
5pub mod case;
7pub mod debug;
9pub mod diagnostic;
11pub mod extract;
13pub mod ident;
15pub mod meta;
17pub mod pipes;
19pub mod template;
21pub mod types;
23
24#[cfg(feature = "ext")]
26pub mod ext;
27
28pub use diagnostic::*;
29pub use extract::*;
30pub use meta::*;
31pub use template::Template;
32pub use types::Input;
33
34pub type Result<T> = diagnostic::Result<T>;
36
37#[macro_export]
39macro_rules! parse {
40 ($s:literal => $ty:ty) => {
41 $crate::syn::parse_str::<$ty>($s)
42 };
43 ($s:literal) => {
44 $crate::syn::parse_str($s)
45 };
46 ($ts:expr => $ty:ty) => {
47 $crate::syn::parse2::<$ty>($ts)
48 };
49 ($ts:expr) => {
50 $crate::syn::parse2($ts)
51 };
52}
53
54#[macro_export]
56macro_rules! parse_input {
57 ($($tt:tt)*) => { $crate::syn::parse_macro_input!($($tt)*) }
58}
59
60pub use proc_macro2::{Span, TokenStream};
61pub use quote::{ToTokens, format_ident};
62
63pub use proc_macro2;
64pub use quote;
65pub use syn;
66
67pub trait Expand {
69 fn expand(
70 &self,
71 output: &proc_macro2::Ident,
72 idents: &mut ident::Iter,
73 ) -> proc_macro2::TokenStream;
74}
75
76pub trait Render {
78 fn render(&self, input: &types::Input) -> proc_macro2::TokenStream;
79}
80
81pub trait Pipe {
83 type Input;
84 type Output: quote::ToTokens;
85
86 fn pipe(&self, input: Self::Input) -> Self::Output;
87}