Module scale_value::scale
source · Expand description
Encoding and decoding SCALE bytes into a crate::Value
.
Exmaple
Given some known metadata type ID, encode and desome some crate::Value
to SCALE bytes.
use scale_value::Value;
// Imagine we have a `registry` (of type [`scale_info::PortableRegistry`]) containing this type,
// and a `type_id` (a `u32`) pointing to it in the registry.
#[derive(scale_info::TypeInfo)]
enum Foo {
A { is_valid: bool, name: String }
}
// Given that, we can encode/decode something with that shape to/from SCALE bytes:
let value = Value::named_variant("A", [
("is_valid", Value::bool(true)),
("name", Value::string("James")),
]);
// Encode the Value to bytes:
let mut bytes = Vec::new();
scale_value::scale::encode_as_type(&value, type_id, ®istry, &mut bytes).unwrap();
// Decode the bytes back into a matching Value.
// This value contains contextual information about which type was used
// to decode each part of it, which we can throw away with `.remove_context()`.
let new_value = scale_value::scale::decode_as_type(&mut &*bytes, type_id, ®istry).unwrap();
assert_eq!(value, new_value.remove_context());
Structs
A read-only registry containing types in their portable form for serialization.
This represents the ID of a type found in the metadata. A scale info type representation can
be converted into this, and we get this back directly when decoding types into Values.
Enums
An error decoding SCALE bytes.
An error encoding a
Value
into SCALE bytes.Functions
Attempt to decode some SCALE encoded bytes into a value, by providing a pointer
to the bytes (which will be moved forwards as bytes are used in the decoding),
a type ID, and a type registry from which we’ll look up the relevant type information.
Attempt to encode some
crate::Value<T>
into SCALE bytes, by providing a pointer to the
type ID that we’d like to encode it as, a type registry from which we’ll look
up the relevant type information, and a buffer to encode the bytes to.