1#![allow(unused)]
4extern crate proc_macro;
5
6use proc_macro::TokenStream;
7use proc_macro2::Span;
8use quote::ToTokens;
9use syn::{parse_macro_input, Attribute, DeriveInput, Expr, ItemFn, ItemStruct, LitStr};
10
11mod event;
12mod revert;
13mod selector;
14mod storage;
15mod utils;
16
17#[proc_macro]
21pub fn revert(input: TokenStream) -> TokenStream {
22 let input = parse_macro_input!(input as LitStr);
23 revert::parse(input)
24}
25
26#[proc_macro]
31pub fn assert(input: TokenStream) -> TokenStream {
32 let input = parse_macro_input!(input as revert::AssertInput);
33 revert::parse_assert(input)
34}
35
36#[proc_macro_derive(Event)]
61pub fn event(input: TokenStream) -> TokenStream {
62 let input = parse_macro_input!(input as DeriveInput);
63 event::parse(input)
64}
65
66#[proc_macro_attribute]
78pub fn storage(attr: TokenStream, input: TokenStream) -> TokenStream {
79 let ty = storage::StorageType::from(attr);
80 let input = parse_macro_input!(input as ItemStruct);
81 storage::Storage::parse(ty, input)
82}
83
84#[proc_macro_attribute]
96pub fn transient_storage(attr: TokenStream, input: TokenStream) -> TokenStream {
97 let ty = storage::StorageType::from(attr);
98 let input = parse_macro_input!(input as ItemStruct);
99 storage::Storage::parse_transient(ty, input)
100}
101
102#[proc_macro_attribute]
104pub fn external(_args: TokenStream, input: TokenStream) -> TokenStream {
105 let input = parse_macro_input!(input as ItemFn);
106 selector::external(input)
107}