Description

A parsing library that generates TypeScript classes and serialization schemas from Rust data structures.

Usage

Prepend a Rust struct with the BorshSchema derivable trait like this ```rust

[derive(BorshSchema)]

struct SomeStruct { foo: u32, bar: Option, baz: Vec, quux: BTreeMap<[u8; 32], Pubkey>, } ``` and the parser will generate the following TypeScript output:

```ts export class SomeStruct extends Struct { foo: number, bar: BN | null, baz: string[], quux: Map<[32], PublicKey>, }

export const SCHEMA = new Map([ [ SomeStruct, { kind: 'struct', fields [ ['foo', 'u32'], ['bar', { kind: 'option', type: 'u64' }], ['baz', ['string']], ['quux', { kind: 'map', key: [32], value: 'publicKey' }], ], }, ], ]) `` The library also supportsenumtypes, just add theBorshSchema` derive attribute.

For example ```rust

[derive(BorshSchema)]

struct FooStruct { foo: Option, }

[derive(BorshSchema)]

enum SomeEnum { UnitVariant, UnnamedFields(u64, [String; 2]), NamedFields { foo_struct: FooStruct, bar: Vec, }, } will result in ts export class FooStruct extends Struct { foo: string | null, }

export class SomeEnum extends Enum { someEnumUnitVariant: someEnumUnitVariant, someEnumUnnamedFields: someEnumUnnamedFields, someEnumNamedFields: someEnumNamedFields, }

export class SomeEnumUnitVariant extends Struct {} export class SomeEnumUnnamedFields extends Struct { unnamed1: BN, unnamed2: string[], }

export class SomeEnumNamedFields extends Struct { fooStruct: FooStruct, bar: number[], }

export const SCHEMA = new Map([ [ FooStruct, { kind: 'struct', fields [ [foo: { kind: 'option', type: 'u64' }], ], }, ], [ SomeEnum, { kind: 'enum', field: 'enum', values: [ ['someEnumUnitVariant', SomeEnumUnitVariant], ['someEnumUnnamedFields', SomeEnumUnnamedFields], ['someEnumNamedFields', SomeEnumNnamedFields], ], }, ], [ SomeEnumUnitVariant, { kind: struct, fields [], }, ], [ SomeEnumUnnamedFields, { kind: struct, fields [ ['unnamed1', u64], ['unnamed2', ['string', 2]], ], }, ], [ SomeEnumNamedFields, { kind: struct, fields [ ['fooStruct', FooStruct], ['bar', ['u8']], ], }, ], ]) ```