Skip to content

Commit

Permalink
fix enums in nested messages (simplify recursion)
Browse files Browse the repository at this point in the history
  • Loading branch information
marcushultman committed May 17, 2020
1 parent 9b7d3e3 commit 691e94b
Showing 1 changed file with 34 additions and 39 deletions.
73 changes: 34 additions & 39 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -1454,57 +1454,52 @@ function createServiceClient(
);
}

function processProtoDescriptor(rootDescriptor, descriptor, pbIdentifier) {
function processMessageDescriptor(rootDescriptor, descriptor, pbIdentifier) {
const statements = [];

// Process messages
if (descriptor.getMessageTypeList) {
for (const messageDescriptor of descriptor.getMessageTypeList()) {
statements.push(
createMessage(rootDescriptor, messageDescriptor, pbIdentifier)
);

// Process nested messages
const enumStatements = [];
for (const enumDescriptor of messageDescriptor.getEnumTypeList()) {
enumStatements.push(createEnum(enumDescriptor));
}
statements.push(createMessage(rootDescriptor, descriptor, pbIdentifier));

if (enumStatements.length) {
statements.push(
createNamespace(messageDescriptor.getName(), enumStatements)
);
}
const namespacedStatements = [];

// Process nested messages
if (
messageDescriptor.getNestedTypeList &&
messageDescriptor.getNestedTypeList().length
) {
const namespacedStatements = processProtoDescriptor(
rootDescriptor,
messageDescriptor,
pbIdentifier
);
statements.push(
createNamespace(messageDescriptor.getName(), namespacedStatements)
);
}
}
// Process nested enums
for (const enumDescriptor of descriptor.getEnumTypeList()) {
namespacedStatements.push(createEnum(enumDescriptor));
}

// Process nested messages
if (descriptor.getNestedTypeList) {
for (const nestedDescriptor of descriptor.getNestedTypeList()) {
statements.push(
createMessage(rootDescriptor, nestedDescriptor, pbIdentifier)
);
namespacedStatements.push(...processMessageDescriptor(
rootDescriptor,
nestedDescriptor,
pbIdentifier
));
}
}

// Process enums
for (const enumDescriptor of descriptor.getEnumTypeList()) {
statements.push(createEnum(enumDescriptor));
if (namespacedStatements.length) {
statements.push(
createNamespace(descriptor.getName(), namespacedStatements)
);
}

return statements;
}

function processProtoDescriptor(rootDescriptor, descriptor, pbIdentifier) {
const statements = [];

// Process messages
if (descriptor.getMessageTypeList) {
for (messageDescriptor of descriptor.getMessageTypeList()) {
statements.push(
...processMessageDescriptor(
rootDescriptor,
messageDescriptor,
pbIdentifier
)
);
}
}

return statements;
Expand Down

0 comments on commit 691e94b

Please sign in to comment.