typhoon-utility-traits 0.1.0

TODO
Documentation
use {
    pinocchio::program_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.mut_lamports()? = dest_lamports
            .checked_add(source_lamports)
            .ok_or(ProgramError::ArithmeticOverflow)?;
        *self.mut_lamports()? = 0;

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

impl<T: WritableAccount> CloseAccount for T {}