Skip to content
This repository was archived by the owner on Sep 30, 2020. It is now read-only.

Commit 8ca53e2

Browse files
committed
Initial Swift 3 support
1 parent dd225a8 commit 8ca53e2

16 files changed

+217
-205
lines changed

Cartfile.resolved

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
github "antitypical/Result" "2.1.3"
2-
github "ishkawa/APIKit" "2.0.5"
1+
github "antitypical/Result" "3.0.0"
2+
github "ishkawa/APIKit" "3.0.0-beta.1"

Carthage/Checkouts/APIKit

Submodule APIKit updated 55 files

Example/Example/BatchRequestViewController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ class BatchRequestViewController: UIViewController {
3535

3636
Session.sendRequest(httpRequest) { [weak self] result in
3737
switch result {
38-
case .Success(let subtractAnswer, let multiplyAnswer):
38+
case .success(let subtractAnswer, let multiplyAnswer):
3939
self?.subtractAnswerLabel.text = "\(subtractAnswer)"
4040
self?.multiplyAnswerLabel.text = "\(multiplyAnswer)"
4141

42-
case .Failure(let error):
42+
case .failure(let error):
4343
self?.subtractAnswerLabel.text = "?"
4444
self?.multiplyAnswerLabel.text = "?"
4545
self?.showAlertWithError(error)

Example/Example/SingleRequestViewController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ class SingleRequestViewController: UIViewController {
4242

4343
Session.sendRequest(httpRequest) { [weak self] result in
4444
switch result {
45-
case .Success(let answer):
45+
case .success(let answer):
4646
self?.subtractAnswerLabel.text = "\(answer)"
4747

48-
case .Failure(let error):
48+
case .failure(let error):
4949
self?.subtractAnswerLabel.text = "?"
5050
self?.showAlertWithError(error)
5151
}

JSONRPCKit.xcodeproj/project.pbxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@
282282
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
283283
PRODUCT_BUNDLE_IDENTIFIER = "-.Tests";
284284
PRODUCT_NAME = "$(TARGET_NAME)";
285-
SWIFT_VERSION = 2.3;
285+
SWIFT_VERSION = 3.0;
286286
};
287287
name = Debug;
288288
};
@@ -295,7 +295,7 @@
295295
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
296296
PRODUCT_BUNDLE_IDENTIFIER = "-.Tests";
297297
PRODUCT_NAME = "$(TARGET_NAME)";
298-
SWIFT_VERSION = 2.3;
298+
SWIFT_VERSION = 3.0;
299299
};
300300
name = Release;
301301
};
@@ -409,7 +409,7 @@
409409
PRODUCT_NAME = "$(PROJECT_NAME)";
410410
SKIP_INSTALL = YES;
411411
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
412-
SWIFT_VERSION = 2.3;
412+
SWIFT_VERSION = 3.0;
413413
};
414414
name = Debug;
415415
};
@@ -428,7 +428,7 @@
428428
PRODUCT_BUNDLE_IDENTIFIER = com.bricklife.ios.JSONRPCKit;
429429
PRODUCT_NAME = "$(PROJECT_NAME)";
430430
SKIP_INSTALL = YES;
431-
SWIFT_VERSION = 2.3;
431+
SWIFT_VERSION = 3.0;
432432
};
433433
name = Release;
434434
};

JSONRPCKit/BatchElementType.swift

Lines changed: 40 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -15,109 +15,114 @@ public protocol BatchElementType {
1515
var request: Request { get }
1616
var version: String { get }
1717
var id: Id? { get }
18-
var body: AnyObject { get }
18+
var body: Any { get }
1919

20-
func responseFromObject(object: AnyObject) throws -> Request.Response
21-
func responseFromBatchObjects(objects: [AnyObject]) throws -> Request.Response
20+
func responseFromObject(_ object: Any) throws -> Request.Response
21+
func responseFromBatchObjects(_ objects: [Any]) throws -> Request.Response
2222

23-
func resultFromObject(object: AnyObject) -> Result<Request.Response, JSONRPCError>
24-
func resultFromBatchObjects(objects: [AnyObject]) -> Result<Request.Response, JSONRPCError>
23+
func resultFromObject(_ object: Any) -> Result<Request.Response, JSONRPCError>
24+
func resultFromBatchObjects(_ objects: [Any]) -> Result<Request.Response, JSONRPCError>
2525
}
2626

2727
public extension BatchElementType {
2828
/// - Throws: JSONRPCError
29-
public func responseFromObject(object: AnyObject) throws -> Request.Response {
29+
public func responseFromObject(_ object: Any) throws -> Request.Response {
3030
switch resultFromObject(object) {
31-
case .Success(let response):
31+
case .success(let response):
3232
return response
3333

34-
case .Failure(let error):
34+
case .failure(let error):
3535
throw error
3636
}
3737
}
3838

3939
/// - Throws: JSONRPCError
40-
public func responseFromBatchObjects(objects: [AnyObject]) throws -> Request.Response {
40+
public func responseFromBatchObjects(_ objects: [Any]) throws -> Request.Response {
4141
switch resultFromBatchObjects(objects) {
42-
case .Success(let response):
42+
case .success(let response):
4343
return response
4444

45-
case .Failure(let error):
45+
case .failure(let error):
4646
throw error
4747
}
4848
}
4949

50-
public func resultFromObject(object: AnyObject) -> Result<Request.Response, JSONRPCError> {
51-
let receivedVersion = object["jsonrpc"] as? String
50+
public func resultFromObject(_ object: Any) -> Result<Request.Response, JSONRPCError> {
51+
guard let dictionary = object as? [String: Any] else {
52+
fatalError("FIXME")
53+
}
54+
55+
let receivedVersion = dictionary["jsonrpc"] as? String
5256
guard version == receivedVersion else {
53-
return .Failure(.UnsupportedVersion(receivedVersion))
57+
return .failure(.unsupportedVersion(receivedVersion))
5458
}
5559

56-
guard id == object["id"].flatMap(Id.init) else {
57-
return .Failure(.ResponseNotFound(requestId: id, object: object))
60+
guard id == dictionary["id"].flatMap(Id.init) else {
61+
return .failure(.responseNotFound(requestId: id, object: dictionary))
5862
}
5963

60-
let resultObject: AnyObject? = object["result"]
61-
let errorObject: AnyObject? = object["error"]
64+
let resultObject = dictionary["result"]
65+
let errorObject = dictionary["error"]
6266

6367
switch (resultObject, errorObject) {
6468
case (nil, let errorObject?):
65-
return .Failure(JSONRPCError(errorObject: errorObject))
69+
return .failure(JSONRPCError(errorObject: errorObject))
6670

6771
case (let resultObject?, nil):
6872
do {
69-
return .Success(try request.responseFromResultObject(resultObject))
73+
return .success(try request.responseFromResultObject(resultObject))
7074
} catch {
71-
return .Failure(.ResultObjectParseError(error))
75+
return .failure(.resultObjectParseError(error))
7276
}
7377

7478
default:
75-
return .Failure(.MissingBothResultAndError(object))
79+
return .failure(.missingBothResultAndError(dictionary))
7680
}
7781
}
7882

79-
public func resultFromBatchObjects(objects: [AnyObject]) -> Result<Request.Response, JSONRPCError> {
83+
public func resultFromBatchObjects(_ objects: [Any]) -> Result<Request.Response, JSONRPCError> {
8084
let matchedObject = objects
85+
.flatMap { $0 as? [String: Any] }
8186
.filter { $0["id"].flatMap(Id.init) == id }
8287
.first
8388

8489
guard let object = matchedObject else {
85-
return .Failure(.ResponseNotFound(requestId: id, object: objects))
90+
return .failure(.responseNotFound(requestId: id, object: objects))
8691
}
8792

8893
return resultFromObject(object)
8994
}
9095
}
9196

9297
public extension BatchElementType where Request.Response == Void {
93-
public func responseFromObject(object: AnyObject) throws -> Request.Response {
98+
public func responseFromObject(_ object: Any) throws -> Request.Response {
9499
return ()
95100
}
96101

97-
public func responseFromBatchObjects(objects: [AnyObject]) throws -> Request.Response {
102+
public func responseFromBatchObjects(_ objects: [Any]) throws -> Request.Response {
98103
return ()
99104
}
100105

101-
public func resultFromObject(object: AnyObject) -> Result<Request.Response, JSONRPCError> {
102-
return .Success()
106+
public func resultFromObject(_ object: Any) -> Result<Request.Response, JSONRPCError> {
107+
return .success()
103108
}
104109

105-
public func resultFromBatchObjects(objects: [AnyObject]) -> Result<Request.Response, JSONRPCError> {
106-
return .Success()
110+
public func resultFromBatchObjects(_ objects: [Any]) -> Result<Request.Response, JSONRPCError> {
111+
return .success()
107112
}
108113
}
109114

110115
public struct BatchElement<Request: RequestType>: BatchElementType {
111116
public let request: Request
112117
public let version: String
113118
public let id: Id?
114-
public let body: AnyObject
119+
public let body: Any
115120

116121
public init(request: Request, version: String, id: Id) {
117122
let id: Id? = request.isNotification ? nil : id
118-
var body: [String: AnyObject] = [
119-
"jsonrpc": version,
120-
"method": request.method,
123+
var body: [String: Any] = [
124+
"jsonrpc": version as Any,
125+
"method": request.method as Any,
121126
]
122127

123128
if let id = id {
@@ -135,7 +140,7 @@ public struct BatchElement<Request: RequestType>: BatchElementType {
135140
self.request = request
136141
self.version = version
137142
self.id = id
138-
self.body = body
143+
self.body = body as Any
139144
}
140145
}
141146

JSONRPCKit/BatchFactory.swift

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,36 +13,36 @@ public final class BatchFactory {
1313
public let version: String
1414
public var idGenerator: IdGeneratorType
1515

16-
private let semaphore = dispatch_semaphore_create(1)
16+
fileprivate let semaphore = DispatchSemaphore(value: 1)
1717

1818
public init(version: String = "2.0", idGenerator: IdGeneratorType = NumberIdGenerator()) {
1919
self.version = version
2020
self.idGenerator = idGenerator
2121
}
2222

23-
public func create<Request: RequestType>(request: Request) -> Batch<Request> {
24-
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
23+
public func create<Request: RequestType>(_ request: Request) -> Batch<Request> {
24+
_ = semaphore.wait(timeout: DispatchTime.distantFuture)
2525
let batchElement = BatchElement(request: request, version: version, id: idGenerator.next())
26-
dispatch_semaphore_signal(semaphore)
26+
semaphore.signal()
2727

2828
return Batch(batchElement: batchElement)
2929
}
3030

31-
public func create<Request1: RequestType, Request2: RequestType>(request1: Request1, _ request2: Request2) -> Batch2<Request1, Request2> {
32-
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
31+
public func create<Request1: RequestType, Request2: RequestType>(_ request1: Request1, _ request2: Request2) -> Batch2<Request1, Request2> {
32+
_ = semaphore.wait(timeout: DispatchTime.distantFuture)
3333
let batchElement1 = BatchElement(request: request1, version: version, id: idGenerator.next())
3434
let batchElement2 = BatchElement(request: request2, version: version, id: idGenerator.next())
35-
dispatch_semaphore_signal(semaphore)
35+
semaphore.signal()
3636

3737
return Batch2(batchElement1: batchElement1, batchElement2: batchElement2)
3838
}
3939

40-
public func create<Request1: RequestType, Request2: RequestType, Request3: RequestType>(request1: Request1, _ request2: Request2, _ request3: Request3) -> Batch3<Request1, Request2, Request3> {
41-
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
40+
public func create<Request1: RequestType, Request2: RequestType, Request3: RequestType>(_ request1: Request1, _ request2: Request2, _ request3: Request3) -> Batch3<Request1, Request2, Request3> {
41+
_ = semaphore.wait(timeout: DispatchTime.distantFuture)
4242
let batchElement1 = BatchElement(request: request1, version: version, id: idGenerator.next())
4343
let batchElement2 = BatchElement(request: request2, version: version, id: idGenerator.next())
4444
let batchElement3 = BatchElement(request: request3, version: version, id: idGenerator.next())
45-
dispatch_semaphore_signal(semaphore)
45+
semaphore.signal()
4646

4747
return Batch3(batchElement1: batchElement1, batchElement2: batchElement2, batchElement3: batchElement3)
4848
}

0 commit comments

Comments
 (0)