feat: rewrite dart http code gen with dart code builder & format

This commit is contained in:
laiiihz
2023-12-21 13:20:41 +08:00
parent 73f415c667
commit a792e0fb35
4 changed files with 317 additions and 223 deletions

View File

@ -1,14 +1,24 @@
import 'package:code_builder/code_builder.dart';
Code _toStatement(Spec spec) {
if (spec is Expression) {
return spec.statement;
} else if (spec is Code) {
return spec;
} else {
throw UnimplementedError();
}
}
Block declareTryCatch({
required List<Expression> body,
required Map<String?, List<Expression>> onError,
required List<Spec> body,
required Map<String?, List<Spec>> onError,
bool showStackStrace = false,
}) {
return Block((b) {
b.statements.add(const Code('try'));
b.statements.add(const Code('{'));
b.statements.addAll(body.map((e) => e.statement).toList());
b.statements.addAll(body.map(_toStatement).toList());
final entries = onError.entries;
for (var error in entries) {
@ -19,8 +29,24 @@ Block declareTryCatch({
b.statements.add(Code(showStackStrace ? 'catch(e,s)' : 'catch(e)'));
b.statements.add(const Code('{'));
b.statements.addAll(error.value.map((e) => e.statement).toList());
b.statements.addAll(error.value.map(_toStatement).toList());
if (entries.last.key == error.key) b.statements.add(const Code('}'));
}
});
}
Block declareIfElse({
required Expression condition,
required List<Spec> body,
required List<Spec> elseBody,
}) {
return Block.of([
const Code('if('),
condition.code,
const Code('){'),
...body.map(_toStatement),
const Code('} else {'),
...elseBody.map(_toStatement),
const Code('}'),
]);
}