Skip to content

Commit 3934a45

Browse files
authored
feat: Static encoders/decoder access (#259)
* Static encoders/decoder * Update CHANGELOG.md
1 parent aeb363f commit 3934a45

File tree

3 files changed

+29
-6
lines changed

3 files changed

+29
-6
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
[Full Changelog](https://github.com/parse-community/Parse-Swift/compare/2.0.1...main)
66
* _Contributing to this repo? Add info about your change here to be included in the next release_
77

8+
__Improvements__
9+
- 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).
10+
811
### 2.0.1
912
[Full Changelog](https://github.com/parse-community/Parse-Swift/compare/2.0.0...2.0.1)
1013

Sources/ParseSwift/Coding/Extensions.swift

+23-3
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,42 @@ internal extension Date {
2020

2121
// MARK: Coding
2222
public extension ParseObject {
23+
2324
/// The Parse encoder is used to JSON encode all `ParseObject`s and
2425
/// types in a way meaninful for a Parse Server to consume.
25-
func getEncoder() -> ParseEncoder {
26+
static func getEncoder() -> ParseEncoder {
2627
return ParseCoding.parseEncoder()
2728
}
2829

30+
/// The Parse encoder is used to JSON encode all `ParseObject`s and
31+
/// types in a way meaninful for a Parse Server to consume.
32+
func getEncoder() -> ParseEncoder {
33+
return Self.getEncoder()
34+
}
35+
2936
/// The JSON encoder setup with the correct `dateEncodingStrategy`
3037
/// strategy to send data to a Parse Server.
31-
func getJSONEncoder() -> JSONEncoder {
38+
static func getJSONEncoder() -> JSONEncoder {
3239
return ParseCoding.jsonEncoder()
3340
}
3441

42+
/// The JSON encoder setup with the correct `dateEncodingStrategy`
43+
/// strategy to send data to a Parse Server.
44+
func getJSONEncoder() -> JSONEncoder {
45+
return Self.getJSONEncoder()
46+
}
47+
3548
/// The JSON decoder setup with the correct `dateDecodingStrategy`
3649
/// strategy to decode data from a Parse Server. This encoder is used to decode all data received
3750
/// from the server.
38-
func getDecoder() -> JSONDecoder {
51+
static func getDecoder() -> JSONDecoder {
3952
ParseCoding.jsonDecoder()
4053
}
54+
55+
/// The JSON decoder setup with the correct `dateDecodingStrategy`
56+
/// strategy to decode data from a Parse Server. This encoder is used to decode all data received
57+
/// from the server.
58+
func getDecoder() -> JSONDecoder {
59+
Self.getDecoder()
60+
}
4161
}

Tests/ParseSwiftTests/ParseObjectTests.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ class ParseObjectTests: XCTestCase { // swiftlint:disable:this type_body_length
324324
do {
325325
encoded = try ParseCoding.jsonEncoder().encode(scoreOnServer)
326326
//Get dates in correct format from ParseDecoding strategy
327-
scoreOnServer = try scoreOnServer.getDecoder().decode(GameScore.self, from: encoded)
327+
scoreOnServer = try GameScore.getDecoder().decode(GameScore.self, from: encoded)
328328
} catch {
329329
XCTFail("Should encode/decode. Error \(error)")
330330
return
@@ -992,7 +992,7 @@ class ParseObjectTests: XCTestCase { // swiftlint:disable:this type_body_length
992992
scoreOnServer.ACL = nil
993993
let encoded: Data!
994994
do {
995-
encoded = try scoreOnServer.getEncoder().encode(scoreOnServer, skipKeys: .none)
995+
encoded = try GameScore.getEncoder().encode(scoreOnServer, skipKeys: .none)
996996
//Get dates in correct format from ParseDecoding strategy
997997
scoreOnServer = try scoreOnServer.getDecoder().decode(GameScore.self, from: encoded)
998998
} catch {
@@ -1196,7 +1196,7 @@ class ParseObjectTests: XCTestCase { // swiftlint:disable:this type_body_length
11961196

11971197
let encoded: Data!
11981198
do {
1199-
encoded = try scoreOnServer.getJSONEncoder().encode(response)
1199+
encoded = try GameScore.getJSONEncoder().encode(response)
12001200
//Get dates in correct format from ParseDecoding strategy
12011201
let encodedScoreOnServer = try scoreOnServer.getEncoder().encode(scoreOnServer)
12021202
scoreOnServer = try scoreOnServer.getDecoder().decode(GameScore.self, from: encodedScoreOnServer)

0 commit comments

Comments
 (0)