Files
apidash/lib/codegen/swift/urlsession.dart
Deepraj Baidya f5c49d4ac9 Feat/codegen url session (#1)
*  (wip): codegen `URLSession` configs

* 📝 (chore): docs update and deps install

*  (feat): `URLSession` codegen

*  (test): `test/codegen/swift_urlsession_test.dart` --wip
2024-08-28 19:16:05 +05:30

95 lines
2.4 KiB
Dart

import 'package:apidash/consts.dart';
import 'package:apidash/models/models.dart';
import 'package:apidash/utils/utils.dart' show getValidRequestUri;
import 'package:jinja/jinja.dart' as jj;
class SwiftURLSessionCodeGen {
final String kTemplateStart = """
import Foundation
""";
final String kTemplateParameters = '''
let parameters = "{{parameters}}"
let postData = parameters.data(using: .utf8)
''';
final String kTemplateRequest = """
var request = URLRequest(url: URL(string: "{{url}}")!,timeoutInterval: Double.infinity)
request.httpMethod = "{{method}}"
""";
final String kTemplateHeaders = """
{% for header, value in headers %}
request.addValue("{{value}}", forHTTPHeaderField: "{{header}}")
{% endfor %}
""";
final String kTemplateBody = """
request.httpBody = postData
""";
final String kTemplateEnd = """
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
return
}
print(String(data: data, encoding: .utf8)!)
}
task.resume()
""";
String? getCode(HttpRequestModel requestModel) {
try {
String result = kTemplateStart;
var rec =
getValidRequestUri(requestModel.url, requestModel.enabledParams);
Uri? uri = rec.$1;
// if (uri == null) {
// throw Exception("Invalid URL");
// }
if (requestModel.hasJsonData || requestModel.hasTextData) {
var templateParameters = jj.Template(kTemplateParameters);
result += templateParameters.render({
"parameters":
requestModel.body!.replaceAll('"', '\\"').replaceAll('\n', '\\n')
});
}
var templateRequest = jj.Template(kTemplateRequest);
result += templateRequest.render({
"url": uri.toString(),
"method": requestModel.method.name.toUpperCase()
});
var headers = requestModel.enabledHeadersMap;
if (requestModel.hasJsonData || requestModel.hasTextData) {
headers.putIfAbsent(
kHeaderContentType, () => requestModel.bodyContentType.header);
}
if (headers.isNotEmpty) {
var templateHeader = jj.Template(kTemplateHeaders);
result += templateHeader.render({"headers": headers});
}
if (requestModel.hasTextData || requestModel.hasJsonData) {
result += kTemplateBody;
}
result += kTemplateEnd;
return result;
} catch (e) {
return null;
}
}
}