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