From 5c802862c628b0b9e73de13f0aaadf925faacd1f Mon Sep 17 00:00:00 2001
From: Nikhil <nikhilljatt@gmail.com>
Date: Sun, 23 Mar 2025 05:45:20 +0530
Subject: [PATCH 1/3] fixed swift

---
 lib/codegen/swift/urlsession.dart | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/lib/codegen/swift/urlsession.dart b/lib/codegen/swift/urlsession.dart
index 25cce35a6..44d3d7d94 100644
--- a/lib/codegen/swift/urlsession.dart
+++ b/lib/codegen/swift/urlsession.dart
@@ -67,9 +67,13 @@ request.httpBody = try! multipartFormData.encode()
 """;
 
   final String kTemplateEnd = """
+let semaphore = DispatchSemaphore(value: 0) 
+
 let task = URLSession.shared.dataTask(with: request) { data, response, error in 
+    defer { semaphore.signal() }  
+
     if let error = error {
-        print("Error: (error.localizedDescription)")
+        print("Error: \\(error.localizedDescription)")
         return
     }
     guard let data = data else {
@@ -77,12 +81,16 @@ let task = URLSession.shared.dataTask(with: request) { data, response, error in
         return
     }
     if let responseString = String(data: data, encoding: .utf8) {
-        print("Response: (responseString)")
+        print("Response: \\(responseString)")
     }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
+
   String? getCode(HttpRequestModel requestModel) {
     try {
       String result = kTemplateStart;
@@ -145,7 +153,7 @@ task.resume()
       var headers = requestModel.enabledHeadersMap;
       if (requestModel.hasFormData) {
         headers.putIfAbsent("Content-Type",
-            () => "multipart/form-data; boundary=(boundary.stringValue)");
+            () => "multipart/form-data; boundary=\\(boundary.stringValue)");
       } else if (requestModel.hasJsonData || requestModel.hasTextData) {
         headers.putIfAbsent(
             kHeaderContentType, () => requestModel.bodyContentType.header);

From 7aa489ddbbc693ce9c613a283f3cad8a37478d09 Mon Sep 17 00:00:00 2001
From: Ashita Prasad <ashitaprasad92@gmail.com>
Date: Sun, 23 Mar 2025 14:52:41 +0530
Subject: [PATCH 2/3] remove skip: true

---
 test/codegen/swift_urlsession_test.dart | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/test/codegen/swift_urlsession_test.dart b/test/codegen/swift_urlsession_test.dart
index d99983bbb..060a6e23e 100644
--- a/test/codegen/swift_urlsession_test.dart
+++ b/test/codegen/swift_urlsession_test.dart
@@ -326,7 +326,6 @@ task.resume()
             expectedCode);
       });
     },
-    skip: true,
   );
 
   group(
@@ -381,7 +380,6 @@ task.resume()
             expectedCode);
       });
     },
-    skip: true,
   );
 
   group(
@@ -972,7 +970,6 @@ task.resume()
             expectedCode);
       });
     },
-    skip: true,
   );
 
   group(
@@ -1010,7 +1007,6 @@ task.resume()
             expectedCode);
       });
     },
-    skip: true,
   );
 
   group(
@@ -1048,7 +1044,6 @@ task.resume()
             expectedCode);
       });
     },
-    skip: true,
   );
 
   group(
@@ -1111,6 +1106,5 @@ task.resume()
             expectedCode);
       });
     },
-    skip: true,
   );
 }

From d0383b62558f356c55a0e49b77bff2b4d0e2f490 Mon Sep 17 00:00:00 2001
From: Nikhil <nikhilljatt@gmail.com>
Date: Sat, 29 Mar 2025 01:31:58 +0530
Subject: [PATCH 3/3] tests and fixed done.

---
 lib/codegen/swift/urlsession.dart       |   61 +-
 test/codegen/swift_urlsession_test.dart | 1249 ++++++++++++++---------
 2 files changed, 795 insertions(+), 515 deletions(-)

diff --git a/lib/codegen/swift/urlsession.dart b/lib/codegen/swift/urlsession.dart
index 44d3d7d94..015d19afe 100644
--- a/lib/codegen/swift/urlsession.dart
+++ b/lib/codegen/swift/urlsession.dart
@@ -37,14 +37,16 @@ let multipartFormData = try! MultipartFormData(boundary: boundary) {
 ''';
 
   final String kTemplateJsonData = '''
-let parameters = "{{jsonData}}"
-let postData = parameters.data(using: .utf8)
+let postData = """
+{{jsonData}}
+""".data(using: .utf8)
 
 ''';
 
   final String kTemplateTextData = '''
-let parameters = "{{textData}}"
-let postData = parameters.data(using: .utf8)
+let postData = """
+{{textData}}
+""".data(using: .utf8)
 
 ''';
 
@@ -61,8 +63,12 @@ request.addValue("{{value}}", forHTTPHeaderField: "{{header}}")
 
 """;
 
-  final String kTemplateBody = """
+  final String kTemplateFormDataBody = """
 request.httpBody = try! multipartFormData.encode()
+""";
+
+  final String kTemplateJsonTextBody = """
+request.httpBody = postData
 
 """;
 
@@ -95,20 +101,17 @@ semaphore.wait()
     try {
       String result = kTemplateStart;
 
-      if (requestModel.hasFormData) {
-        result += kTemplateFormDataImport;
-      }
-
-      var rec =
-          getValidRequestUri(requestModel.url, requestModel.enabledParams);
+      var rec = getValidRequestUri(requestModel.url, requestModel.enabledParams);
       Uri? uri = rec.$1;
 
       if (requestModel.hasFormData) {
+        result += kTemplateFormDataImport;
+        
         var formDataList = requestModel.formDataMapList.map((param) {
           if (param['type'] == 'file') {
             final filePath = param['value'] as String;
             final fileName = path.basename(filePath);
-            final fileExtension =
+            final fileExtension = 
                 path.extension(fileName).toLowerCase().replaceFirst('.', '');
             return {
               'type': 'file',
@@ -130,17 +133,19 @@ semaphore.wait()
         result += templateFormData.render({
           "formData": formDataList,
         });
-      } else if (requestModel.hasJsonData) {
+      } 
+      // Handle JSON data
+      else if (requestModel.hasJsonData) {
         var templateJsonData = jj.Template(kTemplateJsonData);
         result += templateJsonData.render({
-          "jsonData":
-              requestModel.body!.replaceAll('"', '\\"').replaceAll('\n', '\\n'),
-        });
-      } else if (requestModel.hasTextData) {
+          "jsonData": requestModel.body!
+                    });
+      } 
+      // Handle text data
+      else if (requestModel.hasTextData) {
         var templateTextData = jj.Template(kTemplateTextData);
         result += templateTextData.render({
-          "textData":
-              requestModel.body!.replaceAll('"', '\\"').replaceAll('\n', '\\n'),
+          "textData": requestModel.body!
         });
       }
 
@@ -152,19 +157,21 @@ semaphore.wait()
 
       var headers = requestModel.enabledHeadersMap;
       if (requestModel.hasFormData) {
-        headers.putIfAbsent("Content-Type",
-            () => "multipart/form-data; boundary=\\(boundary.stringValue)");
-      } else if (requestModel.hasJsonData || requestModel.hasTextData) {
-        headers.putIfAbsent(
-            kHeaderContentType, () => requestModel.bodyContentType.header);
-      }
+        headers['Content-Type'] = 
+            "multipart/form-data; boundary=\\(boundary.stringValue)";
+      } else if(requestModel.hasJsonData||requestModel.hasTextData){
+        headers['Content-Type'] = 'application/json';
+    }
+
       if (headers.isNotEmpty) {
         var templateHeader = jj.Template(kTemplateHeaders);
         result += templateHeader.render({"headers": headers});
       }
 
-      if (requestModel.hasFormData || requestModel.hasBody) {
-        result += kTemplateBody;
+      if (requestModel.hasFormData) {
+        result += kTemplateFormDataBody;
+      } else if (requestModel.hasJsonData || requestModel.hasTextData) {
+        result += kTemplateJsonTextBody;
       }
 
       result += kTemplateEnd;
diff --git a/test/codegen/swift_urlsession_test.dart b/test/codegen/swift_urlsession_test.dart
index 060a6e23e..c7d1bf8c1 100644
--- a/test/codegen/swift_urlsession_test.dart
+++ b/test/codegen/swift_urlsession_test.dart
@@ -16,16 +16,29 @@ void main() {
         const expectedCode = r"""
 import Foundation
 
-var request = URLRequest(url: URL(string: "https://api.apidash.dev")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev")!)
 request.httpMethod = "GET"
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -41,16 +54,29 @@ task.resume()
         const expectedCode = r"""
 import Foundation
 
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/country/data?code=US")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/country/data?code=US")!)
 request.httpMethod = "GET"
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -66,16 +92,29 @@ task.resume()
         const expectedCode = r"""
 import Foundation
 
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/country/data?code=IND")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/country/data?code=IND")!)
 request.httpMethod = "GET"
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -91,16 +130,29 @@ task.resume()
         const expectedCode = r"""
 import Foundation
 
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/humanize/social?num=8700000&digits=3&system=SS&add_space=true&trailing_zeros=true")!)
 request.httpMethod = "GET"
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -116,19 +168,32 @@ task.resume()
         const expectedCode = r"""
 import Foundation
 
-var request = URLRequest(url: URL(string: "https://api.github.com/repos/foss42/apidash")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.github.com/repos/foss42/apidash")!)
 request.httpMethod = "GET"
 
 request.addValue("Test Agent", forHTTPHeaderField: "User-Agent")
 
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -144,19 +209,32 @@ task.resume()
         const expectedCode = r"""
 import Foundation
 
-var request = URLRequest(url: URL(string: "https://api.github.com/repos/foss42/apidash?raw=true")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.github.com/repos/foss42/apidash?raw=true")!)
 request.httpMethod = "GET"
 
 request.addValue("Test Agent", forHTTPHeaderField: "User-Agent")
 
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -172,16 +250,29 @@ task.resume()
         const expectedCode = r"""
 import Foundation
 
-var request = URLRequest(url: URL(string: "https://api.apidash.dev")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev")!)
 request.httpMethod = "GET"
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -194,21 +285,35 @@ task.resume()
       });
 
       test('GET 8', () {
-        const expectedCode = r"""import Foundation
+        const expectedCode = r"""
+import Foundation
 
-var request = URLRequest(url: URL(string: "https://api.github.com/repos/foss42/apidash?raw=true")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.github.com/repos/foss42/apidash?raw=true")!)
 request.httpMethod = "GET"
 
 request.addValue("Test Agent", forHTTPHeaderField: "User-Agent")
 
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -224,16 +329,29 @@ task.resume()
         const expectedCode = r"""
 import Foundation
 
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/humanize/social?num=8700000&add_space=true")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/humanize/social?num=8700000&add_space=true")!)
 request.httpMethod = "GET"
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -249,19 +367,32 @@ task.resume()
         const expectedCode = r"""
 import Foundation
 
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/humanize/social")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/humanize/social")!)
 request.httpMethod = "GET"
 
 request.addValue("Test Agent", forHTTPHeaderField: "User-Agent")
 
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -277,19 +408,32 @@ task.resume()
         const expectedCode = r"""
 import Foundation
 
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/humanize/social?num=8700000&digits=3")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/humanize/social?num=8700000&digits=3")!)
 request.httpMethod = "GET"
 
 request.addValue("Test Agent", forHTTPHeaderField: "User-Agent")
 
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -305,16 +449,29 @@ task.resume()
         const expectedCode = r"""
 import Foundation
 
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/humanize/social")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/humanize/social")!)
 request.httpMethod = "GET"
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -332,18 +489,32 @@ task.resume()
     'HTTPVerb.head',
     () {
       test('HEAD 1', () {
-        const expectedCode = r"""import Foundation
+        const expectedCode = r"""
+import Foundation
 
-var request = URLRequest(url: URL(string: "https://api.apidash.dev")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev")!)
 request.httpMethod = "HEAD"
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -359,16 +530,29 @@ task.resume()
         const expectedCode = r"""
 import Foundation
 
-var request = URLRequest(url: URL(string: "https://api.apidash.dev")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev")!)
 request.httpMethod = "HEAD"
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -386,27 +570,43 @@ task.resume()
     "HTTPVerb.post",
     () {
       test('POST 1', () {
-        const expectedCode = r"""
+        const expectedCode = r'''
 import Foundation
 
-let parameters = "{\n\"text\": \"I LOVE Flutter\"\n}"
-let postData = parameters.data(using: .utf8)
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower")!,timeoutInterval: Double.infinity)
+let postData = """
+{
+"text": "I LOVE Flutter"
+}
+""".data(using: .utf8)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower")!)
 request.httpMethod = "POST"
 
-request.addValue("text/plain", forHTTPHeaderField: "Content-Type")
+request.addValue("application/json", forHTTPHeaderField: "Content-Type")
 
 request.httpBody = postData
 
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
-""";
+
+semaphore.wait()
+''';
 
         expect(
             codeGen.getCode(
@@ -417,27 +617,48 @@ task.resume()
             expectedCode);
       });
       test('POST 2', () {
-        const expectedCode = r"""
+        const expectedCode = r'''
 import Foundation
 
-let parameters = "{\n\"text\": \"I LOVE Flutter\",\n\"flag\": null,\n\"male\": true,\n\"female\": false,\n\"no\": 1.2,\n\"arr\": [\"null\", \"true\", \"false\", null]\n}"
-let postData = parameters.data(using: .utf8)
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower")!,timeoutInterval: Double.infinity)
+let postData = """
+{
+"text": "I LOVE Flutter",
+"flag": null,
+"male": true,
+"female": false,
+"no": 1.2,
+"arr": ["null", "true", "false", null]
+}
+""".data(using: .utf8)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower")!)
 request.httpMethod = "POST"
 
 request.addValue("application/json", forHTTPHeaderField: "Content-Type")
 
 request.httpBody = postData
 
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
-""";
+
+semaphore.wait()
+''';
 
         expect(
             codeGen.getCode(
@@ -449,12 +670,15 @@ task.resume()
       });
 
       test('POST 3', () {
-        const expectedCode = r"""
+        const expectedCode = r'''
 import Foundation
 
-let parameters = "{\n\"text\": \"I LOVE Flutter\"\n}"
-let postData = parameters.data(using: .utf8)
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower")!,timeoutInterval: Double.infinity)
+let postData = """
+{
+"text": "I LOVE Flutter"
+}
+""".data(using: .utf8)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower")!)
 request.httpMethod = "POST"
 
 request.addValue("Test Agent", forHTTPHeaderField: "User-Agent")
@@ -463,15 +687,28 @@ request.addValue("application/json", forHTTPHeaderField: "Content-Type")
 
 request.httpBody = postData
 
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
-""";
+
+semaphore.wait()
+''';
 
         expect(
             codeGen.getCode(
@@ -486,70 +723,63 @@ task.resume()
         const expectedCode = r"""
 import Foundation
 
-let parameters = [
-
-  [
-    "key": "text",
-    "value": "API",
-    "type": "text"
-  ],
-
-  [
-    "key": "sep",
-    "value": "|",
-    "type": "text"
-  ],
-
-  [
-    "key": "times",
-    "value": "3",
-    "type": "text"
-  ],
-
-] as [[String: Any]]
-let boundary = "Boundary-\(UUID().uuidString)"
-var body = Data()
-var error: Error? = nil
-for param in parameters {
-  if param["disabled"] as? Bool == true { continue }
-  let paramName = param["key"] as! String
-  body.append("--\(boundary)\r\n".data(using: .utf8)!)
-  body.append("Content-Disposition:form-data; name=\"\(paramName)\"".data(using: .utf8)!)
-  if let contentType = param["contentType"] as? String {
-    body.append("\r\nContent-Type: \(contentType)".data(using: .utf8)!)
-  }
-  let paramType = param["type"] as! String
-  if paramType == "text" {
-    let paramValue = param["value"] as! String
-    body.append("\r\n\r\n\(paramValue)\r\n".data(using: .utf8)!)
-  } else if paramType == "file" {
-    let paramSrc = param["value"] as! String
-    let fileURL = URL(fileURLWithPath: paramSrc)
-    if let fileContent = try? Data(contentsOf: fileURL) {
-      body.append("; filename=\"\(paramSrc)\"\r\n".data(using: .utf8)!)
-      body.append("Content-Type: \"content-type header\"\r\n\r\n".data(using: .utf8)!)
-      body.append(fileContent)
-      body.append("\r\n".data(using: .utf8)!)
-    }
-  }
+import MultipartFormData
+
+let boundary = try! Boundary()
+let multipartFormData = try! MultipartFormData(boundary: boundary) {
+
+    
+    Subpart {
+        ContentDisposition(name: "text")
+    } body: {
+        Data("API".utf8)
+    }
+    
+
+    
+    Subpart {
+        ContentDisposition(name: "sep")
+    } body: {
+        Data("|".utf8)
+    }
+    
+
+    
+    Subpart {
+        ContentDisposition(name: "times")
+    } body: {
+        Data("3".utf8)
+    }
+    
+
 }
-body.append("--\(boundary)--\r\n".data(using: .utf8)!)
-let postData = body
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/form")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/form")!)
 request.httpMethod = "POST"
 
-request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
+request.addValue("multipart/form-data; boundary=\(boundary.stringValue)", forHTTPHeaderField: "Content-Type")
 
-request.httpBody = postData
+request.httpBody = try! multipartFormData.encode()
+let semaphore = DispatchSemaphore(value: 0) 
 
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -562,74 +792,68 @@ task.resume()
       });
 
       test('POST 5', () {
-        const expectedCode = r"""import Foundation
-
-let parameters = [
-
-  [
-    "key": "text",
-    "value": "API",
-    "type": "text"
-  ],
-
-  [
-    "key": "sep",
-    "value": "|",
-    "type": "text"
-  ],
-
-  [
-    "key": "times",
-    "value": "3",
-    "type": "text"
-  ],
-
-] as [[String: Any]]
-let boundary = "Boundary-\(UUID().uuidString)"
-var body = Data()
-var error: Error? = nil
-for param in parameters {
-  if param["disabled"] as? Bool == true { continue }
-  let paramName = param["key"] as! String
-  body.append("--\(boundary)\r\n".data(using: .utf8)!)
-  body.append("Content-Disposition:form-data; name=\"\(paramName)\"".data(using: .utf8)!)
-  if let contentType = param["contentType"] as? String {
-    body.append("\r\nContent-Type: \(contentType)".data(using: .utf8)!)
-  }
-  let paramType = param["type"] as! String
-  if paramType == "text" {
-    let paramValue = param["value"] as! String
-    body.append("\r\n\r\n\(paramValue)\r\n".data(using: .utf8)!)
-  } else if paramType == "file" {
-    let paramSrc = param["value"] as! String
-    let fileURL = URL(fileURLWithPath: paramSrc)
-    if let fileContent = try? Data(contentsOf: fileURL) {
-      body.append("; filename=\"\(paramSrc)\"\r\n".data(using: .utf8)!)
-      body.append("Content-Type: \"content-type header\"\r\n\r\n".data(using: .utf8)!)
-      body.append(fileContent)
-      body.append("\r\n".data(using: .utf8)!)
-    }
-  }
+        const expectedCode = r"""
+import Foundation
+
+import MultipartFormData
+
+let boundary = try! Boundary()
+let multipartFormData = try! MultipartFormData(boundary: boundary) {
+
+    
+    Subpart {
+        ContentDisposition(name: "text")
+    } body: {
+        Data("API".utf8)
+    }
+    
+
+    
+    Subpart {
+        ContentDisposition(name: "sep")
+    } body: {
+        Data("|".utf8)
+    }
+    
+
+    
+    Subpart {
+        ContentDisposition(name: "times")
+    } body: {
+        Data("3".utf8)
+    }
+    
+
 }
-body.append("--\(boundary)--\r\n".data(using: .utf8)!)
-let postData = body
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/form")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/form")!)
 request.httpMethod = "POST"
 
 request.addValue("Test Agent", forHTTPHeaderField: "User-Agent")
 
-request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
+request.addValue("multipart/form-data; boundary=\(boundary.stringValue)", forHTTPHeaderField: "Content-Type")
 
-request.httpBody = postData
+request.httpBody = try! multipartFormData.encode()
+let semaphore = DispatchSemaphore(value: 0) 
 
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -641,68 +865,60 @@ task.resume()
             expectedCode);
       });
       test('POST 6', () {
-        const expectedCode = r"""
+        const expectedCode = r'''
 import Foundation
 
-let parameters = [
-
-  [
-    "key": "token",
-    "value": "xyz",
-    "type": "text"
-  ],
-
-  [
-    "key": "imfile",
-    "value": "/Documents/up/1.png",
-    "type": "file"
-  ],
-
-] as [[String: Any]]
-let boundary = "Boundary-\(UUID().uuidString)"
-var body = Data()
-var error: Error? = nil
-for param in parameters {
-  if param["disabled"] as? Bool == true { continue }
-  let paramName = param["key"] as! String
-  body.append("--\(boundary)\r\n".data(using: .utf8)!)
-  body.append("Content-Disposition:form-data; name=\"\(paramName)\"".data(using: .utf8)!)
-  if let contentType = param["contentType"] as? String {
-    body.append("\r\nContent-Type: \(contentType)".data(using: .utf8)!)
-  }
-  let paramType = param["type"] as! String
-  if paramType == "text" {
-    let paramValue = param["value"] as! String
-    body.append("\r\n\r\n\(paramValue)\r\n".data(using: .utf8)!)
-  } else if paramType == "file" {
-    let paramSrc = param["value"] as! String
-    let fileURL = URL(fileURLWithPath: paramSrc)
-    if let fileContent = try? Data(contentsOf: fileURL) {
-      body.append("; filename=\"\(paramSrc)\"\r\n".data(using: .utf8)!)
-      body.append("Content-Type: \"content-type header\"\r\n\r\n".data(using: .utf8)!)
-      body.append(fileContent)
-      body.append("\r\n".data(using: .utf8)!)
-    }
-  }
+import MultipartFormData
+
+let boundary = try! Boundary()
+let multipartFormData = try! MultipartFormData(boundary: boundary) {
+
+    
+    Subpart {
+        ContentDisposition(name: "token")
+    } body: {
+        Data("xyz".utf8)
+    }
+    
+
+    
+    try Subpart {
+        ContentDisposition(name: "imfile", filename: "1.png")
+        ContentType(mimeType: MimeType(pathExtension: "png"))
+    } body: {
+        try Data(contentsOf: URL(fileURLWithPath: "/Documents/up/1.png"))
+    }
+    
+
 }
-body.append("--\(boundary)--\r\n".data(using: .utf8)!)
-let postData = body
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/img")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/img")!)
 request.httpMethod = "POST"
 
-request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
+request.addValue("multipart/form-data; boundary=\(boundary.stringValue)", forHTTPHeaderField: "Content-Type")
 
-request.httpBody = postData
+request.httpBody = try! multipartFormData.encode()
+let semaphore = DispatchSemaphore(value: 0) 
 
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
-""";
+
+semaphore.wait()
+''';
 
         expect(
             codeGen.getCode(
@@ -716,64 +932,56 @@ task.resume()
         const expectedCode = r"""
 import Foundation
 
-let parameters = [
-
-  [
-    "key": "token",
-    "value": "xyz",
-    "type": "text"
-  ],
-
-  [
-    "key": "imfile",
-    "value": "/Documents/up/1.png",
-    "type": "file"
-  ],
-
-] as [[String: Any]]
-let boundary = "Boundary-\(UUID().uuidString)"
-var body = Data()
-var error: Error? = nil
-for param in parameters {
-  if param["disabled"] as? Bool == true { continue }
-  let paramName = param["key"] as! String
-  body.append("--\(boundary)\r\n".data(using: .utf8)!)
-  body.append("Content-Disposition:form-data; name=\"\(paramName)\"".data(using: .utf8)!)
-  if let contentType = param["contentType"] as? String {
-    body.append("\r\nContent-Type: \(contentType)".data(using: .utf8)!)
-  }
-  let paramType = param["type"] as! String
-  if paramType == "text" {
-    let paramValue = param["value"] as! String
-    body.append("\r\n\r\n\(paramValue)\r\n".data(using: .utf8)!)
-  } else if paramType == "file" {
-    let paramSrc = param["value"] as! String
-    let fileURL = URL(fileURLWithPath: paramSrc)
-    if let fileContent = try? Data(contentsOf: fileURL) {
-      body.append("; filename=\"\(paramSrc)\"\r\n".data(using: .utf8)!)
-      body.append("Content-Type: \"content-type header\"\r\n\r\n".data(using: .utf8)!)
-      body.append(fileContent)
-      body.append("\r\n".data(using: .utf8)!)
-    }
-  }
+import MultipartFormData
+
+let boundary = try! Boundary()
+let multipartFormData = try! MultipartFormData(boundary: boundary) {
+
+    
+    Subpart {
+        ContentDisposition(name: "token")
+    } body: {
+        Data("xyz".utf8)
+    }
+    
+
+    
+    try Subpart {
+        ContentDisposition(name: "imfile", filename: "1.png")
+        ContentType(mimeType: MimeType(pathExtension: "png"))
+    } body: {
+        try Data(contentsOf: URL(fileURLWithPath: "/Documents/up/1.png"))
+    }
+    
+
 }
-body.append("--\(boundary)--\r\n".data(using: .utf8)!)
-let postData = body
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/img")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/img")!)
 request.httpMethod = "POST"
 
-request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
+request.addValue("multipart/form-data; boundary=\(boundary.stringValue)", forHTTPHeaderField: "Content-Type")
 
-request.httpBody = postData
+request.httpBody = try! multipartFormData.encode()
+let semaphore = DispatchSemaphore(value: 0) 
 
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -788,70 +996,63 @@ task.resume()
         const expectedCode = r"""
 import Foundation
 
-let parameters = [
-
-  [
-    "key": "text",
-    "value": "API",
-    "type": "text"
-  ],
-
-  [
-    "key": "sep",
-    "value": "|",
-    "type": "text"
-  ],
-
-  [
-    "key": "times",
-    "value": "3",
-    "type": "text"
-  ],
-
-] as [[String: Any]]
-let boundary = "Boundary-\(UUID().uuidString)"
-var body = Data()
-var error: Error? = nil
-for param in parameters {
-  if param["disabled"] as? Bool == true { continue }
-  let paramName = param["key"] as! String
-  body.append("--\(boundary)\r\n".data(using: .utf8)!)
-  body.append("Content-Disposition:form-data; name=\"\(paramName)\"".data(using: .utf8)!)
-  if let contentType = param["contentType"] as? String {
-    body.append("\r\nContent-Type: \(contentType)".data(using: .utf8)!)
-  }
-  let paramType = param["type"] as! String
-  if paramType == "text" {
-    let paramValue = param["value"] as! String
-    body.append("\r\n\r\n\(paramValue)\r\n".data(using: .utf8)!)
-  } else if paramType == "file" {
-    let paramSrc = param["value"] as! String
-    let fileURL = URL(fileURLWithPath: paramSrc)
-    if let fileContent = try? Data(contentsOf: fileURL) {
-      body.append("; filename=\"\(paramSrc)\"\r\n".data(using: .utf8)!)
-      body.append("Content-Type: \"content-type header\"\r\n\r\n".data(using: .utf8)!)
-      body.append(fileContent)
-      body.append("\r\n".data(using: .utf8)!)
-    }
-  }
+import MultipartFormData
+
+let boundary = try! Boundary()
+let multipartFormData = try! MultipartFormData(boundary: boundary) {
+
+    
+    Subpart {
+        ContentDisposition(name: "text")
+    } body: {
+        Data("API".utf8)
+    }
+    
+
+    
+    Subpart {
+        ContentDisposition(name: "sep")
+    } body: {
+        Data("|".utf8)
+    }
+    
+
+    
+    Subpart {
+        ContentDisposition(name: "times")
+    } body: {
+        Data("3".utf8)
+    }
+    
+
 }
-body.append("--\(boundary)--\r\n".data(using: .utf8)!)
-let postData = body
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/form?size=2&len=3")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/form?size=2&len=3")!)
 request.httpMethod = "POST"
 
-request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
+request.addValue("multipart/form-data; boundary=\(boundary.stringValue)", forHTTPHeaderField: "Content-Type")
 
-request.httpBody = postData
+request.httpBody = try! multipartFormData.encode()
+let semaphore = DispatchSemaphore(value: 0) 
 
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -866,68 +1067,60 @@ task.resume()
         const expectedCode = r"""
 import Foundation
 
-let parameters = [
-
-  [
-    "key": "token",
-    "value": "xyz",
-    "type": "text"
-  ],
-
-  [
-    "key": "imfile",
-    "value": "/Documents/up/1.png",
-    "type": "file"
-  ],
-
-] as [[String: Any]]
-let boundary = "Boundary-\(UUID().uuidString)"
-var body = Data()
-var error: Error? = nil
-for param in parameters {
-  if param["disabled"] as? Bool == true { continue }
-  let paramName = param["key"] as! String
-  body.append("--\(boundary)\r\n".data(using: .utf8)!)
-  body.append("Content-Disposition:form-data; name=\"\(paramName)\"".data(using: .utf8)!)
-  if let contentType = param["contentType"] as? String {
-    body.append("\r\nContent-Type: \(contentType)".data(using: .utf8)!)
-  }
-  let paramType = param["type"] as! String
-  if paramType == "text" {
-    let paramValue = param["value"] as! String
-    body.append("\r\n\r\n\(paramValue)\r\n".data(using: .utf8)!)
-  } else if paramType == "file" {
-    let paramSrc = param["value"] as! String
-    let fileURL = URL(fileURLWithPath: paramSrc)
-    if let fileContent = try? Data(contentsOf: fileURL) {
-      body.append("; filename=\"\(paramSrc)\"\r\n".data(using: .utf8)!)
-      body.append("Content-Type: \"content-type header\"\r\n\r\n".data(using: .utf8)!)
-      body.append(fileContent)
-      body.append("\r\n".data(using: .utf8)!)
-    }
-  }
+import MultipartFormData
+
+let boundary = try! Boundary()
+let multipartFormData = try! MultipartFormData(boundary: boundary) {
+
+    
+    Subpart {
+        ContentDisposition(name: "token")
+    } body: {
+        Data("xyz".utf8)
+    }
+    
+
+    
+    try Subpart {
+        ContentDisposition(name: "imfile", filename: "1.png")
+        ContentType(mimeType: MimeType(pathExtension: "png"))
+    } body: {
+        try Data(contentsOf: URL(fileURLWithPath: "/Documents/up/1.png"))
+    }
+    
+
 }
-body.append("--\(boundary)--\r\n".data(using: .utf8)!)
-let postData = body
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/img?size=2&len=3")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/img?size=2&len=3")!)
 request.httpMethod = "POST"
 
 request.addValue("Test Agent", forHTTPHeaderField: "User-Agent")
 
 request.addValue("true", forHTTPHeaderField: "Keep-Alive")
 
-request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
+request.addValue("multipart/form-data; boundary=\(boundary.stringValue)", forHTTPHeaderField: "Content-Type")
 
-request.httpBody = postData
+request.httpBody = try! multipartFormData.encode()
+let semaphore = DispatchSemaphore(value: 0) 
 
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
+
+semaphore.wait()
 """;
 
         expect(
@@ -939,27 +1132,43 @@ task.resume()
             expectedCode);
       });
       test('POST 10', () {
-        const expectedCode = r"""
+        const expectedCode = r'''
 import Foundation
 
-let parameters = "{\n\"text\": \"I LOVE Flutter\"\n}"
-let postData = parameters.data(using: .utf8)
-var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower?size=2&len=3")!,timeoutInterval: Double.infinity)
+let postData = """
+{
+"text": "I LOVE Flutter"
+}
+""".data(using: .utf8)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower?size=2&len=3")!)
 request.httpMethod = "POST"
 
-request.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
+request.addValue("application/json", forHTTPHeaderField: "Content-Type")
 
 request.httpBody = postData
 
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
-""";
+
+semaphore.wait()
+''';
 
         expect(
             codeGen.getCode(
@@ -976,27 +1185,44 @@ task.resume()
     'HTTPVerb.put',
     () {
       test('PUT 1', () {
-        const expectedCode = r"""
+        const expectedCode = r'''
 import Foundation
 
-let parameters = "{\n\"name\": \"morpheus\",\n\"job\": \"zion resident\"\n}"
-let postData = parameters.data(using: .utf8)
-var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!,timeoutInterval: Double.infinity)
+let postData = """
+{
+"name": "morpheus",
+"job": "zion resident"
+}
+""".data(using: .utf8)
+var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!)
 request.httpMethod = "PUT"
 
 request.addValue("application/json", forHTTPHeaderField: "Content-Type")
 
 request.httpBody = postData
 
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
-""";
+
+semaphore.wait()
+''';
 
         expect(
             codeGen.getCode(
@@ -1013,27 +1239,44 @@ task.resume()
     'HTTPVerb.patch',
     () {
       test('PATCH 1', () {
-        const expectedCode = r"""
+        const expectedCode = r'''
 import Foundation
 
-let parameters = "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}"
-let postData = parameters.data(using: .utf8)
-var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!,timeoutInterval: Double.infinity)
+let postData = """
+{
+"name": "marfeus",
+"job": "accountant"
+}
+""".data(using: .utf8)
+var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!)
 request.httpMethod = "PATCH"
 
 request.addValue("application/json", forHTTPHeaderField: "Content-Type")
 
 request.httpBody = postData
 
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
-""";
+
+semaphore.wait()
+''';
 
         expect(
             codeGen.getCode(
@@ -1050,20 +1293,33 @@ task.resume()
     'HTTPVerb.delete',
     () {
       test('DELETE 1', () {
-        const expectedCode = r"""
+        const expectedCode = r'''
 import Foundation
 
-var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!,timeoutInterval: Double.infinity)
+var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!)
 request.httpMethod = "DELETE"
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
-""";
+
+semaphore.wait()
+''';
 
         expect(
             codeGen.getCode(
@@ -1075,27 +1331,44 @@ task.resume()
       });
 
       test('DELETE 2', () {
-        const expectedCode = r"""
+        const expectedCode = r'''
 import Foundation
 
-let parameters = "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}"
-let postData = parameters.data(using: .utf8)
-var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!,timeoutInterval: Double.infinity)
+let postData = """
+{
+"name": "marfeus",
+"job": "accountant"
+}
+""".data(using: .utf8)
+var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!)
 request.httpMethod = "DELETE"
 
 request.addValue("application/json", forHTTPHeaderField: "Content-Type")
 
 request.httpBody = postData
 
+let semaphore = DispatchSemaphore(value: 0) 
+
 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)!)
+    defer { semaphore.signal() }  
+
+    if let error = error {
+        print("Error: \(error.localizedDescription)")
+        return
+    }
+    guard let data = data else {
+        print("No data received")
+        return
+    }
+    if let responseString = String(data: data, encoding: .utf8) {
+        print("Response: \(responseString)")
+    }
 }
+
 task.resume()
-""";
+
+semaphore.wait()
+''';
 
         expect(
             codeGen.getCode(