build method

  1. @override
Future<void> build(
  1. BuildStep buildStep
)

Generates the outputs for a given BuildStep.

Implementation

@override
Future<void> build(BuildStep buildStep) async {
  final fileNameWithExtension =
      buildStep.inputId.pathSegments.last.replaceAll('-', '_');
  final fileNameWithoutExtension = fileNameWithExtension.split('.').first;

  final contents = (await buildStep.readAsString(buildStep.inputId));

  final codeGenerator = SwaggerCodeGenerator();

  final models = codeGenerator.generateModels(
      contents, getFileNameWithoutExtension(fileNameWithExtension), options);

  final responses = codeGenerator.generateResponses(
      contents, getFileNameWithoutExtension(fileNameWithExtension), options);

  final requestBodies = codeGenerator.generateRequestBodies(
      contents, getFileNameWithoutExtension(fileNameWithExtension), options);

  final enums = codeGenerator.generateEnums(
      contents, getFileNameWithoutExtension(fileNameWithExtension));

  final imports = codeGenerator.generateImportsContent(
      contents,
      fileNameWithoutExtension,
      models.isNotEmpty,
      options.buildOnlyModels,
      enums.isNotEmpty);

  final converter = codeGenerator.generateConverter(
      contents, getFileNameWithoutExtension(fileNameWithExtension), options);

  final requests = codeGenerator.generateRequests(
      contents,
      getClassNameFromFileName(fileNameWithExtension),
      getFileNameWithoutExtension(fileNameWithExtension),
      options);

  final customDecoder = codeGenerator.generateCustomJsonConverter(contents,
      getFileNameWithoutExtension(fileNameWithExtension), models.isNotEmpty);

  final dateToJson = codeGenerator.generateDateToJson(contents);

  final copyAssetId = AssetId(buildStep.inputId.package,
      '${options.outputFolder}$fileNameWithoutExtension$_outputFileExtension');

  await buildStep.writeAsString(
      copyAssetId,
      _generateFileContent(imports, requests, converter, models, responses,
          requestBodies, customDecoder, dateToJson));

  if (enums.isNotEmpty) {
    ///Write enums
    final formatterEnums = _tryFormatCode(enums);

    final enumsAssetId = AssetId(buildStep.inputId.package,
        '${options.outputFolder}$fileNameWithoutExtension$_outputEnumsFileExtension');

    await buildStep.writeAsString(enumsAssetId, formatterEnums);
  }

  ///Write additional files on first input
  if (buildExtensions.keys.first == buildStep.inputId.path) {
    await _generateAdditionalFiles(
        contents, buildStep.inputId, buildStep, models.isNotEmpty);
  }
}