3lvis/Networking

Support for JSONDecoder

aasatt opened this issue ยท 8 comments

With Swift 4 we have JSONDecoder to make Data to our objects. No need to go through array or dictionary body. To use Networking with this it seems we have to turn these results back into JSON data and then pass it into the decoder.

What do you think the best way to get the raw data from the result would be?

I was thinking just a .data parameter along with .arrayBody and .dictionaryBody on the ResultType.Success

Would you be open to something like this?

3lvis commented

Hi Aaron!

Adding .data to the ResultType.Success sounds like the best solution for this. ๐Ÿ‘Œ Go for it!

Can't decide on the best way to implement this.

Do you think it's acceptable to convert back to data on the fly when requested? Or do we need to go as far back as handleJSONRequest where the data is deserialized?

3lvis commented

Made a PR for this, need to add unit tests.

#211

3lvis commented

Hi @aasatt, could you check master and see if it is what you needed?

Best :)

3lvis commented

Added a data accessor to the response that should return the same data returned by URLSession.

let networking = Networking(baseURL: baseURL)
let expectedBody = ["user-agent": "hi mom!"]
networking.headerFields = expectedBody
networking.get("/user-agent") { result in
switch result {
case let .success(response):
XCTAssertEqual(response.data.toStringStringDictionary().debugDescription, expectedBody.debugDescription)
case .failure:
XCTFail()
}
}

3lvis commented

I hope this helps. Let me know if I can help with anything else :)

Didn't get a chance to look at it until now. Looks great! Thank you for this!