Skip to content

Add types to DataParser response #311

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Sources/APIKit/DataParser/FormURLEncodedDataParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ public class FormURLEncodedDataParser: DataParser {
return "application/x-www-form-urlencoded"
}

/// Return `Any` that expresses structure of response.
/// Return `[String: Any]` that expresses structure of response.
/// - Throws: `FormURLEncodedDataParser.Error` when the parser fails to initialize `String` from `Data`.
public func parse(data: Data) throws -> Any {
public func parse(data: Data) throws -> [String: Any] {
guard let string = String(data: data, encoding: encoding) else {
throw Error.cannotGetStringFromData(data)
}
Expand Down
4 changes: 2 additions & 2 deletions Sources/APIKit/DataParser/ProtobufDataParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ public class ProtobufDataParser: DataParser {
return "application/protobuf"
}

/// Return `Any` that expresses structure of Data response.
public func parse(data: Data) throws -> Any {
/// Return `Data` that expresses structure of Data response.
public func parse(data: Data) throws -> Data {
return data
}
}
2 changes: 1 addition & 1 deletion Sources/APIKit/DataParser/StringDataParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class StringDataParser: DataParser {

/// Return `String` that converted from `Data`.
/// - Throws: `StringDataParser.Error` when the parser fails to initialize `String` from `Data`.
public func parse(data: Data) throws -> Any {
public func parse(data: Data) throws -> String {
guard let string = String(data: data, encoding: encoding) else {
throw Error.invalidData(data)
}
Expand Down
2 changes: 1 addition & 1 deletion Sources/APIKit/Request/Request.swift
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ public extension Request {
}

public extension Request where Response == Void {
func response(from object: Any, urlResponse: HTTPURLResponse) throws {
func response(from object: DataParser.Parsed, urlResponse: HTTPURLResponse) throws {
return
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,9 @@ class FormURLEncodedDataParserTests: XCTestCase {
let parser = FormURLEncodedDataParser(encoding: .utf8)

let object = try parser.parse(data: data)
let dictionary = object as? [String: String]
XCTAssertEqual(dictionary?["foo"], "1")
XCTAssertEqual(dictionary?["bar"], "2")
XCTAssertEqual(dictionary?["baz"], "3")
XCTAssertEqual(object["foo"] as? String, "1")
XCTAssertEqual(object["bar"] as? String, "2")
XCTAssertEqual(object["baz"] as? String, "3")
}

func testInvalidString() {
Expand Down
14 changes: 13 additions & 1 deletion Tests/APIKitTests/DataParserType/JSONDataParserTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class JSONDataParserTests: XCTestCase {
XCTAssertEqual(parser.contentType, "application/json")
}

func testJSONSuccess() throws {
func testDictionaryJSONSuccess() throws {
let string = "{\"foo\": 1, \"bar\": 2, \"baz\": 3}"
let data = string.data(using: .utf8, allowLossyConversion: false)!
let parser = JSONDataParser(readingOptions: [])
Expand All @@ -19,4 +19,16 @@ class JSONDataParserTests: XCTestCase {
XCTAssertEqual(dictionary?["bar"], 2)
XCTAssertEqual(dictionary?["baz"], 3)
}

func testArrayJSONSuccess() throws {
let string = "[1, 2, 3]"
let data = string.data(using: .utf8, allowLossyConversion: false)!
let parser = JSONDataParser(readingOptions: [])

let object = try parser.parse(data: data)
let array = object as? [Int]
XCTAssertEqual(array?[0], 1)
XCTAssertEqual(array?[1], 2)
XCTAssertEqual(array?[2], 3)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class ProtobufDataParserTests: XCTestCase {
let data = try XCTUnwrap("data".data(using: .utf8))
let parser = ProtobufDataParser()

let object = try XCTUnwrap(try parser.parse(data: data) as? Data)
let object = try parser.parse(data: data)
let string = String(data: object, encoding: .utf8)
XCTAssertEqual(string, "data")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class StringDataParserTests: XCTestCase {
let parser = StringDataParser(encoding: .utf8)

let object = try parser.parse(data: data)
XCTAssertEqual(object as? String, string)
XCTAssertEqual(object, string)
}

func testInvalidString() {
Expand Down