contract-utils 0.1.0

A package for Test env
use alloc::vec::Vec;
use core::lazy::OnceCell;

use casper_contract::contract_api::runtime;
use casper_types::system::CallStackElement;

pub trait ContractStorage {
    fn call_stack(&self) -> &[CallStackElement];
}

#[derive(Default)]
pub struct OnChainContractStorage {
    call_stack: OnceCell<Vec<CallStackElement>>,
}

impl ContractStorage for OnChainContractStorage {
    fn call_stack(&self) -> &[CallStackElement] {
        let call_stack = self.call_stack.get_or_init(runtime::get_call_stack);
        call_stack.as_slice()
    }
}