@@ -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