diff --git a/CHANGELOG.md b/CHANGELOG.md index c92cacbdc..fa363a8a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ [Full Changelog](https://github.com/parse-community/Parse-Swift/compare/2.0.1...main) * _Contributing to this repo? Add info about your change here to be included in the next release_ +__Improvements__ +- Add static methods for accessing encoders/decoder so developers do not have to create instances to access ([#259](https://github.com/parse-community/Parse-Swift/pull/259)), thanks to [Corey Baker](https://github.com/cbaker6). + ### 2.0.1 [Full Changelog](https://github.com/parse-community/Parse-Swift/compare/2.0.0...2.0.1) diff --git a/Sources/ParseSwift/Coding/Extensions.swift b/Sources/ParseSwift/Coding/Extensions.swift index 79bad4970..0c32fa88e 100644 --- a/Sources/ParseSwift/Coding/Extensions.swift +++ b/Sources/ParseSwift/Coding/Extensions.swift @@ -20,22 +20,42 @@ internal extension Date { // MARK: Coding public extension ParseObject { + /// The Parse encoder is used to JSON encode all `ParseObject`s and /// types in a way meaninful for a Parse Server to consume. - func getEncoder() -> ParseEncoder { + static func getEncoder() -> ParseEncoder { return ParseCoding.parseEncoder() } + /// The Parse encoder is used to JSON encode all `ParseObject`s and + /// types in a way meaninful for a Parse Server to consume. + func getEncoder() -> ParseEncoder { + return Self.getEncoder() + } + /// The JSON encoder setup with the correct `dateEncodingStrategy` /// strategy to send data to a Parse Server. - func getJSONEncoder() -> JSONEncoder { + static func getJSONEncoder() -> JSONEncoder { return ParseCoding.jsonEncoder() } + /// The JSON encoder setup with the correct `dateEncodingStrategy` + /// strategy to send data to a Parse Server. + func getJSONEncoder() -> JSONEncoder { + return Self.getJSONEncoder() + } + /// The JSON decoder setup with the correct `dateDecodingStrategy` /// strategy to decode data from a Parse Server. This encoder is used to decode all data received /// from the server. - func getDecoder() -> JSONDecoder { + static func getDecoder() -> JSONDecoder { ParseCoding.jsonDecoder() } + + /// The JSON decoder setup with the correct `dateDecodingStrategy` + /// strategy to decode data from a Parse Server. This encoder is used to decode all data received + /// from the server. + func getDecoder() -> JSONDecoder { + Self.getDecoder() + } } diff --git a/Tests/ParseSwiftTests/ParseObjectTests.swift b/Tests/ParseSwiftTests/ParseObjectTests.swift index 72c00509f..69a271e96 100644 --- a/Tests/ParseSwiftTests/ParseObjectTests.swift +++ b/Tests/ParseSwiftTests/ParseObjectTests.swift @@ -324,7 +324,7 @@ class ParseObjectTests: XCTestCase { // swiftlint:disable:this type_body_length do { encoded = try ParseCoding.jsonEncoder().encode(scoreOnServer) //Get dates in correct format from ParseDecoding strategy - scoreOnServer = try scoreOnServer.getDecoder().decode(GameScore.self, from: encoded) + scoreOnServer = try GameScore.getDecoder().decode(GameScore.self, from: encoded) } catch { XCTFail("Should encode/decode. Error \(error)") return @@ -992,7 +992,7 @@ class ParseObjectTests: XCTestCase { // swiftlint:disable:this type_body_length scoreOnServer.ACL = nil let encoded: Data! do { - encoded = try scoreOnServer.getEncoder().encode(scoreOnServer, skipKeys: .none) + encoded = try GameScore.getEncoder().encode(scoreOnServer, skipKeys: .none) //Get dates in correct format from ParseDecoding strategy scoreOnServer = try scoreOnServer.getDecoder().decode(GameScore.self, from: encoded) } catch { @@ -1196,7 +1196,7 @@ class ParseObjectTests: XCTestCase { // swiftlint:disable:this type_body_length let encoded: Data! do { - encoded = try scoreOnServer.getJSONEncoder().encode(response) + encoded = try GameScore.getJSONEncoder().encode(response) //Get dates in correct format from ParseDecoding strategy let encodedScoreOnServer = try scoreOnServer.getEncoder().encode(scoreOnServer) scoreOnServer = try scoreOnServer.getDecoder().decode(GameScore.self, from: encodedScoreOnServer)