use core::fmt::Debug;
use core::any::Any;
use gear_core::{costs::CostPerPage, memory::HostPointer, pages::GearPage};
use scale_info::scale::{self, Decode, Encode};
use crate::utils::LimitedStr;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Encode, Decode)]
#[codec(crate = scale)]
pub enum GlobalsAccessMod {
WasmRuntime,
NativeRuntime,
}
#[derive(Debug, Default, Clone, PartialEq, Eq, Encode, Decode)]
#[codec(crate = scale)]
pub struct LazyPagesWeights {
pub signal_read: CostPerPage<GearPage>,
pub signal_write: CostPerPage<GearPage>,
pub signal_write_after_read: CostPerPage<GearPage>,
pub host_func_read: CostPerPage<GearPage>,
pub host_func_write: CostPerPage<GearPage>,
pub host_func_write_after_read: CostPerPage<GearPage>,
pub load_page_storage_data: CostPerPage<GearPage>,
}
#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode)]
#[codec(crate = scale)]
pub struct GlobalsAccessConfig {
pub access_ptr: HostPointer,
pub access_mod: GlobalsAccessMod,
}
#[derive(Debug)]
pub struct GlobalsAccessError;
pub trait GlobalsAccessor {
fn get_i64(&self, name: &LimitedStr) -> Result<i64, GlobalsAccessError>;
fn set_i64(&mut self, name: &LimitedStr, value: i64) -> Result<(), GlobalsAccessError>;
fn get_i32(&self, _name: &LimitedStr) -> Result<i32, GlobalsAccessError> {
unimplemented!("Currently has no i32 system globals")
}
fn set_i32(&mut self, _name: &LimitedStr, _value: i32) -> Result<(), GlobalsAccessError> {
unimplemented!("Currently has no i32 system globals")
}
fn as_any_mut(&mut self) -> &mut dyn Any;
}
#[derive(Debug, Clone, Copy, Encode, Decode, PartialEq, Eq)]
#[codec(crate = scale)]
#[repr(i64)]
pub enum Status {
Normal = 0_i64,
GasLimitExceeded,
}
impl Status {
pub fn is_normal(&self) -> bool {
*self == Self::Normal
}
}