use std::collections::HashMap;
use litesvm::LiteSVM;
use solana_instruction::Instruction;
use solana_pubkey::Pubkey;
use solana_transaction::Transaction;
pub mod context;
pub mod estimate;
pub mod runner;
pub use context::{
ExecutionStats, InstructionExecutionContext, ProgramContext, ProgramInfo, SVMContext,
TransactionExecutionContext, WorkflowContext,
};
pub use estimate::{
ComputeUnitDatabase, ComputeUnitLevel, ComputeUnitStats, InstructionBenchmarkResult, StatType,
};
pub use runner::{benchmark_instruction, benchmark_transaction, TransactionBenchmarkResult};
pub trait InstructionBenchmark {
fn instruction_name(&self) -> &'static str;
fn setup_svm(&self) -> LiteSVM;
fn build_instruction(&self, svm: &mut LiteSVM) -> (Instruction, Vec<Pubkey>);
fn sign_transaction(&self, unsigned_tx: Transaction) -> Transaction;
fn address_book(&self) -> HashMap<Pubkey, String> {
HashMap::new()
}
}
pub trait TransactionBenchmark {
fn transaction_name(&self) -> &'static str;
fn setup_svm(&self) -> LiteSVM;
fn build_transaction(&mut self, svm: &mut LiteSVM) -> Transaction;
fn address_book(&self) -> HashMap<Pubkey, String> {
HashMap::new()
}
}