Отредактируйте шаблон openapi mustache, чтобы включить дополнительный параметр в сигнатуру метода

#c# #openapi #openapi-generator

#c# #openapi #openapi-генератор

Вопрос:

Я пытаюсь добавить дополнительный параметр в шаблон mustache, автоматически созданный из API JSON.

Код: Я добавил дополнительный параметр для CancellationToken в сигнатуру метода в качестве последнего параметра.

 {{#returnType}}System.Threading.Tasks.Task<{{{returnType}}}>{{/returnType}}{{^returnType}}System.Threading.Tasks.Task{{/returnType}} {{operationId}}Async ({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = default({{{dataType}}}){{/optionalMethodArgument}}{{/required}}{{#hasMore}}, {{/hasMore}}{{/allParams}}, CancellationToken cancellationToken = default(CancellationToken));
  

Проблема: Эта модификация работает нормально, и мы можем генерировать правильные сценарии C #, но у нас есть проблема в методах, у которых нет встроенного параметра. Эти методы в конечном итоге выглядят так:

DoThis(, CancellationToken token = default(CancellationToken)).

Как мы можем поставить условие для запятой, которое гласит — пишите эту запятую только при наличии одного или нескольких встроенных параметров? Помощь приветствуется.

Ответ №1:

В вашем сценарии это довольно просто. Ваш шаблон добавляет запятую в настоящее время, когда в списке осталось больше элементов, поэтому, если вы удалите условие из этой запятой (потому что вы всегда собираетесь добавлять другой элемент), вам не нужно специально добавлять его перед вашим CancellationToken.

Это имеет приятный побочный эффект: если у вас нет параметров в вашем списке, запятые не будут сгенерированы (потому что они генерируются только после каждого параметра)

 {{#returnType}}System.Threading.Tasks.Task<{{{returnType}}}>{{/returnType}}{{^returnType}}System.Threading.Tasks.Task{{/returnType}} {{operationId}}Async ({{#allParams}}{{{dataType}}} {{paramName}}{{^required}}{{#optionalMethodArgument}} = default({{{dataType}}}){{/optionalMethodArgument}}{{/required}}, {{/allParams}} CancellationToken cancellationToken = default(CancellationToken));