generateClient function
Generates a Dart client for the current Gazelle project.
Implementation
Future<void> generateClient({
required String structure,
required String path,
required String projectName,
}) async {
final routeStructure = jsonDecode(structure);
final code = StringBuffer();
code.writeln("import 'package:models/models.dart';");
code.writeln("import 'package:gazelle_client/gazelle_client.dart';");
code.writeln("export 'package:models/models.dart';");
code.writeln(
"export 'package:gazelle_client/gazelle_client.dart' hide GazelleRouteClient, GazelleApiClient;");
code.writeln();
code.writeln("extension GazelleApiClientExtension on GazelleApiClient {");
_generateRouteProperties(routeStructure, code, extension: true);
code.writeln("}");
code.writeln();
_generateRouteClasses(routeStructure, code);
code.writeln();
code.writeln("class Gazelle {");
code.writeln("static GazelleClient? _client;");
code.writeln("""void init({String? baseUrl}) => _client = GazelleClient.init(
baseUrl: baseUrl ?? "http://localhost:3000",
modelProvider: ${_snakeToPascalCase(projectName)}ModelProvider(),
);""");
code.writeln("""GazelleClient get client =>
_client == null ? throw "Gazelle not configured!" : _client!;""");
code.writeln("}");
code.writeln();
code.writeln("final gazelle = Gazelle();");
final clientExtensions = DartFormatter().format(code.toString());
await _createClientPackage(path: path, clientExtensions: clientExtensions);
}