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}