rialo-sol-lang 0.4.2

Solana Sealevel eDSL
// Copyright (c) Subzero Labs, Inc.
// SPDX-License-Identifier: Apache-2.0

use crate::{
    prelude::{Id, System},
    rialo_s_program::{account_info::AccountInfo, system_program},
    Result,
};

pub fn close<'info>(info: AccountInfo<'info>, sol_destination: AccountInfo<'info>) -> Result<()> {
    // Transfer tokens from the account to the sol_destination.
    let dest_starting_kelvins = sol_destination.kelvins();
    **sol_destination.kelvins.borrow_mut() =
        dest_starting_kelvins.checked_add(info.kelvins()).unwrap();
    **info.kelvins.borrow_mut() = 0;

    info.assign(&system_program::ID);
    info.resize(0).map_err(Into::into)
}

pub fn is_closed(info: &AccountInfo<'_>) -> bool {
    info.owner == &System::id() && info.data_is_empty()
}