use crate::account_argument::AccountArgument;
use crate::CruiserResult;
use solana_program::pubkey::Pubkey;
use std::iter::FusedIterator;
pub trait FromAccounts<Arg>: Sized + AccountArgument {
fn from_accounts(
program_id: &Pubkey,
infos: &mut impl AccountInfoIterator<Item = Self::AccountInfo>,
arg: Arg,
) -> CruiserResult<Self>;
#[must_use]
fn accounts_usage_hint(arg: &Arg) -> (usize, Option<usize>);
}
pub trait AccountInfoIterator: Iterator + DoubleEndedIterator + FusedIterator {}
impl<T> AccountInfoIterator for T where T: Iterator + DoubleEndedIterator + FusedIterator {}