From 3adbcfdc1c414e617d24c0d52766d40e6f8421ff Mon Sep 17 00:00:00 2001 From: vato007 Date: Sat, 17 Aug 2024 14:30:11 +0930 Subject: [PATCH] Populate enum messages in nested lists/maps --- .../proto-definition.service.spec.ts | 9 ++- .../proto-definition.service.ts | 69 ++++++++++++++++--- test.proto | 2 + 3 files changed, 67 insertions(+), 13 deletions(-) diff --git a/src/app/proto-definition-selector/proto-definition.service.spec.ts b/src/app/proto-definition-selector/proto-definition.service.spec.ts index effbd12..3e319f4 100644 --- a/src/app/proto-definition-selector/proto-definition.service.spec.ts +++ b/src/app/proto-definition-selector/proto-definition.service.spec.ts @@ -40,6 +40,7 @@ message Test { message ReferenceMessage { string test = 1; Test.NestedMessage nested_message = 2; + EnumTest enum_test = 3; } enum EnumTest { @@ -92,7 +93,7 @@ describe('TestService', () => { expect(mapMessage.valueConfiguration.type).toBe(MessageTypeEnum.String); const referenceMessage = converted.values[8].configuration as ObjectMessage; - expect(referenceMessage.messageDefinition.values.length).toBe(2); + expect(referenceMessage.messageDefinition.values.length).toBe(3); expect(referenceMessage.messageDefinition.name).toBe('ReferenceMessage'); const nestedReferenceMessage = referenceMessage.messageDefinition.values[0]; expect(nestedReferenceMessage.configuration.type).toBe( @@ -136,7 +137,11 @@ describe('TestService', () => { ); const objectListNestedMessage = objectListMessage.subConfiguration as ObjectMessage; - expect(objectListNestedMessage.messageDefinition.values.length).toBe(2); + expect(objectListNestedMessage.messageDefinition.values.length).toBe(3); + + const enumTestMessage = objectListNestedMessage.messageDefinition.values[2] + .configuration as EnumMessage; + expect(enumTestMessage.type).toBe(MessageTypeEnum.Enum); }); }); diff --git a/src/app/proto-definition-selector/proto-definition.service.ts b/src/app/proto-definition-selector/proto-definition.service.ts index 84ea6b1..0564f89 100644 --- a/src/app/proto-definition-selector/proto-definition.service.ts +++ b/src/app/proto-definition-selector/proto-definition.service.ts @@ -93,11 +93,11 @@ export class ProtoDefinitionService { configuration = listConfiguration.subConfiguration; } } else if (value.configuration.type === MessageTypeEnum.Map) { - const listConfiguration = value.configuration as MapMessage; + const mapConfiguration = value.configuration as MapMessage; if ( - listConfiguration.valueConfiguration.type === MessageTypeEnum.Object + mapConfiguration.valueConfiguration.type === MessageTypeEnum.Object ) { - configuration = listConfiguration.valueConfiguration; + configuration = mapConfiguration.valueConfiguration; } } if (configuration) { @@ -119,6 +119,26 @@ export class ProtoDefinitionService { value.configuration as ObjectMessage, enumMessages ); + } else if (value.configuration.type === MessageTypeEnum.List) { + const listConfiguration = value.configuration as ListMessage; + if ( + listConfiguration.subConfiguration.type === MessageTypeEnum.Object + ) { + listConfiguration.subConfiguration = this.populateEnumMessages( + listConfiguration.subConfiguration as ObjectMessage, + enumMessages + ); + } + } else if (value.configuration.type === MessageTypeEnum.Map) { + const mapConfiguration = value.configuration as MapMessage; + if ( + mapConfiguration.valueConfiguration.type === MessageTypeEnum.Object + ) { + mapConfiguration.valueConfiguration = this.populateEnumMessages( + mapConfiguration.valueConfiguration as ObjectMessage, + enumMessages + ); + } } } } @@ -159,17 +179,44 @@ export class ProtoDefinitionService { } } objectMessage.messageDefinition.values = - objectMessage.messageDefinition.values.map((obj) => - obj.configuration.type === MessageTypeEnum.Object - ? { + objectMessage.messageDefinition.values.map((obj) => { + if (obj.configuration.type === MessageTypeEnum.Object) { + return { + ...obj, + configuration: this.populateEnumMessages( + obj.configuration as ObjectMessage, + enumMessages + ), + }; + } else if (obj.configuration.type === MessageTypeEnum.List) { + const listConfiguration = obj.configuration as ListMessage; + if ( + listConfiguration.subConfiguration.type === MessageTypeEnum.Object + ) { + return { ...obj, - configuration: this.populateEnumMessages( - obj.configuration as ObjectMessage, + subConfiguration: this.populateEnumMessages( + listConfiguration.subConfiguration as ObjectMessage, enumMessages ), - } - : obj - ); + }; + } + } else if (obj.configuration.type === MessageTypeEnum.Map) { + const mapConfiguration = obj.configuration as MapMessage; + if ( + mapConfiguration.valueConfiguration.type === MessageTypeEnum.Object + ) { + return { + ...obj, + valueConfiguration: this.populateEnumMessages( + mapConfiguration.valueConfiguration as ObjectMessage, + enumMessages + ), + }; + } + } + return obj; + }); return objectMessage; } diff --git a/test.proto b/test.proto index 2567a54..14b32b7 100644 --- a/test.proto +++ b/test.proto @@ -20,6 +20,8 @@ message Test { message ReferenceMessage { string test = 1; + Test.NestedMessage nested = 2; + EnumTest enum_test = 3; } enum EnumTest {