From e011744ad4d42a99fe27db83fe15b7a4550d554c Mon Sep 17 00:00:00 2001 From: Zetazzz Date: Thu, 16 Nov 2023 17:23:45 +0800 Subject: [PATCH] edited encode --- .../cosmos/authz/v1beta1/authz.ts | 4 +- .../encoding/__tests__/misc.overall.test.ts | 3 ++ .../ast/src/encoding/proto/encode/utils.ts | 41 +++++++++++++------ .../types/encoding/proto/encode/utils.d.ts | 4 +- 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/__fixtures__/misc/output-impl-interfaces-gen/cosmos/authz/v1beta1/authz.ts b/__fixtures__/misc/output-impl-interfaces-gen/cosmos/authz/v1beta1/authz.ts index ab59757b1b..446f0b1a0e 100644 --- a/__fixtures__/misc/output-impl-interfaces-gen/cosmos/authz/v1beta1/authz.ts +++ b/__fixtures__/misc/output-impl-interfaces-gen/cosmos/authz/v1beta1/authz.ts @@ -251,7 +251,7 @@ export const Grant = { }, encode(message: Grant, writer: BinaryWriter = BinaryWriter.create()): BinaryWriter { if (message.authorization !== undefined) { - Any.encode((message.authorization as Any), writer.uint32(10).fork()).ldelim(); + Any.encode(GlobalDecoderRegistry.wrapAny(message.authorization), writer.uint32(10).fork()).ldelim(); } if (message.expiration !== undefined) { Timestamp.encode(toTimestamp(message.expiration), writer.uint32(18).fork()).ldelim(); @@ -360,7 +360,7 @@ export const GrantAuthorization = { writer.uint32(18).string(message.grantee); } if (message.authorization !== undefined) { - Any.encode((message.authorization as Any), writer.uint32(26).fork()).ldelim(); + Any.encode(GlobalDecoderRegistry.wrapAny(message.authorization), writer.uint32(26).fork()).ldelim(); } if (message.expiration !== undefined) { Timestamp.encode(toTimestamp(message.expiration), writer.uint32(34).fork()).ldelim(); diff --git a/packages/ast/src/encoding/__tests__/misc.overall.test.ts b/packages/ast/src/encoding/__tests__/misc.overall.test.ts index f795d94e73..dc59ae6ff4 100644 --- a/packages/ast/src/encoding/__tests__/misc.overall.test.ts +++ b/packages/ast/src/encoding/__tests__/misc.overall.test.ts @@ -28,6 +28,9 @@ cases( context.options.prototypes!.typingsFormat!.timestamp = opts.name; context.options.interfaces!.enabled = true; context.options.interfaces!.useGlobalDecoderRegistry = true; + context.options.aminoEncoding = { + enabled: true + } expectCode( createObjectWithMethods( diff --git a/packages/ast/src/encoding/proto/encode/utils.ts b/packages/ast/src/encoding/proto/encode/utils.ts index d37dce70fd..51e6dfaa77 100644 --- a/packages/ast/src/encoding/proto/encode/utils.ts +++ b/packages/ast/src/encoding/proto/encode/utils.ts @@ -267,7 +267,9 @@ export const encode = { isAnyType = true; } - return types.type(num, prop, name, isAnyType); + const isGlobalRegistry = args.context.options.interfaces?.enabled && args.context.options.interfaces?.useGlobalDecoderRegistry; + + return types.type(num, prop, name, isAnyType, isGlobalRegistry); }, enum(args: EncodeMethod) { @@ -337,7 +339,9 @@ export const encode = { isAnyType = true; } - return types.typeArray(num, prop, name, isAnyType); + const isGlobalRegistry = args.context.options.interfaces?.enabled && args.context.options.interfaces?.useGlobalDecoderRegistry; + + return types.typeArray(num, prop, name, isAnyType, isGlobalRegistry); }, keyHash(args: EncodeMethod) { @@ -507,20 +511,26 @@ export const types = { ) }, - type(num: number, prop: string, name: string, isAnyType: boolean) { + type(num: number, prop: string, name: string, isAnyType: boolean, isGlobalRegistry: boolean) { - let messageProp: t.MemberExpression | t.TSAsExpression = t.memberExpression( + let messageProp: t.MemberExpression | t.TSAsExpression | t.CallExpression = t.memberExpression( t.identifier('message'), t.identifier(prop) ); if (isAnyType) { + if(isGlobalRegistry){ + messageProp = t.callExpression(t.memberExpression(t.identifier("GlobalDecoderRegistry"), t.identifier("wrapAny")),[ + messageProp + ]) + } else { messageProp = t.tsAsExpression( messageProp, t.tsTypeReference( t.identifier('Any') ) ) + } } return t.ifStatement( @@ -819,18 +829,25 @@ export const types = { ]; }, - typeArray(num: number, prop: string, name: string, isAnyType: boolean) { + typeArray(num: number, prop: string, name: string, isAnyType: boolean, isGlobalRegistry: boolean) { // "v!" just means it's NOT NULLABLE - let nestedProp: t.TSNonNullExpression | t.TSAsExpression = t.tsNonNullExpression( + let nestedProp: t.TSNonNullExpression | t.TSAsExpression | t.CallExpression = t.tsNonNullExpression( t.identifier('v') ); + if (isAnyType) { - nestedProp = t.tsAsExpression( - nestedProp, - t.tsTypeReference( - t.identifier('Any') - ) - ) + if(isGlobalRegistry){ + nestedProp = t.callExpression(t.memberExpression(t.identifier("GlobalDecoderRegistry"), t.identifier("wrapAny")),[ + nestedProp + ]) + } else { + nestedProp = t.tsAsExpression( + nestedProp, + t.tsTypeReference( + t.identifier('Any') + ) + ) + } } diff --git a/packages/ast/types/encoding/proto/encode/utils.d.ts b/packages/ast/types/encoding/proto/encode/utils.d.ts index 1ad064a5c2..719186807b 100644 --- a/packages/ast/types/encoding/proto/encode/utils.d.ts +++ b/packages/ast/types/encoding/proto/encode/utils.d.ts @@ -42,7 +42,7 @@ export declare const types: { fixed64(num: number, prop: string, isOptional: boolean, args: EncodeMethod): t.IfStatement; sfixed64(num: number, prop: string, isOptional: boolean, args: EncodeMethod): t.IfStatement; bool(num: number, prop: string, isOptional: boolean, args?: EncodeMethod): t.IfStatement; - type(num: number, prop: string, name: string, isAnyType: boolean): t.IfStatement; + type(num: number, prop: string, name: string, isAnyType: boolean, isGlobalRegistry: boolean): t.IfStatement; enum(context: ProtoParseContext, num: number, field: ProtoField, isOptional: boolean, isOneOf: boolean): t.IfStatement; bytes(num: number, prop: string, isOptional: boolean): t.IfStatement; timestamp(num: number, prop: string): t.Statement; @@ -50,7 +50,7 @@ export declare const types: { duration(num: number, prop: string): t.IfStatement; forkDelimArray(num: number, prop: string, expr: t.Statement): (t.ExpressionStatement | t.ForOfStatement)[]; array(num: number, prop: string, expr: t.Statement): t.ForOfStatement[]; - typeArray(num: number, prop: string, name: string, isAnyType: boolean): t.ForOfStatement[]; + typeArray(num: number, prop: string, name: string, isAnyType: boolean, isGlobalRegistry: boolean): t.ForOfStatement[]; keyHash(num: number, prop: string, name: string): t.ExpressionStatement; }; export declare const arrayTypes: {