retroshade_sdk_macros/
lib.rs1use convert_case::Casing;
2use proc_macro::TokenStream;
3use quote::quote;
4use syn::{
5 self, ext, parse_macro_input, DeriveInput, Expr, ExprLit, FieldsNamed, Ident, Lit, LitStr, Type,
6};
7
8#[proc_macro_derive(Retroshade)]
9pub fn database_interact_derive(input: TokenStream) -> TokenStream {
10 let input = parse_macro_input!(input as DeriveInput);
11 let struct_name = &input.ident;
12 let target = struct_name.to_string().to_case(convert_case::Case::Snake);
13
14 let expanded = quote! {
16 impl #struct_name {
17 pub fn emit(&self, env: &soroban_sdk::Env) {
18 let target = soroban_sdk::Symbol::new(env, #target).as_val().get_payload() as i64;
19 let event: soroban_sdk::Val = soroban_sdk::IntoVal::into_val(self, env);
20 let event = event.get_payload() as i64;
21
22 unsafe { retroshade_sdk::zephyr_emit(target, event) };
23 }
24 }
25 };
26
27 TokenStream::from(expanded)
28}
29
30#[test]
31fn test() {}