Skip to main content

sov_universal_wallet_macros/
lib.rs

1use proc_macro::TokenStream;
2use syn::{parse_macro_input, DeriveInput};
3
4#[proc_macro_derive(UniversalWallet, attributes(sov_wallet))]
5pub fn derive_wallet(input: TokenStream) -> TokenStream {
6    let input = parse_macro_input!(input as DeriveInput);
7    let result = sov_universal_wallet_macro_helpers::schema::derive(
8        input,
9        None,
10        syn::parse_quote! { sov_universal_wallet::UniversalWallet },
11    );
12    handle_macro_error_and_expand(result.map(Into::into))
13}
14
15// TODO: extract the expand_macro logic from sov_module_macros into... probably somewhere
16// in crates/utils/ and allow it to be reused here
17pub(crate) fn handle_macro_error_and_expand(result: syn::Result<TokenStream>) -> TokenStream {
18    result.unwrap_or_else(|err| err.to_compile_error().into())
19}