typhoon-utility-traits 0.3.0

Trait extensions for account operations
Documentation
use {pinocchio::error::ProgramError, typhoon_accounts::WritableAccount, typhoon_errors::Error};

pub trait CloseAccount: WritableAccount {
    #[inline(always)]
    fn close(&self, destination: &impl WritableAccount) -> Result<(), Error> {
        let dest_lamports = destination.lamports();
        let source_lamports = self.lamports();

        destination.set_lamports(
            dest_lamports
                .checked_add(source_lamports)
                .ok_or(ProgramError::ArithmeticOverflow)?,
        );
        self.set_lamports(0);

        self.assign(&pinocchio_system::ID);
        self.resize(0)
    }
}

impl<T: WritableAccount> CloseAccount for T {}