2
0
mirror of https://github.com/esiur/esiur-dart.git synced 2025-05-06 12:02:57 +00:00
This commit is contained in:
Ahmed Zamil 2022-02-12 15:40:32 +03:00
commit 92a26b8ce5
2 changed files with 47 additions and 18 deletions

View File

@ -24,7 +24,17 @@ void main(List<String> arguments) async {
..addOption('username', abbr: 'u') ..addOption('username', abbr: 'u')
..addOption('password', abbr: 'p') ..addOption('password', abbr: 'p')
..addOption('dir', abbr: 'd') ..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)); var results = parser.parse(arguments.skip(2));
@ -35,11 +45,14 @@ void main(List<String> arguments) async {
//print("Username ${username} password ${password} dir ${dir}"); //print("Username ${username} password ${password} dir ${dir}");
// make template // make template
var destDir = await TemplateGenerator.getTemplate(link, var destDir = await TemplateGenerator.getTemplate(
link,
dir: dir, dir: dir,
username: username, username: username,
password: password, password: password,
getx: results['getx']); getx: results['getx'],
namedArgs: results["namedargs"],
);
print("Generated directory `${destDir}`"); print("Generated directory `${destDir}`");

View File

@ -208,11 +208,14 @@ class TemplateGenerator {
return v == null || v == ""; return v == null || v == "";
} }
static Future<String> getTemplate(String url, static Future<String> getTemplate(
{String? dir, String url, {
String? dir,
String? username, String? username,
String? password, String? password,
bool getx = false}) async { bool getx = false,
bool namedArgs = false,
}) async {
try { try {
if (!_urlRegex.hasMatch(url)) throw Exception("Invalid IIP URL"); if (!_urlRegex.hasMatch(url)) throw Exception("Invalid IIP URL");
@ -266,7 +269,8 @@ class TemplateGenerator {
var source = ""; var source = "";
if (tmp.type == TemplateType.Resource) { 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) { } else if (tmp.type == TemplateType.Record) {
source = makeImports(tmp) + generateRecord(tmp, templates); source = makeImports(tmp) + generateRecord(tmp, templates);
} }
@ -308,8 +312,11 @@ class TemplateGenerator {
} }
static String generateClass( static String generateClass(
TypeTemplate template, List<TypeTemplate> templates, TypeTemplate template,
{bool getx = false}) { List<TypeTemplate> templates, {
bool getx = false,
bool namedArgs = false,
}) {
var className = template.className.split('.').last; var className = template.className.split('.').last;
var rt = StringBuffer(); var rt = StringBuffer();
@ -345,10 +352,19 @@ class TemplateGenerator {
template.functions.forEach((f) { template.functions.forEach((f) {
var rtTypeName = getTypeName(template, f.returnType, templates, true); var rtTypeName = getTypeName(template, f.returnType, templates, true);
rt.write("AsyncReply<$rtTypeName> ${f.name}("); rt.write("AsyncReply<$rtTypeName> ${f.name}(");
rt.write(f.arguments if (f.arguments.isNotEmpty && namedArgs) {
.map((x) => rt.write("{");
getTypeName(template, x.type, templates, true) + " " + x.name) }
.join(",")); 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(") {");
rt.writeln("var rt = AsyncReply<$rtTypeName>();"); rt.writeln("var rt = AsyncReply<$rtTypeName>();");