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 contract;
12mod event;
13mod revert;
14mod selector;
15mod storage;
16mod utils;
17
18#[proc_macro]
22pub fn revert(input: TokenStream) -> TokenStream {
23 let input = parse_macro_input!(input as LitStr);
24 revert::parse(input)
25}
26
27#[proc_macro]
32pub fn assert(input: TokenStream) -> TokenStream {
33 let input = parse_macro_input!(input as revert::AssertInput);
34 revert::parse_assert(input)
35}
36
37#[proc_macro_derive(Storage)]
39pub fn storage_derive(input: TokenStream) -> TokenStream {
40 contract::ContractStorage::parse(input)
41}
42
43#[proc_macro_derive(Event, attributes(indexed, anonymous))]
68pub fn event(input: TokenStream) -> TokenStream {
69 let input = parse_macro_input!(input as DeriveInput);
70 event::parse(input)
71}
72
73#[proc_macro_attribute]
85pub fn storage(attr: TokenStream, input: TokenStream) -> TokenStream {
86 let ty = storage::StorageType::from(attr);
87 let input = parse_macro_input!(input as ItemStruct);
88 storage::Storage::parse(ty, input)
89}
90
91#[proc_macro_attribute]
103pub fn transient_storage(attr: TokenStream, input: TokenStream) -> TokenStream {
104 let ty = storage::StorageType::from(attr);
105 let input = parse_macro_input!(input as ItemStruct);
106 storage::Storage::parse_transient(ty, input)
107}
108
109#[proc_macro_attribute]
111pub fn external(_args: TokenStream, input: TokenStream) -> TokenStream {
112 let input = parse_macro_input!(input as ItemFn);
113 selector::external(input)
114}