#![deny(
missing_debug_implementations,
missing_copy_implementations,
unsafe_code,
unstable_features,
unused_qualifications,
missing_docs,
unused_results,
clippy::exhaustive_enums
)]
use proc_macro::TokenStream;
mod cfg;
#[cfg(all(feature = "std", feature = "evm"))]
mod evm;
mod keystore;
#[cfg(feature = "tangle")]
mod tangle;
const CONFIG_TAG_NAME: &str = "config";
const CONFIG_TAG_TYPE: &str = "blueprint_runner::config::BlueprintEnvironment";
#[proc_macro_derive(KeystoreContext, attributes(config, call_id))]
pub fn derive_keystore_context(input: TokenStream) -> TokenStream {
let input = syn::parse_macro_input!(input as syn::DeriveInput);
let result =
cfg::find_config_field(&input.ident, &input.data, CONFIG_TAG_NAME, CONFIG_TAG_TYPE)
.map(|config_field| keystore::generate_context_impl(input, config_field));
match result {
Ok(expanded) => TokenStream::from(expanded),
Err(err) => TokenStream::from(err.to_compile_error()),
}
}
#[cfg(all(feature = "std", feature = "evm"))]
#[proc_macro_derive(EVMProviderContext, attributes(config, call_id))]
pub fn derive_evm_provider_context(input: TokenStream) -> TokenStream {
let input = syn::parse_macro_input!(input as syn::DeriveInput);
let result =
cfg::find_config_field(&input.ident, &input.data, CONFIG_TAG_NAME, CONFIG_TAG_TYPE)
.map(|config_field| evm::generate_context_impl(input, config_field));
match result {
Ok(expanded) => TokenStream::from(expanded),
Err(err) => TokenStream::from(err.to_compile_error()),
}
}
#[cfg(feature = "tangle")]
#[proc_macro_derive(TangleClientContext, attributes(config, call_id))]
pub fn derive_tangle_client_context(input: TokenStream) -> TokenStream {
let input = syn::parse_macro_input!(input as syn::DeriveInput);
let result =
cfg::find_config_field(&input.ident, &input.data, CONFIG_TAG_NAME, CONFIG_TAG_TYPE)
.map(|config_field| tangle::client::generate_context_impl(input, config_field));
match result {
Ok(expanded) => TokenStream::from(expanded),
Err(err) => TokenStream::from(err.to_compile_error()),
}
}