demo-protobuf: Include protobuf type decorator in CosmosMessage

This commit is contained in:
willclarktech 2020-06-16 16:42:05 +01:00
parent e9193996a9
commit 1ff83189db
No known key found for this signature in database
GPG Key ID: 551A86E2E398ADF7

View File

@ -1,17 +1,23 @@
import { Field, Message, Type } from "protobufjs";
import { Constructor, Field, Message, TypeDecorator, util } from "protobufjs";
import { GeneratedType, Registry } from "./registry";
import { Registry } from "./registry";
export const myRegistry = new Registry();
function CosmosMessage(registry: Registry, typeUrl: string) {
return (generatedType: GeneratedType) => {
function getTypeName(typeUrl: string): string {
const parts = typeUrl.split(".");
return parts[parts.length - 1];
}
function CosmosMessage(registry: Registry, typeUrl: string): TypeDecorator<any> {
return (constructor: Constructor<Message<any>>) => {
const typeName = getTypeName(typeUrl);
const generatedType = util.decorateType(constructor, typeName);
registry.register(typeUrl, generatedType);
};
}
@CosmosMessage(myRegistry, "/demo.MsgDemo")
@Type.d("MsgDemo")
export class MsgDemo extends Message<{}> {
@Field.d(1, "string")
public readonly example: string = "";