1#![deny(
2 warnings,
3 trivial_casts,
4 trivial_numeric_casts,
5 unused_import_braces,
6 unused_qualifications,
7 rust_2018_idioms
8)]
9#![allow(non_snake_case)]
10
11mod client_state;
12mod consensus_state;
13mod utils;
14
15use client_state::client_state_derive_impl;
16use consensus_state::consensus_state_derive_impl;
17use proc_macro::TokenStream as RawTokenStream;
18use syn::{parse_macro_input, DeriveInput};
19use utils::{Imports, SupportedCrate};
20
21#[proc_macro_derive(IbcClientState, attributes(validation, execution))]
22pub fn ibc_client_state_macro_derive(input: RawTokenStream) -> RawTokenStream {
23 generate_client_state_derive(input, SupportedCrate::Ibc)
24}
25
26#[proc_macro_derive(IbcCoreClientState, attributes(validation, execution))]
27pub fn ibc_core_client_state_macro_derive(input: RawTokenStream) -> RawTokenStream {
28 generate_client_state_derive(input, SupportedCrate::IbcCore)
29}
30
31fn generate_client_state_derive(input: RawTokenStream, source: SupportedCrate) -> RawTokenStream {
32 let ast: DeriveInput = parse_macro_input!(input);
33
34 let imports = Imports::new(source);
35
36 let output = client_state_derive_impl(ast, &imports);
37
38 RawTokenStream::from(output)
39}
40
41#[proc_macro_derive(IbcConsensusState)]
42pub fn ibc_consensus_state_macro_derive(input: RawTokenStream) -> RawTokenStream {
43 generate_consensus_state_derive(input, SupportedCrate::Ibc)
44}
45
46#[proc_macro_derive(IbcCoreConsensusState)]
47pub fn ibc_core_consensus_state_macro_derive(input: RawTokenStream) -> RawTokenStream {
48 generate_consensus_state_derive(input, SupportedCrate::IbcCore)
49}
50
51fn generate_consensus_state_derive(
52 input: RawTokenStream,
53 source: SupportedCrate,
54) -> RawTokenStream {
55 let ast: DeriveInput = parse_macro_input!(input);
56
57 let imports = Imports::new(source);
58
59 let output = consensus_state_derive_impl(ast, &imports);
60
61 RawTokenStream::from(output)
62}