diff --git a/bin/esiur.dart b/bin/esiur.dart index 77a821c..7c8d856 100644 --- a/bin/esiur.dart +++ b/bin/esiur.dart @@ -24,7 +24,17 @@ void main(List arguments) async { ..addOption('username', abbr: 'u') ..addOption('password', abbr: 'p') ..addOption('dir', abbr: 'd') - ..addFlag("getx", abbr: 'x'); + ..addFlag( + "getx", + abbr: 'x', + defaultsTo: false, + help: "Generate apropriate getx bindings for resources", + ) + ..addFlag( + "namedargs", + help: + "Use named arguments instead of positional arguments for resource methods", + ); var results = parser.parse(arguments.skip(2)); @@ -35,11 +45,14 @@ void main(List arguments) async { //print("Username ${username} password ${password} dir ${dir}"); // make template - var destDir = await TemplateGenerator.getTemplate(link, - dir: dir, - username: username, - password: password, - getx: results['getx']); + var destDir = await TemplateGenerator.getTemplate( + link, + dir: dir, + username: username, + password: password, + getx: results['getx'], + namedArgs: results["namedargs"], + ); print("Generated directory `${destDir}`"); diff --git a/lib/src/Proxy/TemplateGenerator.dart b/lib/src/Proxy/TemplateGenerator.dart index 6cf5cb2..3a641b9 100644 --- a/lib/src/Proxy/TemplateGenerator.dart +++ b/lib/src/Proxy/TemplateGenerator.dart @@ -208,11 +208,14 @@ class TemplateGenerator { return v == null || v == ""; } - static Future getTemplate(String url, - {String? dir, - String? username, - String? password, - bool getx = false}) async { + static Future getTemplate( + String url, { + String? dir, + String? username, + String? password, + bool getx = false, + bool namedArgs = false, + }) async { try { if (!_urlRegex.hasMatch(url)) throw Exception("Invalid IIP URL"); @@ -266,7 +269,8 @@ class TemplateGenerator { var source = ""; if (tmp.type == TemplateType.Resource) { - source = makeImports(tmp) + generateClass(tmp, templates, getx: getx); + source = makeImports(tmp) + + generateClass(tmp, templates, getx: getx, namedArgs: namedArgs); } else if (tmp.type == TemplateType.Record) { source = makeImports(tmp) + generateRecord(tmp, templates); } @@ -308,8 +312,11 @@ class TemplateGenerator { } static String generateClass( - TypeTemplate template, List templates, - {bool getx = false}) { + TypeTemplate template, + List templates, { + bool getx = false, + bool namedArgs = false, + }) { var className = template.className.split('.').last; var rt = StringBuffer(); @@ -345,10 +352,19 @@ class TemplateGenerator { template.functions.forEach((f) { var rtTypeName = getTypeName(template, f.returnType, templates, true); rt.write("AsyncReply<$rtTypeName> ${f.name}("); - rt.write(f.arguments - .map((x) => - getTypeName(template, x.type, templates, true) + " " + x.name) - .join(",")); + if (f.arguments.isNotEmpty && namedArgs) { + rt.write("{"); + } + rt.write(f.arguments.map((x) { + final typeName = getTypeName(template, x.type, templates, true); + return typeName + + (namedArgs && !typeName.endsWith("?") ? "?" : "") + + " " + + x.name; + }).join(",")); + if (f.arguments.isNotEmpty && namedArgs) { + rt.write("}"); + } rt.writeln(") {"); rt.writeln("var rt = AsyncReply<$rtTypeName>();");