pub struct ManagedBuffer<M: ManagedTypeApi> { /* private fields */ }
Expand description

A byte buffer managed by an external API.

Implementations§

source§

impl<M: ManagedTypeApi> ManagedBuffer<M>

source

pub fn new(api: M) -> Self

source

pub fn new_from_bytes(api: M, bytes: &[u8]) -> Self

source§

impl<M: ManagedTypeApi> ManagedBuffer<M>

source

pub fn len(&self) -> usize

source

pub fn is_empty(&self) -> bool

source

pub fn to_boxed_bytes(&self) -> BoxedBytes

source

pub fn load_slice( &self, starting_position: usize, dest_slice: &mut [u8] ) -> Result<(), InvalidSliceError>

TODO: investigate the impact of using Result<(), ()> on the wasm output.

source

pub fn copy_slice( &self, starting_position: usize, slice_len: usize ) -> Option<ManagedBuffer<M>>

source

pub fn overwrite(&mut self, value: &[u8])

source

pub fn append(&mut self, other: &ManagedBuffer<M>)

source

pub fn append_bytes(&mut self, slice: &[u8])

source

pub fn append_u32_be(&mut self, item: u32)

Utility function: helps serialize lengths (or any other value of type usize) easier.

Trait Implementations§

source§

impl<M: ManagedTypeApi> Clone for ManagedBuffer<M>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<M: Debug + ManagedTypeApi> Debug for ManagedBuffer<M>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<M: ManagedTypeApi> From<&ManagedBuffer<M>> for BigInt<M>

source§

fn from(item: &ManagedBuffer<M>) -> Self

Converts to this type from the input type.
source§

impl<M: ManagedTypeApi> From<&ManagedBuffer<M>> for BigUint<M>

source§

fn from(item: &ManagedBuffer<M>) -> Self

Converts to this type from the input type.
source§

impl<M: ManagedTypeApi> From<ManagedBuffer<M>> for BigInt<M>

source§

fn from(item: ManagedBuffer<M>) -> Self

Converts to this type from the input type.
source§

impl<M: ManagedTypeApi> From<ManagedBuffer<M>> for BigUint<M>

source§

fn from(item: ManagedBuffer<M>) -> Self

Converts to this type from the input type.
source§

impl<M> From<ManagedBuffer<M>> for ManagedSCError<M>
where M: ManagedTypeApi,

source§

fn from(message: ManagedBuffer<M>) -> Self

Converts to this type from the input type.
source§

impl<M: ManagedTypeApi> From<ManagedBuffer<M>> for StorageKey<M>

source§

fn from(buffer: ManagedBuffer<M>) -> Self

Converts to this type from the input type.
source§

impl<M: ManagedTypeApi> From<ManagedBuffer<M>> for TokenIdentifier<M>

source§

fn from(buffer: ManagedBuffer<M>) -> Self

Converts to this type from the input type.
source§

impl<M: ManagedTypeApi> ManagedDefault<M> for ManagedBuffer<M>

source§

fn managed_default(api: M) -> Self

source§

impl<M> ManagedFrom<M, &[u8]> for ManagedBuffer<M>
where M: ManagedTypeApi,

source§

fn managed_from(api: M, bytes: &[u8]) -> Self

source§

impl<M, const N: usize> ManagedFrom<M, &[u8; N]> for ManagedBuffer<M>
where M: ManagedTypeApi,

Syntactic sugar only.

source§

fn managed_from(api: M, bytes: &[u8; N]) -> Self

source§

impl<M> ManagedFrom<M, BoxedBytes> for ManagedBuffer<M>
where M: ManagedTypeApi,

source§

fn managed_from(api: M, bytes: BoxedBytes) -> Self

source§

impl<M: ManagedTypeApi> ManagedType<M> for ManagedBuffer<M>

source§

fn type_manager(&self) -> M

source§

impl<M: ManagedTypeApi> ManagedVecItem<M> for ManagedBuffer<M>

source§

const PAYLOAD_SIZE: usize = 4usize

Size of the data stored in the underlying ManagedBuffer.
source§

const NEEDS_RESERIALIZATION: bool = true

If false, then the encoding of the item is identical to the payload, and no further conversion is necessary (the underlying buffer can be used as-is during serialization). True for all managed types, but false for basic types (like u32).
source§

fn from_byte_reader<Reader: FnMut(&mut [u8])>(api: M, reader: Reader) -> Self

source§

fn to_byte_writer<R, Writer: FnMut(&[u8]) -> R>(&self, writer: Writer) -> R

source§

impl<M: ManagedTypeApi> NestedDecode for ManagedBuffer<M>

source§

fn dep_decode<I: NestedDecodeInput>(input: &mut I) -> Result<Self, DecodeError>

Attempt to deserialise the value from input, using the format of an object nested inside another structure. In case of success returns the deserialized value and the number of bytes consumed during the operation.
source§

fn dep_decode_or_exit<I: NestedDecodeInput, ExitCtx: Clone>( input: &mut I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self

Version of top_decode that exits quickly in case of error. Its purpose is to create smaller implementations in cases where the application is supposed to exit directly on decode error.
source§

impl<M: ManagedTypeApi> NestedEncode for ManagedBuffer<M>

source§

fn dep_encode<O: NestedEncodeOutput>( &self, dest: &mut O ) -> Result<(), EncodeError>

NestedEncode to output, using the format of an object nested inside another structure. Does not provide compact version.
source§

fn dep_encode_or_exit<O, ExitCtx>( &self, dest: &mut O, c: ExitCtx, exit: fn(_: ExitCtx, _: EncodeError) -> ! )
where O: NestedEncodeOutput, ExitCtx: Clone,

Version of top_decode that exits quickly in case of error. Its purpose is to create smaller implementations in cases where the application is supposed to exit directly on decode error.
source§

impl<M: ManagedTypeApi> NestedEncodeOutput for ManagedBuffer<M>

source§

fn write(&mut self, bytes: &[u8])

Write to the output.
source§

fn push_specialized<T, C, F>( &mut self, context: C, value: &T, else_serialization: F ) -> Result<(), EncodeError>

source§

fn push_byte(&mut self, byte: u8)

Write a single byte to the output.
source§

impl<M: ManagedTypeApi, const N: usize> PartialEq<&[u8; N]> for ManagedBuffer<M>

source§

fn eq(&self, other: &&[u8; N]) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<M: ManagedTypeApi> PartialEq<[u8]> for ManagedBuffer<M>

source§

fn eq(&self, other: &[u8]) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<M: ManagedTypeApi> PartialEq for ManagedBuffer<M>

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<M: ManagedTypeApi> TopDecode for ManagedBuffer<M>

source§

fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>

Attempt to deserialize the value from input.
source§

fn top_decode_or_exit<I, ExitCtx>( input: I, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> ! ) -> Self
where I: TopDecodeInput, ExitCtx: Clone,

Version of top_decode that exits quickly in case of error. Its purpose is to create smaller implementations in cases where the application is supposed to exit directly on decode error.
source§

impl<'a, M> TopDecodeInput for &'a ManagedBuffer<M>
where M: ManagedTypeApi + 'static,

§

type NestedBuffer = ManagedBufferNestedDecodeInput<M, &'a ManagedBuffer<M>>

source§

fn byte_len(&self) -> usize

Length of the underlying data, in bytes.
source§

fn into_boxed_slice_u8(self) -> Box<[u8]>

Provides the underlying data as an owned byte slice box. Consumes the input object in the process.
source§

fn into_specialized<T, F>(self, else_deser: F) -> Result<T, DecodeError>
where T: TryStaticCast, F: FnOnce(Self) -> Result<T, DecodeError>,

source§

fn into_nested_buffer(self) -> Self::NestedBuffer

source§

fn into_u64(self) -> u64

Retrieves the underlying data as a pre-parsed u64. Expected to panic if the conversion is not possible. Read more
source§

fn into_i64(self) -> i64

Retrieves the underlying data as a pre-parsed i64. Expected to panic if the conversion is not possible. Read more
source§

fn into_specialized_or_exit<T, F, ExitCtx>( self, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> !, else_deser: F ) -> T
where T: TryStaticCast, ExitCtx: Clone, F: FnOnce(Self, ExitCtx, fn(_: ExitCtx, _: DecodeError) -> !) -> T,

Note: currently not in use.
source§

impl<M> TopDecodeInput for ManagedBuffer<M>
where M: ManagedTypeApi,

§

type NestedBuffer = ManagedBufferNestedDecodeInput<M, ManagedBuffer<M>>

source§

fn byte_len(&self) -> usize

Length of the underlying data, in bytes.
source§

fn into_boxed_slice_u8(self) -> Box<[u8]>

Provides the underlying data as an owned byte slice box. Consumes the input object in the process.
source§

fn into_specialized<T, F>(self, else_deser: F) -> Result<T, DecodeError>
where T: TryStaticCast, F: FnOnce(Self) -> Result<T, DecodeError>,

source§

fn into_nested_buffer(self) -> Self::NestedBuffer

source§

fn into_u64(self) -> u64

Retrieves the underlying data as a pre-parsed u64. Expected to panic if the conversion is not possible. Read more
source§

fn into_i64(self) -> i64

Retrieves the underlying data as a pre-parsed i64. Expected to panic if the conversion is not possible. Read more
source§

fn into_specialized_or_exit<T, F, ExitCtx>( self, c: ExitCtx, exit: fn(_: ExitCtx, _: DecodeError) -> !, else_deser: F ) -> T
where T: TryStaticCast, ExitCtx: Clone, F: FnOnce(Self, ExitCtx, fn(_: ExitCtx, _: DecodeError) -> !) -> T,

Note: currently not in use.
source§

impl<M: ManagedTypeApi> TopEncode for ManagedBuffer<M>

source§

fn top_encode<O: TopEncodeOutput>(&self, output: O) -> Result<(), EncodeError>

Attempt to serialize the value to ouput.
source§

fn top_encode_or_exit<O, ExitCtx>( &self, output: O, c: ExitCtx, exit: fn(_: ExitCtx, _: EncodeError) -> ! )
where O: TopEncodeOutput, ExitCtx: Clone,

Version of top_decode that exits quickly in case of error. Its purpose is to create smaller bytecode implementations in cases where the application is supposed to exit directly on decode error.
source§

impl<M: ManagedTypeApi> TopEncodeOutput for &mut ManagedBuffer<M>

§

type NestedBuffer = ManagedBuffer<M>

Type of NestedEncodeOutput that can be spawned to gather serializations of children.
source§

fn set_slice_u8(self, bytes: &[u8])

source§

fn set_u64(self, value: u64)

source§

fn set_i64(self, value: i64)

source§

fn set_specialized<T, F>( self, value: &T, else_serialization: F ) -> Result<(), EncodeError>
where T: TryStaticCast, F: FnOnce(Self) -> Result<(), EncodeError>,

Allows special handling of special types. Also requires an alternative serialization, in case the special handling is not covered. The alternative serialization, else_serialization is only called when necessary and is normally compiled out via monomorphization.
source§

fn start_nested_encode(&self) -> Self::NestedBuffer

source§

fn finalize_nested_encode(self, nb: Self::NestedBuffer)

source§

fn set_boxed_bytes(self, bytes: Box<[u8]>)

source§

impl<M: ManagedTypeApi> TryStaticCast for ManagedBuffer<M>

source§

fn type_eq<U>() -> bool
where U: TryStaticCast,

source§

fn try_cast<U>(self) -> Option<U>
where U: TryStaticCast,

source§

fn try_cast_ref<U>(&self) -> Option<&U>
where U: TryStaticCast,

source§

impl<M: ManagedTypeApi> TypeAbi for ManagedBuffer<M>

source§

fn type_name() -> String

source§

fn provide_type_descriptions<TDC: TypeDescriptionContainer>( accumulator: &mut TDC )

A type can provide more than its own description. For instance, a struct can also provide the descriptions of the type of its fields. TypeAbi doesn’t care for the exact accumulator type, which is abstracted by the TypeDescriptionContainer trait.
source§

impl<M: ManagedTypeApi> Eq for ManagedBuffer<M>

Auto Trait Implementations§

§

impl<M> RefUnwindSafe for ManagedBuffer<M>
where M: RefUnwindSafe,

§

impl<M> Send for ManagedBuffer<M>
where M: Send,

§

impl<M> Sync for ManagedBuffer<M>
where M: Sync,

§

impl<M> Unpin for ManagedBuffer<M>
where M: Unpin,

§

impl<M> UnwindSafe for ManagedBuffer<M>
where M: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> ContractCallArg for T
where T: TopEncode,

source§

fn push_dyn_arg<O>(&self, output: &mut O)
where O: DynArgOutput,

source§

impl<T> DynArg for T
where T: TopEncode + TopDecode,

source§

fn dyn_load<I>(loader: &mut I, arg_id: ArgId) -> T
where I: DynArgInput,

source§

impl<T> EndpointResult for T
where T: TopEncode,

§

type DecodeAs = T

Indicates how the result of the endpoint can be interpreted when called via proxy. Self for most types.
source§

fn finish<FA>(&self, api: FA)
where FA: ManagedTypeApi + EndpointFinishApi + Clone + 'static,

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<M, F> ManagedFrom<M, F> for F
where M: ManagedTypeApi,

source§

fn managed_from(_: M, t: F) -> F

source§

impl<M, F, T> ManagedInto<M, T> for F
where T: ManagedFrom<M, F>, M: ManagedTypeApi,

source§

fn managed_into(self, api: M) -> T

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.