pub use anchor_lang::prelude::AccountMeta;
use solana_sdk::instruction::CompiledInstruction;
pub use solana_sdk::{message::v0::MessageAddressTableLookup, signature::Signature};
pub use solana_transaction_status_client_types::UiTransactionStatusMeta;
use crate::DecodeError;
pub trait TransactionAccess {
fn slot(&self) -> Result<u64, DecodeError>;
fn index(&self) -> Result<Option<usize>, DecodeError>;
fn signature(&self) -> Result<&Signature, DecodeError>;
fn num_signers(&self, is_writable: bool) -> Result<usize, DecodeError>;
fn num_accounts(&self) -> usize;
fn message_signature(&self, idx: usize) -> Option<&Signature>;
fn account_meta(&self, idx: usize) -> Result<Option<AccountMeta>, DecodeError>;
fn num_address_table_lookups(&self) -> usize;
fn address_table_lookup(&self, idx: usize) -> Option<&MessageAddressTableLookup>;
fn num_instructions(&self) -> usize;
fn instruction(&self, idx: usize) -> Option<&CompiledInstruction>;
fn transaction_status_meta(&self) -> Option<&UiTransactionStatusMeta>;
}