Module schema

Source
Expand description

Since Borsh is not a self-descriptive format we have a way to describe types serialized with Borsh so that we can deserialize serialized blobs without having Rust types available. Additionally, this can be used to serialize content provided in a different format, e.g. JSON object {"user": "alice", "message": "Message"} can be serialized by JS code into Borsh format such that it can be deserialized into struct UserMessage {user: String, message: String} on Rust side.

The important components are: BorshSchema trait, Definition and Declaration types, and BorshSchemaContainer struct.

  • BorshSchema trait allows any type that implements it to be self-descriptive, i.e. generate it’s own schema;
  • Declaration is used to describe the type identifier, e.g. HashMap<u64, String>;
  • Definition is used to describe the structure of the type;
  • BorshSchemaContainer is used to store all declarations and defintions that are needed to work with a single type.

Structs§

BorshSchemaContainer
All schema information needed to deserialize a single type.

Enums§

Definition
The type that we use to represent the definition of the Borsh type.
Fields
The collection representing the fields of a struct.

Traits§

BorshSchema
The declaration and the definition of the type that can be used to (de)serialize Borsh without the Rust type that produced it.

Type Aliases§

Declaration
The type that we use to represent the declaration of the Borsh type.
FieldName
The name of the field in the struct (can be used to convert JSON to Borsh using the schema).
VariantName
The type that we use for the name of the variant.