From 94ecbca47434886b8131864b9ea2ee100218aa8d Mon Sep 17 00:00:00 2001 From: willclarktech Date: Tue, 23 Jun 2020 11:03:56 +0200 Subject: [PATCH] demo-protobuf: Add nested msg field to decorator demo --- packages/demo-protobuf/src/decorator.spec.ts | 18 ++++++++++++++++++ packages/demo-protobuf/src/decorator.ts | 1 + packages/demo-protobuf/types/decorator.d.ts | 3 ++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/demo-protobuf/src/decorator.spec.ts b/packages/demo-protobuf/src/decorator.spec.ts index dc82e3d3..9787f6c7 100644 --- a/packages/demo-protobuf/src/decorator.spec.ts +++ b/packages/demo-protobuf/src/decorator.spec.ts @@ -7,9 +7,16 @@ import { Registry } from "./registry"; describe("decorator demo", () => { it("works with a custom msg", () => { + const nestedTypeUrl = "/demo.MsgNestedDemo"; const typeUrl = "/demo.MsgDemo"; const myRegistry = new Registry(); + @CosmosMessage(myRegistry, nestedTypeUrl) + class MsgNestedDemo extends Message<{}> { + @CosmosField.String(1) + public readonly foo?: string; + } + @CosmosMessage(myRegistry, typeUrl) // eslint-disable-next-line @typescript-eslint/no-unused-vars class MsgDemo extends Message<{}> { @@ -30,12 +37,21 @@ describe("decorator demo", () => { @CosmosField.Repeated(6) public readonly listDemo?: readonly string[]; + + @CosmosField.Nested(7, MsgNestedDemo) + public readonly nestedDemo?: MsgNestedDemo; } + const MsgNestedDemoT = myRegistry.lookupType(nestedTypeUrl)!; const MsgDemoT = myRegistry.lookupType(typeUrl)!; const TxBody = myRegistry.lookupType("/cosmos.tx.TxBody")!; const Any = myRegistry.lookupType("/google.protobuf.Any")!; + const msgNestedDemoFields = { + foo: "bar", + }; + const msgNestedDemo = MsgNestedDemoT.create(msgNestedDemoFields); + const msgDemoFields = { booleanDemo: true, stringDemo: "example text", @@ -43,6 +59,7 @@ describe("decorator demo", () => { int64Demo: -123, uint64Demo: 123, listDemo: ["this", "is", "a", "list"], + nestedDemo: msgNestedDemo, }; const msgDemo = MsgDemoT.create(msgDemoFields); const msgDemoBytes = MsgDemoT.encode(msgDemo).finish(); @@ -73,5 +90,6 @@ describe("decorator demo", () => { expect(msgDemoDecoded.uint64Demo.toNumber()).toEqual(msgDemoFields.uint64Demo); expect(msgDemoDecoded.listDemo).toEqual(msgDemoFields.listDemo); + expect(msgDemoDecoded.nestedDemo).toEqual(msgDemoFields.nestedDemo); }); }); diff --git a/packages/demo-protobuf/src/decorator.ts b/packages/demo-protobuf/src/decorator.ts index 6ef95e61..dfbf98eb 100644 --- a/packages/demo-protobuf/src/decorator.ts +++ b/packages/demo-protobuf/src/decorator.ts @@ -25,4 +25,5 @@ export const CosmosField = { UInt64: (id: number) => Field.d(id, "uint64"), Repeated: (id: number) => Field.d(id, "string", "repeated"), + Nested: (id: number, ctor: Constructor>) => Field.d(id, ctor), }; diff --git a/packages/demo-protobuf/types/decorator.d.ts b/packages/demo-protobuf/types/decorator.d.ts index e0ffda96..33b44050 100644 --- a/packages/demo-protobuf/types/decorator.d.ts +++ b/packages/demo-protobuf/types/decorator.d.ts @@ -1,4 +1,4 @@ -import { TypeDecorator } from "protobufjs"; +import { Constructor, Message, TypeDecorator } from "protobufjs"; import { Registry } from "./registry"; export declare function CosmosMessage(registry: Registry, typeUrl: string): TypeDecorator; export declare const CosmosField: { @@ -8,4 +8,5 @@ export declare const CosmosField: { Int64: (id: number) => import("protobufjs").FieldDecorator; UInt64: (id: number) => import("protobufjs").FieldDecorator; Repeated: (id: number) => import("protobufjs").FieldDecorator; + Nested: (id: number, ctor: Constructor>) => import("protobufjs").FieldDecorator; };