Skip to content

Commit e58bea6

Browse files
committed
Extend to_json mappings with parent members
1 parent daa3175 commit e58bea6

1 file changed

Lines changed: 29 additions & 4 deletions

File tree

codegen/src/codegen.ts

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,31 @@ using namespace jsonrpccxx;\n`;
304304
return content;
305305
}
306306

307+
public genToJson(members: Member[]) : string {
308+
let content = '';
309+
for (const element of members) {
310+
const cppToJson = `to_json(j, "${element.name}", s.${this.kebabToCamel(element.name)});`;
311+
content += ` ${cppToJson}\n`;
312+
}
313+
return content;
314+
}
315+
316+
public genParentToJson(struct: Struct) : string {
317+
let content = '';
318+
if (struct.extends) {
319+
for (const parent of struct.extends) {
320+
if (parent in this.structs) {
321+
const parentStruct = this.structs[parent];
322+
content += this.genParentToJson(parentStruct);
323+
if (parentStruct.members) {
324+
content += this.genToJson(parentStruct.members);
325+
}
326+
}
327+
}
328+
}
329+
return content;
330+
}
331+
307332
public genCppNamespace() : string {
308333
let content = `namespace RpcArgs {\n`;
309334

@@ -350,11 +375,11 @@ using namespace jsonrpccxx;\n`;
350375
content += `\n${this.cppToJsonTemplates}`;
351376
for (const name in this.structs) {
352377
const struct = this.structs[name];
353-
if (struct.members) {
378+
if (struct.members || struct.extends) {
354379
content += ` inline void to_json(nlohmann::json& j, const ${name}& s) {\n`;
355-
for (const element of struct.members) {
356-
const cppToJson = `to_json(j, "${element.name}", s.${this.kebabToCamel(element.name)});`;
357-
content += ` ${cppToJson}\n`;
380+
content += this.genParentToJson(struct);
381+
if (struct.members) {
382+
content += this.genToJson(struct.members);
358383
}
359384
content += ` }\n`;
360385
}

0 commit comments

Comments
 (0)