chaud_macros/
lib.rs

1#![doc = include_str!("../README.md")]
2#![allow(
3    clippy::missing_errors_doc,
4    clippy::missing_panics_doc,
5    clippy::wildcard_imports,
6    clippy::indexing_slicing,
7    clippy::enum_glob_use,
8    clippy::expect_used,
9    clippy::panic,
10    reason = "less restrictions on internal build-time dependencies"
11)]
12
13use self::err::Error;
14use self::input::{HotInput, PersistInput};
15use self::parse::Parser;
16use proc_macro::TokenStream;
17
18#[macro_use]
19mod factory;
20
21#[macro_use]
22mod err;
23
24mod expect;
25mod input;
26mod output;
27mod parse;
28
29#[proc_macro_attribute]
30pub fn hot(attr: TokenStream, item: TokenStream) -> TokenStream {
31    let mut attr = Parser::new(attr);
32    let mut p = Parser::new(item.clone());
33
34    Error::reporting(item.clone(), || {
35        let input = HotInput::parse(&mut attr, &mut p)?;
36
37        Ok(input.output())
38    })
39}
40
41#[proc_macro_attribute]
42pub fn persist(attr: TokenStream, item: TokenStream) -> TokenStream {
43    let mut attr = Parser::new(attr);
44    let mut p = Parser::new(item.clone());
45
46    Error::reporting(item.clone(), || {
47        let input = PersistInput::parse(&mut attr, &mut p)?;
48
49        Ok(input.output())
50    })
51}