Skip to content

Commit b014089

Browse files
authored
Merge pull request #311 from ishkawa/feature/typed-data-parser
Add types to DataParser response
2 parents 691c781 + c8ca8b3 commit b014089

File tree

8 files changed

+24
-13
lines changed

8 files changed

+24
-13
lines changed

Sources/APIKit/DataParser/FormURLEncodedDataParser.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ public class FormURLEncodedDataParser: DataParser {
2121
return "application/x-www-form-urlencoded"
2222
}
2323

24-
/// Return `Any` that expresses structure of response.
24+
/// Return `[String: Any]` that expresses structure of response.
2525
/// - Throws: `FormURLEncodedDataParser.Error` when the parser fails to initialize `String` from `Data`.
26-
public func parse(data: Data) throws -> Any {
26+
public func parse(data: Data) throws -> [String: Any] {
2727
guard let string = String(data: data, encoding: encoding) else {
2828
throw Error.cannotGetStringFromData(data)
2929
}

Sources/APIKit/DataParser/ProtobufDataParser.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ public class ProtobufDataParser: DataParser {
1212
return "application/protobuf"
1313
}
1414

15-
/// Return `Any` that expresses structure of Data response.
16-
public func parse(data: Data) throws -> Any {
15+
/// Return `Data` that expresses structure of Data response.
16+
public func parse(data: Data) throws -> Data {
1717
return data
1818
}
1919
}

Sources/APIKit/DataParser/StringDataParser.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class StringDataParser: DataParser {
2323

2424
/// Return `String` that converted from `Data`.
2525
/// - Throws: `StringDataParser.Error` when the parser fails to initialize `String` from `Data`.
26-
public func parse(data: Data) throws -> Any {
26+
public func parse(data: Data) throws -> String {
2727
guard let string = String(data: data, encoding: encoding) else {
2828
throw Error.invalidData(data)
2929
}

Sources/APIKit/Request/Request.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public extension Request {
144144
}
145145

146146
public extension Request where Response == Void {
147-
func response(from object: Any, urlResponse: HTTPURLResponse) throws {
147+
func response(from object: DataParser.Parsed, urlResponse: HTTPURLResponse) throws {
148148
return
149149
}
150150
}

Tests/APIKitTests/DataParserType/FormURLEncodedDataParserTests.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@ class FormURLEncodedDataParserTests: XCTestCase {
1414
let parser = FormURLEncodedDataParser(encoding: .utf8)
1515

1616
let object = try parser.parse(data: data)
17-
let dictionary = object as? [String: String]
18-
XCTAssertEqual(dictionary?["foo"], "1")
19-
XCTAssertEqual(dictionary?["bar"], "2")
20-
XCTAssertEqual(dictionary?["baz"], "3")
17+
XCTAssertEqual(object["foo"] as? String, "1")
18+
XCTAssertEqual(object["bar"] as? String, "2")
19+
XCTAssertEqual(object["baz"] as? String, "3")
2120
}
2221

2322
func testInvalidString() {

Tests/APIKitTests/DataParserType/JSONDataParserTests.swift

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class JSONDataParserTests: XCTestCase {
88
XCTAssertEqual(parser.contentType, "application/json")
99
}
1010

11-
func testJSONSuccess() throws {
11+
func testDictionaryJSONSuccess() throws {
1212
let string = "{\"foo\": 1, \"bar\": 2, \"baz\": 3}"
1313
let data = string.data(using: .utf8, allowLossyConversion: false)!
1414
let parser = JSONDataParser(readingOptions: [])
@@ -19,4 +19,16 @@ class JSONDataParserTests: XCTestCase {
1919
XCTAssertEqual(dictionary?["bar"], 2)
2020
XCTAssertEqual(dictionary?["baz"], 3)
2121
}
22+
23+
func testArrayJSONSuccess() throws {
24+
let string = "[1, 2, 3]"
25+
let data = string.data(using: .utf8, allowLossyConversion: false)!
26+
let parser = JSONDataParser(readingOptions: [])
27+
28+
let object = try parser.parse(data: data)
29+
let array = object as? [Int]
30+
XCTAssertEqual(array?[0], 1)
31+
XCTAssertEqual(array?[1], 2)
32+
XCTAssertEqual(array?[2], 3)
33+
}
2234
}

Tests/APIKitTests/DataParserType/ProtobufDataParserTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class ProtobufDataParserTests: XCTestCase {
1212
let data = try XCTUnwrap("data".data(using: .utf8))
1313
let parser = ProtobufDataParser()
1414

15-
let object = try XCTUnwrap(try parser.parse(data: data) as? Data)
15+
let object = try parser.parse(data: data)
1616
let string = String(data: object, encoding: .utf8)
1717
XCTAssertEqual(string, "data")
1818
}

Tests/APIKitTests/DataParserType/StringDataParserTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class StringDataParserTests: XCTestCase {
1414
let parser = StringDataParser(encoding: .utf8)
1515

1616
let object = try parser.parse(data: data)
17-
XCTAssertEqual(object as? String, string)
17+
XCTAssertEqual(object, string)
1818
}
1919

2020
func testInvalidString() {

0 commit comments

Comments
 (0)