Skip to main content

drv_macros/
lib.rs

1#![forbid(unsafe_code)]
2//! Internal proc-macro implementations for the `drv` crate. Use via `drv`'s
3//! re-exports — see <https://docs.rs/drv> for user-facing documentation.
4
5mod input;
6mod memo;
7
8use proc_macro::TokenStream;
9
10#[proc_macro_attribute]
11pub fn input(attr: TokenStream, item: TokenStream) -> TokenStream {
12    let attr = proc_macro2::TokenStream::from(attr);
13    let item = syn::parse_macro_input!(item as syn::ItemStruct);
14    match input::expand(attr, item) {
15        Ok(tokens) => tokens.into(),
16        Err(err) => err.to_compile_error().into(),
17    }
18}
19
20#[proc_macro_attribute]
21pub fn memo(attr: TokenStream, item: TokenStream) -> TokenStream {
22    let item = syn::parse_macro_input!(item as syn::ItemFn);
23    let attr = proc_macro2::TokenStream::from(attr);
24    match memo::expand(attr, item) {
25        Ok(tokens) => tokens.into(),
26        Err(err) => err.to_compile_error().into(),
27    }
28}