use crate::{CompilationError, TrapCode};
use alloc::vec::Vec;
pub trait StoreTr<T> {
fn memory_read(&mut self, offset: usize, buffer: &mut [u8]) -> Result<(), TrapCode>;
fn memory_read_into_vec(&mut self, offset: usize, length: usize) -> Result<Vec<u8>, TrapCode>;
fn memory_write(&mut self, offset: usize, buffer: &[u8]) -> Result<(), TrapCode>;
fn data_mut(&mut self) -> &mut T;
fn data(&self) -> &T;
fn try_consume_fuel(&mut self, delta: u64) -> Result<(), TrapCode>;
fn remaining_fuel(&self) -> Option<u64>;
fn reset_fuel(&mut self, new_fuel_limit: u64);
}
pub trait CallerTr<T>: StoreTr<T> {}
#[derive(Debug)]
pub enum StrategyError {
CompilationError(CompilationError),
TrapCode(TrapCode),
}
impl From<CompilationError> for StrategyError {
fn from(err: CompilationError) -> Self {
StrategyError::CompilationError(err)
}
}
impl From<TrapCode> for StrategyError {
fn from(err: TrapCode) -> Self {
StrategyError::TrapCode(err)
}
}