Module borsh::schema[][src]

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 Definitions

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.