generate method
Future<void>
generate({
- String package = 'my_api',
- required String destination,
- bool formatOutput = true,
- bool quiet = false,
- bool replace = false,
- SchemaGeneratorOptions schemaOptions = const SchemaGeneratorOptions(),
- ClientGeneratorOptions clientOptions = const ClientGeneratorOptions(),
- ServerGeneratorOptions serverOptions = const ServerGeneratorOptions(),
- GeneratorCase generatorCase = GeneratorCase.camelCase,
Generate code from the OpenApi object
The schemas will be generated by default, users can optionally toggle the generation of the client and/or server code
Implementation
Future<void> generate({
String package = 'my_api',
required String destination,
bool formatOutput = true,
bool quiet = false,
bool replace = false,
SchemaGeneratorOptions schemaOptions = const SchemaGeneratorOptions(),
ClientGeneratorOptions clientOptions = const ClientGeneratorOptions(),
ServerGeneratorOptions serverOptions = const ServerGeneratorOptions(),
GeneratorCase generatorCase = GeneratorCase.camelCase,
}) async {
// Update the global generator case
GENERATOR_CASE_OPTION = generatorCase;
// Ensure that the folder exists
final dir = Directory(destination);
final dirPath = p.normalize(dir.absolute.path);
if (dir.existsSync()) {
if (replace) {
await dir.delete(recursive: true);
} else {
throw Exception(
'Destination directory already exists: $dirPath\n\nEither remove it or set the "replace" option to true to delete the existing destination\n',
);
}
}
if (!dir.existsSync()) {
dir.createSync(recursive: true);
}
// Generate the schemas
SchemaGenerator? schemaGenerator;
if (components?.schemas?.isNotEmpty ?? false) {
schemaGenerator = SchemaGenerator(
spec: this,
package: package.snakeCase,
destination: destination,
quiet: quiet,
options: schemaOptions,
);
schemaGenerator.generate();
} else {
// ignore: avoid_print
print(
'No schemas found in OpenAPI spec - Not generating schema library.',
);
}
if (clientOptions.enabled) {
if (paths == null || (paths?.isEmpty ?? true)) {
// ignore: avoid_print
print(
'No client paths/operations found in OpenAPI spec - Not generating client library.',
);
} else {
final clientGenerator = ClientGenerator(
spec: this,
package: package.snakeCase,
destination: destination,
quiet: quiet,
options: clientOptions,
schemaGenerator: schemaGenerator,
);
clientGenerator.generate();
}
}
if (serverOptions.enabled) {
if (paths == null || (paths?.isEmpty ?? true)) {
// ignore: avoid_print
print(
'No client paths/operations found in OpenAPI spec - Not generating server library.',
);
} else {
final serverGenerator = ServerGenerator(
spec: this,
package: package.snakeCase,
destination: destination,
quiet: quiet,
options: serverOptions,
);
await serverGenerator.generate();
}
}
// Revert the global generator case
GENERATOR_CASE_OPTION = GeneratorCase.camelCase;
// Apply the Dart formatting and fix logic
if (formatOutput) {
final resultFix = await Process.run('dart', [
'fix',
'--apply',
dir.absolute.path,
]);
final resultFormat = await Process.run('dart', [
'format',
dir.absolute.path,
]);
if (resultFix.exitCode != 0) {
throw ('\n\nError running dart fix:\n${resultFix.stderr}\n');
}
if (resultFormat.exitCode != 0) {
throw ('\n\nError running dart fix:\n${resultFormat.stderr}\n');
}
}
}