ibc_derive/
lib.rs

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}