multiversx_sc/api/managed_types/
managed_buffer_api.rs

1use crate::types::heap::BoxedBytes;
2
3use super::HandleTypeInfo;
4
5/// Returned if load/copy slice could not be performed.
6/// No further data needed.
7#[derive(Debug)]
8pub struct InvalidSliceError;
9
10/// A raw bytes buffer managed by Arwen.
11pub trait ManagedBufferApiImpl: HandleTypeInfo {
12    /// Requests a new handle from the VM. No longer used extensively.
13    fn mb_new_empty(&self) -> Self::ManagedBufferHandle;
14
15    /// Requests a new handle from the VM, initialized with some data. No longer used extensively.
16    fn mb_new_from_bytes(&self, bytes: &[u8]) -> Self::ManagedBufferHandle;
17
18    fn mb_len(&self, handle: Self::ManagedBufferHandle) -> usize;
19
20    fn mb_to_boxed_bytes(&self, handle: Self::ManagedBufferHandle) -> BoxedBytes;
21
22    /// TODO: investigate the impact of using `Result<(), ()>` on the wasm output.
23    fn mb_load_slice(
24        &self,
25        source_handle: Self::ManagedBufferHandle,
26        starting_position: usize,
27        dest_slice: &mut [u8],
28    ) -> Result<(), InvalidSliceError>;
29
30    /// TODO: investigate the impact of using `Result<(), ()>` on the wasm output.
31    fn mb_copy_slice(
32        &self,
33        source_handle: Self::ManagedBufferHandle,
34        starting_position: usize,
35        slice_len: usize,
36        dest_handle: Self::ManagedBufferHandle,
37    ) -> Result<(), InvalidSliceError>;
38
39    fn mb_overwrite(&self, handle: Self::ManagedBufferHandle, value: &[u8]);
40
41    fn mb_set_slice(
42        &self,
43        dest_handle: Self::ManagedBufferHandle,
44        starting_position: usize,
45        source_slice: &[u8],
46    ) -> Result<(), InvalidSliceError>;
47
48    fn mb_set_random(&self, dest_handle: Self::ManagedBufferHandle, length: usize);
49
50    fn mb_append(
51        &self,
52        accumulator_handle: Self::ManagedBufferHandle,
53        data_handle: Self::ManagedBufferHandle,
54    );
55
56    fn mb_append_bytes(&self, accumulator_handle: Self::ManagedBufferHandle, bytes: &[u8]);
57
58    fn mb_eq(&self, handle1: Self::ManagedBufferHandle, handle2: Self::ManagedBufferHandle)
59        -> bool;
60
61    fn mb_to_hex(
62        &self,
63        source_handle: Self::ManagedBufferHandle,
64        dest_handle: Self::ManagedBufferHandle,
65    );
66}