cosmwasm_schema_derive/
lib.rs

1mod cw_serde;
2mod error;
3mod generate_api;
4mod query_responses;
5
6use self::error::fallible_macro;
7use quote::ToTokens;
8use syn::parse_macro_input;
9
10fallible_macro! {
11    #[proc_macro_derive(QueryResponses, attributes(returns, query_responses))]
12    pub fn query_responses_derive(
13        input: proc_macro::TokenStream,
14    ) -> syn::Result<proc_macro::TokenStream> {
15        let input = syn::parse(input)?;
16        let expanded = query_responses::query_responses_derive_impl(input)?;
17
18        Ok(expanded.into_token_stream().into())
19    }
20}
21
22#[proc_macro]
23pub fn write_api(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
24    let input = parse_macro_input!(input as generate_api::Options);
25    let expanded = generate_api::write_api_impl(input).into_token_stream();
26
27    proc_macro::TokenStream::from(expanded)
28}
29
30#[proc_macro]
31pub fn generate_api(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
32    let input = parse_macro_input!(input as generate_api::Options);
33    let expanded = generate_api::generate_api_impl(&input).into_token_stream();
34
35    proc_macro::TokenStream::from(expanded)
36}
37
38fallible_macro! {
39    #[proc_macro_attribute]
40    pub fn cw_serde(
41        attr: proc_macro::TokenStream,
42        input: proc_macro::TokenStream,
43    ) -> syn::Result<proc_macro::TokenStream> {
44        let options = syn::parse(attr)?;
45        let input = syn::parse(input)?;
46
47        let expanded = cw_serde::cw_serde_impl(options, input)?;
48
49        Ok(expanded.into_token_stream().into())
50    }
51}