shank_render 0.4.8

Renders implementaions derived from shank macros
Documentation
use proc_macro2::TokenStream;
use quote::quote;
use shank_macro_impl::instruction::Instruction;
use shank_macro_impl::syn::Result as ParseResult;

mod render_context;
use self::render_context::generate_context;

pub fn render_contexts_impl(
    instruction: &Instruction,
) -> ParseResult<TokenStream> {
    let contexts = instruction
        .variants
        .iter()
        .map(generate_context)
        .collect::<Vec<TokenStream>>();

    Ok(quote! {
        pub mod accounts {
            use super::*;

            pub struct Context<'a, T> {
                pub accounts: T,
                pub remaining_accounts: &'a [solana_program::account_info::AccountInfo<'a>],
            }

            #(#contexts)*
        }
    })
}