demo-protobuf: Add example using protobufjs decorators
This commit is contained in:
parent
362cfdb618
commit
2c90fdf029
38
packages/demo-protobuf/src/decorator.spec.ts
Normal file
38
packages/demo-protobuf/src/decorator.spec.ts
Normal 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);
|
||||
});
|
||||
});
|
||||
13
packages/demo-protobuf/src/decorator.ts
Normal file
13
packages/demo-protobuf/src/decorator.ts
Normal 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);
|
||||
6
packages/demo-protobuf/types/decorator.d.ts
vendored
Normal file
6
packages/demo-protobuf/types/decorator.d.ts
vendored
Normal 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;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user