cruiser 0.2.0

Solana code generation
Documentation
use cruiser::account_list::AccountList;
use cruiser::account_types::PhantomAccount;
use cruiser::instruction::{Instruction, InstructionProcessor};
use cruiser::instruction_list::InstructionList;
use cruiser::CruiserResult;
use solana_program::pubkey::Pubkey;

#[derive(AccountList)]
pub enum TestAccountList {}

#[derive(Copy, Clone, InstructionList)]
#[instruction_list(account_list = TestAccountList, account_info = [<AI> AI])]
pub enum TestList {
    #[instruction(instruction_type = TestInstruction1)]
    TestInstruction1,
    #[instruction(instruction_type = TestInstruction1)]
    TestInstruction2,
    #[instruction(instruction_type = TestInstruction1)]
    TestInstruction3,
}

pub struct TestInstruction1;
impl<AI> Instruction<AI> for TestInstruction1 {
    type Data = ();
    type Accounts = PhantomAccount<AI, ()>;
}
impl<AI> InstructionProcessor<AI, TestInstruction1> for TestInstruction1 {
    type FromAccountsData = ();
    type ValidateData = ();
    type InstructionData = ();

    fn data_to_instruction_arg(
        _data: <Self as Instruction<AI>>::Data,
    ) -> CruiserResult<(
        Self::FromAccountsData,
        Self::ValidateData,
        Self::InstructionData,
    )> {
        Ok(Default::default())
    }

    fn process(
        _program_id: &Pubkey,
        _data: <TestInstruction1 as Instruction<AI>>::Data,
        _accounts: &mut <TestInstruction1 as Instruction<AI>>::Accounts,
    ) -> CruiserResult<()> {
        panic!("This is never called")
    }
}