trident-derive-flow-executor 0.13.0-rc.3

Trident is Rust based fuzzing framework for Solana programs written in Anchor.
Documentation
use proc_macro::TokenStream;
use quote::ToTokens;
use syn::parse_macro_input;
use syn::ItemFn;
use syn::ItemImpl;
use trident_syn::parser::trident_flow_executor::parse_trident_flow_executor;

/// Marks a method to be executed as part of the fuzzing flow
#[proc_macro_attribute]
pub fn flow(_attr: TokenStream, item: TokenStream) -> TokenStream {
    let input_fn = parse_macro_input!(item as ItemFn);
    quote::quote!(#input_fn).into()
}

/// Marks a method to run once before any flow methods
#[proc_macro_attribute]
pub fn init(_attr: TokenStream, item: TokenStream) -> TokenStream {
    let input_fn = parse_macro_input!(item as ItemFn);
    quote::quote!(#input_fn).into()
}

/// Marks a method to run once after all flow methods
#[proc_macro_attribute]
pub fn end(_attr: TokenStream, item: TokenStream) -> TokenStream {
    let input_fn = parse_macro_input!(item as ItemFn);
    quote::quote!(#input_fn).into()
}

/// Implements the flow executor for a struct
#[proc_macro_attribute]
pub fn flow_executor(_attr: TokenStream, item: TokenStream) -> TokenStream {
    let input = parse_macro_input!(item as ItemImpl);

    match parse_trident_flow_executor(&input) {
        Ok(executor) => executor.to_token_stream().into(),
        Err(err) => err.to_compile_error().into(),
    }
}