Как минимум так более читабельно:
pub fn get_utf8_string(self, memory: &Memory, str_len: u32) -> Option<&str> {
let size = memory.size().bytes().0;
let offset = self.offset as usize;
let len = str_len as usize;
if offset + len > size || offset >= size {
return None;
}
let ptr = unsafe {
memory.view::<u8>().as_ptr().add(offset) as *const u8
};
let slice: &[u8] = unsafe { std::slice::from_raw_parts(ptr, len) };
std::str::from_utf8(slice).ok()
}