use super::error::Result;
use std::ops::Range;
use subsoil::wasm_interface::Pointer;
pub fn checked_range(offset: usize, len: usize, max: usize) -> Option<Range<usize>> {
let end = offset.checked_add(len)?;
(end <= max).then(|| offset..end)
}
pub trait MemoryTransfer {
fn read(&self, source_addr: Pointer<u8>, size: usize) -> Result<Vec<u8>>;
fn read_into(&self, source_addr: Pointer<u8>, destination: &mut [u8]) -> Result<()>;
fn write_from(&self, dest_addr: Pointer<u8>, source: &[u8]) -> Result<()>;
}