Skip to content

Commit

Permalink
fix: wrap the headers and query
Browse files Browse the repository at this point in the history
  • Loading branch information
gtokman committed Aug 28, 2024
1 parent ccdd0a9 commit 4b7019e
Show file tree
Hide file tree
Showing 14 changed files with 222 additions and 112 deletions.
2 changes: 2 additions & 0 deletions packages/npm/send/candlefinance-send.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,7 @@ Pod::Spec.new do |s|

load './nitrogen/generated/ios/candlefinance_send+autolinking.rb'
add_nitrogen_files(s)
install_modules_dependencies(s)


end
22 changes: 21 additions & 1 deletion packages/npm/send/example/ios/Podfile.lock
Original file line number Diff line number Diff line change
@@ -1,7 +1,27 @@
PODS:
- boost (1.84.0)
- candlefinance-send (0.3.14):
- DoubleConversion
- glog
- hermes-engine
- NitroModules
- RCT-Folly (= 2024.01.01.00)
- RCTRequired
- RCTTypeSafety
- React-Core
- React-debug
- React-Fabric
- React-featureflags
- React-graphics
- React-ImageManager
- React-NativeModulesApple
- React-RCTFabric
- React-rendererdebug
- React-utils
- ReactCodegen
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- Yoga
- DoubleConversion (1.1.6)
- FBLazyVector (0.75.2)
- fmt (9.1.0)
Expand Down Expand Up @@ -1728,7 +1748,7 @@ EXTERNAL SOURCES:

SPEC CHECKSUMS:
boost: 4cb898d0bf20404aab1850c656dcea009429d6c1
candlefinance-send: ebee403139911cfdc15c7b6dc243bf9dc831e7e5
candlefinance-send: ff2122d1795b0c437050490ae4f8f8af0aa09803
DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5
FBLazyVector: 38bb611218305c3bc61803e287b8a81c6f63b619
fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120
Expand Down
18 changes: 11 additions & 7 deletions packages/npm/send/example/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,20 @@ const App = () => {
baseURL: 'https://itunes.apple.com',
method: 'GET',
path: '/lookup',
queryParameters: {
bundleId: 'com.trycandle.candle',
country: 'US',
query: {
parameters: {
bundleId: 'com.trycandle.candle',
country: 'US',
},
},
body: null,
utf8ContentTypes: ['application/json', 'text/html', 'text/javascript'],
headerParameters: {
'Cache-Control': 'no-cache',
'Content-Type': 'application/json',
'Accept': 'application/json',
header: {
parameters: {
'Cache-Control': 'no-cache',
'Content-Type': 'application/json',
'Accept': 'application/json',
},
},
})
.then((response) => {
Expand Down
17 changes: 9 additions & 8 deletions packages/npm/send/ios/Send.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ extension Request {
}
urlComponents.path = path

if !queryParameters.isEmpty {
urlComponents.queryItems = queryParameters.map { key, value in
if !query.parameters.isEmpty {
urlComponents.queryItems = query.parameters.map { key, value in
URLQueryItem(name: key, value: value)
}
}
Expand All @@ -49,12 +49,12 @@ extension Request {
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = String(describing: method)

for (key, value) in headerParameters {
for (key, value) in header.parameters {
urlRequest.setValue(value, forHTTPHeaderField: key)
}

if let body {
let contentTypeHeader = headerParameters.first(where: { $0.key.caseInsensitiveCompare("Content-Type") == .orderedSame })?.value
let contentTypeHeader = header.parameters.first(where: { $0.key.caseInsensitiveCompare("Content-Type") == .orderedSame })?.value
if bodyIsUTF8(contentTypeHeader: contentTypeHeader, utf8ContentTypes: utf8ContentTypes) {
guard let utf8Body = body.data(using: .utf8) else {
return .failure(.nonUTF8RequestBody)
Expand Down Expand Up @@ -96,7 +96,7 @@ extension Response {
}
self.init(
statusCode: Double(httpURLResponse.statusCode),
headerParameters: headerParameters,
header: Parameters(parameters: headerParameters),
body: body
)
}
Expand Down Expand Up @@ -153,13 +153,14 @@ final class Send: HybridSendSpec {
throw SendError.nonUTF8ResponseBody
}

} catch let decodingError as DecodingError {
} catch let _ as DecodingError {
throw SendError.nonUTF8ResponseBody

} catch let encodingError as EncodingError {
} catch let _ as EncodingError {
throw SendError.nonUTF8ResponseBody

} catch let urlError as URLError {
print(urlError)
switch (urlError.code) {
case .appTransportSecurityRequiresSecureConnection,
.badURL,
Expand Down Expand Up @@ -218,7 +219,7 @@ final class Send: HybridSendSpec {
// NOTE: The only other documented case is `unknown`, but code is not an enum so a default case is required regardless
throw SendError.nonUTF8ResponseBody
}
} catch let error {
} catch _ {
throw SendError.nonUTF8ResponseBody
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ namespace candlefinance_send { class HybridSendSpecCxx; }

// Forward declaration of `Response` to properly resolve imports.
namespace margelo::nitro::send { struct Response; }
// Forward declaration of `Parameters` to properly resolve imports.
namespace margelo::nitro::send { struct Parameters; }
// Forward declaration of `Request` to properly resolve imports.
namespace margelo::nitro::send { struct Request; }
// Forward declaration of `Method` to properly resolve imports.
Expand All @@ -23,6 +25,7 @@ namespace margelo::nitro::send { enum class Method; }
#include <future>
#include "Response.hpp"
#include <NitroModules/PromiseHolder.hpp>
#include "Parameters.hpp"
#include <unordered_map>
#include <string>
#include <optional>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,16 @@
// Forward declarations of C++ defined types
// Forward declaration of `Method` to properly resolve imports.
namespace margelo::nitro::send { enum class Method; }
// Forward declaration of `Parameters` to properly resolve imports.
namespace margelo::nitro::send { struct Parameters; }
// Forward declaration of `Request` to properly resolve imports.
namespace margelo::nitro::send { struct Request; }
// Forward declaration of `Response` to properly resolve imports.
namespace margelo::nitro::send { struct Response; }

// Include C++ defined types
#include "Method.hpp"
#include "Parameters.hpp"
#include "Request.hpp"
#include "Response.hpp"
#include <future>
Expand Down
56 changes: 56 additions & 0 deletions packages/npm/send/nitrogen/generated/ios/swift/Parameters.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
///
/// Parameters.swift
/// Wed Aug 28 2024
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
/// https://github.com/mrousavy/react-native-nitro
/// Copyright © 2024 Marc Rousavy @ Margelo
///

import NitroModules

/**
* Represents an instance of `Parameters`, backed by a C++ struct.
*/
public typealias Parameters = margelo.nitro.send.Parameters

public extension Parameters {
private typealias bridge = margelo.nitro.send.bridge.swift

/**
* Create a new instance of `Parameters`.
*/
init(parameters: Dictionary<String, String>) {
self.init({ () -> bridge.std__unordered_map_std__string__std__string_ in
var map = bridge.create_std__unordered_map_std__string__std__string_(parameters.count)
for (k, v) in parameters {
map[std.string(k)] = std.string(v)
}
return map
}())
}

var parameters: Dictionary<String, String> {
@inline(__always)
get {
return { () -> Dictionary<String, String> in
var dictionary = Dictionary<String, String>(minimumCapacity: self.__parameters.size())
let keys = bridge.get_std__unordered_map_std__string__std__string__keys(self.__parameters)
for key in keys {
let value = self.__parameters[key]
dictionary[String(key)] = String(value!)
}
return dictionary
}()
}
@inline(__always)
set {
self.__parameters = { () -> bridge.std__unordered_map_std__string__std__string_ in
var map = bridge.create_std__unordered_map_std__string__std__string_(newValue.count)
for (k, v) in newValue {
map[std.string(k)] = std.string(v)
}
return map
}()
}
}
}
56 changes: 8 additions & 48 deletions packages/npm/send/nitrogen/generated/ios/swift/Request.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,8 @@ public extension Request {
/**
* Create a new instance of `Request`.
*/
init(baseURL: String, path: String, queryParameters: Dictionary<String, String>, headerParameters: Dictionary<String, String>, method: Method, body: String?, utf8ContentTypes: [String]) {
self.init(std.string(baseURL), std.string(path), { () -> bridge.std__unordered_map_std__string__std__string_ in
var map = bridge.create_std__unordered_map_std__string__std__string_(queryParameters.count)
for (k, v) in queryParameters {
map[std.string(k)] = std.string(v)
}
return map
}(), { () -> bridge.std__unordered_map_std__string__std__string_ in
var map = bridge.create_std__unordered_map_std__string__std__string_(headerParameters.count)
for (k, v) in headerParameters {
map[std.string(k)] = std.string(v)
}
return map
}(), method, { () -> bridge.std__optional_std__string_ in
init(baseURL: String, path: String, query: Parameters, header: Parameters, method: Method, body: String?, utf8ContentTypes: [String]) {
self.init(std.string(baseURL), std.string(path), query, header, method, { () -> bridge.std__optional_std__string_ in
if let actualValue = body {
return bridge.create_std__optional_std__string_(std.string(actualValue))
} else {
Expand Down Expand Up @@ -69,53 +57,25 @@ public extension Request {
}
}

var queryParameters: Dictionary<String, String> {
var query: Parameters {
@inline(__always)
get {
return { () -> Dictionary<String, String> in
var dictionary = Dictionary<String, String>(minimumCapacity: self.__queryParameters.size())
let keys = bridge.get_std__unordered_map_std__string__std__string__keys(self.__queryParameters)
for key in keys {
let value = self.__queryParameters[key]
dictionary[String(key)] = String(value!)
}
return dictionary
}()
return self.__query
}
@inline(__always)
set {
self.__queryParameters = { () -> bridge.std__unordered_map_std__string__std__string_ in
var map = bridge.create_std__unordered_map_std__string__std__string_(newValue.count)
for (k, v) in newValue {
map[std.string(k)] = std.string(v)
}
return map
}()
self.__query = newValue
}
}

var headerParameters: Dictionary<String, String> {
var header: Parameters {
@inline(__always)
get {
return { () -> Dictionary<String, String> in
var dictionary = Dictionary<String, String>(minimumCapacity: self.__headerParameters.size())
let keys = bridge.get_std__unordered_map_std__string__std__string__keys(self.__headerParameters)
for key in keys {
let value = self.__headerParameters[key]
dictionary[String(key)] = String(value!)
}
return dictionary
}()
return self.__header
}
@inline(__always)
set {
self.__headerParameters = { () -> bridge.std__unordered_map_std__string__std__string_ in
var map = bridge.create_std__unordered_map_std__string__std__string_(newValue.count)
for (k, v) in newValue {
map[std.string(k)] = std.string(v)
}
return map
}()
self.__header = newValue
}
}

Expand Down
30 changes: 5 additions & 25 deletions packages/npm/send/nitrogen/generated/ios/swift/Response.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,8 @@ public extension Response {
/**
* Create a new instance of `Response`.
*/
init(statusCode: Double, headerParameters: Dictionary<String, String>, body: String?) {
self.init(statusCode, { () -> bridge.std__unordered_map_std__string__std__string_ in
var map = bridge.create_std__unordered_map_std__string__std__string_(headerParameters.count)
for (k, v) in headerParameters {
map[std.string(k)] = std.string(v)
}
return map
}(), { () -> bridge.std__optional_std__string_ in
init(statusCode: Double, header: Parameters, body: String?) {
self.init(statusCode, header, { () -> bridge.std__optional_std__string_ in
if let actualValue = body {
return bridge.create_std__optional_std__string_(std.string(actualValue))
} else {
Expand All @@ -46,28 +40,14 @@ public extension Response {
}
}

var headerParameters: Dictionary<String, String> {
var header: Parameters {
@inline(__always)
get {
return { () -> Dictionary<String, String> in
var dictionary = Dictionary<String, String>(minimumCapacity: self.__headerParameters.size())
let keys = bridge.get_std__unordered_map_std__string__std__string__keys(self.__headerParameters)
for key in keys {
let value = self.__headerParameters[key]
dictionary[String(key)] = String(value!)
}
return dictionary
}()
return self.__header
}
@inline(__always)
set {
self.__headerParameters = { () -> bridge.std__unordered_map_std__string__std__string_ in
var map = bridge.create_std__unordered_map_std__string__std__string_(newValue.count)
for (k, v) in newValue {
map[std.string(k)] = std.string(v)
}
return map
}()
self.__header = newValue
}
}

Expand Down
Loading

0 comments on commit 4b7019e

Please sign in to comment.