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
This commit is contained in:
Deepraj Baidya
2024-08-28 17:32:21 +05:30
committed by Deepraj Baidya
parent 4c1b75bf98
commit f5c49d4ac9
6 changed files with 115 additions and 14 deletions

View File

@ -1,13 +1,23 @@
import 'package:apidash/models/models.dart';
import 'package:apidash/consts.dart';
import 'package:apidash/models/models.dart';
import 'package:apidash/utils/utils.dart' show getNewUuid;
import 'c/curl.dart';
import 'csharp/http_client.dart';
import 'csharp/rest_sharp.dart';
import 'dart/http.dart';
import 'dart/dio.dart';
import 'dart/http.dart';
import 'go/http.dart';
import 'java/async_http_client.dart';
import 'java/httpclient.dart';
import 'java/okhttp.dart';
import 'java/unirest.dart';
import 'js/axios.dart';
import 'js/fetch.dart';
import 'julia/http.dart';
import 'kotlin/okhttp.dart';
import 'others/curl.dart';
import 'others/har.dart';
import 'php/curl.dart';
import 'php/guzzle.dart';
import 'php/http_plug.dart';
@ -19,15 +29,7 @@ import 'rust/actix.dart';
import 'rust/curl_rust.dart';
import 'rust/reqwest.dart';
import 'rust/ureq.dart';
import 'js/axios.dart';
import 'js/fetch.dart';
import 'others/har.dart';
import 'others/curl.dart';
import 'julia/http.dart';
import 'java/unirest.dart';
import 'java/okhttp.dart';
import 'java/async_http_client.dart';
import 'java/httpclient.dart';
import 'swift/urlsession.dart';
class Codegen {
String? getCode(
@ -98,6 +100,8 @@ class Codegen {
return RustReqwestCodeGen().getCode(rM);
case CodegenLanguage.rustUreq:
return RustUreqCodeGen().getCode(rM, boundary: boundary);
case CodegenLanguage.swiftUrlsession:
return SwiftURLSessionCodeGen().getCode(rM);
case CodegenLanguage.phpGuzzle:
return PhpGuzzleCodeGen().getCode(rM);
case CodegenLanguage.phpCurl:

View File

@ -0,0 +1,94 @@
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;
}
}
}