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 schema = await buildStep.readAsString(buildStep.inputId);
  final temporaryRoot = Directory.systemTemp.createTempSync(
    'tdlib_api_builder_',
  );

  try {
    final generator = Generator(
      root: temporaryRoot.path,
      classes: Parser.fromSource(schema).parse(),
    );
    generator.generate();

    final generatedPaths = generator.outputPaths;
    if (!_samePaths(outputPaths, generatedPaths)) {
      throw StateError(
        'TDLib schema outputs changed while the builder was running. '
        'Restart build_runner so it can declare the new output set.',
      );
    }

    for (final path in outputPaths) {
      final generated = File('${temporaryRoot.path}/$path');
      await buildStep.writeAsString(
        AssetId(buildStep.inputId.package, path),
        generated.readAsStringSync(),
      );
    }
  } finally {
    temporaryRoot.deleteSync(recursive: true);
  }
}