demo-protobuf: Add example using protobufjs decorators

This commit is contained in:
willclarktech 2020-06-16 14:22:56 +01:00
parent 362cfdb618
commit 2c90fdf029
No known key found for this signature in database
GPG Key ID: 551A86E2E398ADF7
3 changed files with 57 additions and 0 deletions

View File

@ -0,0 +1,38 @@
/* eslint-disable @typescript-eslint/camelcase */
import { assert } from "@cosmjs/utils";
import { myRegistry } from "./decorator";
describe("decorator demo", () => {
it("works with a custom msg", () => {
const typeUrl = "/demo.MsgDemo";
const MsgDemo = myRegistry.lookupType(typeUrl)!;
const TxBody = myRegistry.lookupType("/cosmos.tx.TxBody")!;
const Any = myRegistry.lookupType("/google.protobuf.Any")!;
const msgDemo = MsgDemo.create({
example: "Some example text",
});
const msgDemoBytes = MsgDemo.encode(msgDemo).finish();
const msgDemoWrapped = Any.create({
type_url: typeUrl,
value: msgDemoBytes,
});
const txBody = TxBody.create({
messages: [msgDemoWrapped],
memo: "Some memo",
timeoutHeight: 9999,
extensionOptions: [],
});
const txBodyBytes = TxBody.encode(txBody).finish();
const txBodyDecoded = TxBody.decode(txBodyBytes);
const msg = txBodyDecoded.messages[0];
assert(msg.type_url);
assert(msg.value);
const decoder = myRegistry.lookupType(msg.type_url)!;
const msgDemoDecoded = decoder.decode(msg.value);
expect(msgDemoDecoded.example).toEqual(msgDemo.example);
});
});

View File

@ -0,0 +1,13 @@
import { Field, Message, Type } from "protobufjs";
import { Registry } from "./registry";
export const myRegistry = new Registry();
@Type.d("MsgDemo")
export class MsgDemo extends Message<{}> {
@Field.d(1, "string")
public readonly example: string = "";
}
myRegistry.register("/demo.MsgDemo", MsgDemo);

View File

@ -0,0 +1,6 @@
import { Message } from "protobufjs";
import { Registry } from "./registry";
export declare const myRegistry: Registry;
export declare class MsgDemo extends Message<{}> {
readonly example: string;
}