A Canonical Serialized Bytes representation for data
If you have a data structure that needs a canonical byte representation use this
Always round-trip through SerializedBytes via. a single TryFrom implementation.
This ensures that the internal bytes of SerializedBytes are indeed canonical.
The corrolary is that if bytes are NOT wrapped in SerializedBytes we can assume they are NOT
canonical.
Typically we need a canonical serialization when data is to be handled at the byte level by
independently implemented and maintained systems.
UnsafeBytes the only way to implement a custom round trip through bytes for SerializedBytes
It is intended to be an internal implementation in TryFrom implementations
The assumption is that any code using UnsafeBytes is NOT valid messagepack data
This allows us to enforce that all data round-tripping through SerializedBytes is via TryFrom
and also allow for custom non-messagepack canonical representations of data types.
Wraps a WasmErrorInner with a file and line number.
The easiest way to generate this is with the wasm_error! macro that will
insert the correct file/line and can create strings by forwarding args to
the format! macro.
Receive arguments from the host.
The guest sets the type O that the host needs to match.
If deserialization fails then a GuestPtr to a WasmError::Deserialize is returned.
The guest should immediately return an Err back to the host.
The WasmError::Deserialize enum contains the bytes that failed to deserialize so the host can
unambiguously provide debug information.
Convert a WasmError to a GuestPtrLen as best we can. This is not
necessarily straightforward as the serialization process can error recursively.
In the worst case we can’t even serialize an enum variant, in which case we panic.
The casts from usize to u32 are safe as long as the guest code is compiled
for wasm32-unknown-unknown target.
Enough bits to fit a pointer and length into so we can return it. The externs
defined as “C” don’t support multiple return values (unlike wasm). The native
Rust support for wasm externs is not stable at the time of writing.