Skip to content
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

Add cloud function/job calls and user password reset. #43

Merged
merged 46 commits into from
Jan 4, 2021
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
f0f4809
Add cloud function/job calls and user password reset.
cbaker6 Dec 29, 2020
b23edca
Fixed bug. Make sure the right encoders are always used
cbaker6 Dec 30, 2020
4a5822a
Add results response for Cloud Code
cbaker6 Dec 30, 2020
9552ae1
Clean up docs
cbaker6 Dec 30, 2020
e33fc27
Fix Password Reset error. Add playgrounds example
cbaker6 Dec 30, 2020
374b7b6
Fix CloudCode server response error
cbaker6 Dec 30, 2020
8200cf0
Add Cloud function/job error tests
cbaker6 Dec 30, 2020
f261ef3
Merge remote-tracking branch 'refs/remotes/origin/main'
cbaker6 Dec 30, 2020
2e2a45b
Improve server error responses (established priority of errors).
cbaker6 Dec 30, 2020
9843145
Bug fix: User logout was calling incorrect endpoint for server
cbaker6 Dec 30, 2020
676cce2
Clean up docs
cbaker6 Dec 31, 2020
d120749
Added direct calls to Users and Installations endpoints. Added reques…
cbaker6 Dec 31, 2020
2903c3d
Fixed URL error
cbaker6 Dec 31, 2020
5814335
Bump codecov
cbaker6 Dec 31, 2020
f1d820d
Update Sources/ParseSwift/Types/ParseFile.swift
cbaker6 Dec 31, 2020
95d9b59
Update Sources/ParseSwift/Types/ParseFile.swift
cbaker6 Dec 31, 2020
4ca7b3d
Update Sources/ParseSwift/Types/ParseFile.swift
cbaker6 Dec 31, 2020
40c93bb
Resolve review, fix playground project
cbaker6 Dec 31, 2020
24c66d9
Fix backwards compatability with Swift < 5.3. Add a build to CI for S…
cbaker6 Dec 31, 2020
6c370b6
make Swift 5.2 build go after others
cbaker6 Dec 31, 2020
ab827fd
make other CI builds go after watchOS build since it never tests
cbaker6 Dec 31, 2020
bad1648
Add LocallyIdentifiable protocol
cbaker6 Dec 31, 2020
d79984f
wip
cbaker6 Dec 31, 2020
5ebb087
Improved batch and encoder
cbaker6 Jan 1, 2021
c4122ef
Remove json encoder from ParseEncoder
cbaker6 Jan 1, 2021
b5a8cfa
Reduce codecov
cbaker6 Jan 1, 2021
509885a
Update .codecov.yml
cbaker6 Jan 1, 2021
42c2080
clean up
cbaker6 Jan 1, 2021
cfa3110
Merge remote-tracking branch 'refs/remotes/origin/cloudCode'
cbaker6 Jan 1, 2021
9a95280
Improve LocallyIdentifiable protocol, change file structure of project
cbaker6 Jan 1, 2021
2c31d59
Save for later: ParseObject with localID, but doesn't work. This will…
cbaker6 Jan 1, 2021
f8566e8
cleaned up code
cbaker6 Jan 2, 2021
56906d3
Switch to localId
cbaker6 Jan 2, 2021
f1de7e4
Batch in waves of 50 by default.
cbaker6 Jan 2, 2021
616c11c
Update Sources/ParseSwift/Objects/ParseObject.swift
cbaker6 Jan 3, 2021
9dedf81
Update Sources/ParseSwift/Objects/ParseObject.swift
cbaker6 Jan 3, 2021
b0ce82f
Update Sources/ParseSwift/Objects/ParseObject.swift
cbaker6 Jan 3, 2021
7def6db
Update Sources/ParseSwift/Objects/ParseInstallation.swift
cbaker6 Jan 3, 2021
1859921
Update Sources/ParseSwift/Objects/ParseInstallation.swift
cbaker6 Jan 3, 2021
75aa62b
Update Sources/ParseSwift/Objects/ParseInstallation.swift
cbaker6 Jan 3, 2021
e50e129
Update Sources/ParseSwift/Objects/ParseInstallation.swift
cbaker6 Jan 3, 2021
323f428
Update Sources/ParseSwift/Objects/ParseUser.swift
cbaker6 Jan 3, 2021
306b219
Update Sources/ParseSwift/Objects/ParseUser.swift
cbaker6 Jan 3, 2021
f305e5b
Update Sources/ParseSwift/Objects/ParseUser.swift
cbaker6 Jan 3, 2021
59eb3fb
Update Sources/ParseSwift/Objects/ParseObject.swift
cbaker6 Jan 3, 2021
5241554
Update Sources/ParseSwift/Objects/ParseUser.swift
cbaker6 Jan 3, 2021
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
2 changes: 1 addition & 1 deletion .codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ coverage:
changes: false
project:
default:
target: 72
target: 77
comment:
require_changes: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
//: [Previous](@previous)

import PlaygroundSupport
import Foundation
import ParseSwift

PlaygroundPage.current.needsIndefiniteExecution = true
initializeParse()

//: Create your own ValueTyped ParseCloud type
struct Cloud: ParseCloud {
//: These are required for Object
var functionJobName: String

//: If your cloud function takes arguments, they can be passed by creating properties
//var argument1: [String: Int] = ["test": 5]
}

/*: Assuming you have the Cloud Function named "hello" on your parse-server:
// main.js
Parse.Cloud.define('hello', async () => {
return 'Hello world!';
});
*/
let cloud = Cloud(functionJobName: "hello")

cloud.callFunction { result in
switch result {
case .success(let response):
print("Response from cloud function: \(response)")
case .failure(let error):
assertionFailure("Error calling cloud function: \(error)")
}
}

//: Jobs can be run the same way by using the method `callJob()`

//: [Next](@next)
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ User.current?.save { results in
case .success(let updatedUser):
print("Successfully save myCustomKey to ParseServer: \(updatedUser)")
case .failure(let error):
assertionFailure("Failed to update user: \(error)")
print("Failed to update user: \(error)")
}
}

Expand All @@ -44,7 +44,7 @@ do {
try User.logout()
print("Successfully logged out")
} catch let error {
assertionFailure("Error logging out: \(error)")
print("Error logging out: \(error)")
}

/*: Login - asynchronously - Performs work on background
Expand All @@ -64,7 +64,7 @@ User.login(username: "hello", password: "world") { results in
print("Successfully logged in as user: \(user)")

case .failure(let error):
assertionFailure("Error logging in: \(error)")
print("Error logging in: \(error)")
}
}

Expand All @@ -73,7 +73,23 @@ do {
try User.logout()
print("Successfully logged out")
} catch let error {
assertionFailure("Error logging out: \(error)")
print("Error logging out: \(error)")
}

//: Password Reset Request - synchronously
do {
try User.verificationEmailRequest(email: "hello@parse.org")
print("Successfully requested verification email be sent")
} catch let error {
print("Error requesting verification email be sent: \(error)")
}

//: Password Reset Request - synchronously
do {
try User.passwordReset(email: "hello@parse.org")
print("Successfully requested password reset")
} catch let error {
print("Error requesting password reset: \(error)")
}

//: Another way to sign up
Expand All @@ -88,7 +104,7 @@ newUser.signup { result in
print("Parse signup successful: \(user)")

case .failure(let error):
assertionFailure("Error logging in: \(error)")
print("Error logging in: \(error)")
}
}

Expand Down
1 change: 0 additions & 1 deletion ParseSwift.playground/contents.xcplayground
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,5 @@
<page name='6 - Installation'/>
<page name='7 - GeoPoint'/>
<page name='8 - Pointers'/>
<page name='9 - Files'/>
</pages>
</playground>
38 changes: 28 additions & 10 deletions ParseSwift.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,13 @@
912C9BDC24D3011F009947C3 /* ParseSwift_tvOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 912C9BDA24D3011F009947C3 /* ParseSwift_tvOS.h */; settings = {ATTRIBUTES = (Public, ); }; };
912C9BE024D302B0009947C3 /* Parse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A82B7EE1F254B820063D731 /* Parse.swift */; };
912C9BFD24D302B2009947C3 /* Parse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A82B7EE1F254B820063D731 /* Parse.swift */; };
916786E2259B7DDA00BB5B4E /* ParseCloud.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916786E1259B7DDA00BB5B4E /* ParseCloud.swift */; };
916786E3259B7DDA00BB5B4E /* ParseCloud.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916786E1259B7DDA00BB5B4E /* ParseCloud.swift */; };
916786E4259B7DDA00BB5B4E /* ParseCloud.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916786E1259B7DDA00BB5B4E /* ParseCloud.swift */; };
916786E5259B7DDA00BB5B4E /* ParseCloud.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916786E1259B7DDA00BB5B4E /* ParseCloud.swift */; };
91678706259BC5D400BB5B4E /* ParseCloudTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916786EF259BC59600BB5B4E /* ParseCloudTests.swift */; };
91678710259BC5D600BB5B4E /* ParseCloudTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916786EF259BC59600BB5B4E /* ParseCloudTests.swift */; };
9167871A259BC5D600BB5B4E /* ParseCloudTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916786EF259BC59600BB5B4E /* ParseCloudTests.swift */; };
9194657824F16E330070296B /* ACLTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9194657724F16E330070296B /* ACLTests.swift */; };
F971F4F624DE381A006CB79B /* ParseEncoderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F971F4F524DE381A006CB79B /* ParseEncoderTests.swift */; };
F97B45CE24D9C6F200F4A88B /* ParseCoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = F97B45B424D9C6F200F4A88B /* ParseCoding.swift */; };
Expand Down Expand Up @@ -353,6 +360,8 @@
912C9BDA24D3011F009947C3 /* ParseSwift_tvOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ParseSwift_tvOS.h; sourceTree = "<group>"; };
912C9BDB24D3011F009947C3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
9158916A256A07DD0024BE9A /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
916786E1259B7DDA00BB5B4E /* ParseCloud.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseCloud.swift; sourceTree = "<group>"; };
916786EF259BC59600BB5B4E /* ParseCloudTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseCloudTests.swift; sourceTree = "<group>"; };
9194657724F16E330070296B /* ACLTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ACLTests.swift; sourceTree = "<group>"; };
F971F4F524DE381A006CB79B /* ParseEncoderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseEncoderTests.swift; sourceTree = "<group>"; };
F97B45B424D9C6F200F4A88B /* ParseCoding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ParseCoding.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -503,18 +512,19 @@
children = (
4AA8076D1F794C1C008CD551 /* Info.plist */,
9194657724F16E330070296B /* ACLTests.swift */,
705726ED2592C91C00F0ADD5 /* HashTests.swift */,
911DB12D24C4837E0027F3C7 /* APICommandTests.swift */,
705726ED2592C91C00F0ADD5 /* HashTests.swift */,
4AA8076E1F794C1C008CD551 /* KeychainStoreTests.swift */,
916786EF259BC59600BB5B4E /* ParseCloudTests.swift */,
F971F4F524DE381A006CB79B /* ParseEncoderTests.swift */,
705A99F8259807F900B3547F /* ParseFileManagerTests.swift */,
705727882593FF8000F0ADD5 /* ParseFileTests.swift */,
70BC0B32251903D1001556DB /* ParseGeoPointTests.swift */,
70110D5B2506ED0E0091CC1D /* ParseInstallationTests.swift */,
70C7DC2024D20F190050419B /* ParseObjectBatchTests.swift */,
911DB13524C4FC100027F3C7 /* ParseObjectTests.swift */,
70CE1D882545BF730018D572 /* ParsePointerTests.swift */,
70C7DC1F24D20F180050419B /* ParseQueryTests.swift */,
705727882593FF8000F0ADD5 /* ParseFileTests.swift */,
705A99F8259807F900B3547F /* ParseFileManagerTests.swift */,
70C7DC1D24D20E530050419B /* ParseUserTests.swift */,
7FFF552A2217E729007C3B4E /* AnyCodableTests */,
911DB12A24C3F7260027F3C7 /* NetworkMocking */,
Expand Down Expand Up @@ -564,8 +574,8 @@
F97B45C924D9C6F200F4A88B /* API */,
F97B45B324D9C6F200F4A88B /* Coding */,
F97B463F24D9C78B00F4A88B /* Mutation Operations */,
F97B45C324D9C6F200F4A88B /* Object Protocols */,
F97B45BA24D9C6F200F4A88B /* Parse Types */,
F97B45C324D9C6F200F4A88B /* Objects */,
F97B45BA24D9C6F200F4A88B /* Types */,
F97B45CB24D9C6F200F4A88B /* Storage */,
4A82B7EE1F254B820063D731 /* Parse.swift */,
70110D51250680140091CC1D /* ParseConstants.swift */,
Expand Down Expand Up @@ -598,10 +608,10 @@
children = (
708D035125215F9B00646C70 /* Deletable.swift */,
F97B45C524D9C6F200F4A88B /* Fetchable.swift */,
705A9A2E25991C1400B3547F /* Fileable.swift */,
70BC988F252A5B5C00FF3074 /* Objectable.swift */,
F97B45C824D9C6F200F4A88B /* Queryable.swift */,
F97B45C724D9C6F200F4A88B /* Savable.swift */,
705A9A2E25991C1400B3547F /* Fileable.swift */,
);
path = Protocols;
sourceTree = "<group>";
Expand Down Expand Up @@ -693,29 +703,30 @@
path = Coding;
sourceTree = "<group>";
};
F97B45BA24D9C6F200F4A88B /* Parse Types */ = {
F97B45BA24D9C6F200F4A88B /* Types */ = {
isa = PBXGroup;
children = (
F97B45C024D9C6F200F4A88B /* ParseACL.swift */,
916786E1259B7DDA00BB5B4E /* ParseCloud.swift */,
F97B45BF24D9C6F200F4A88B /* ParseError.swift */,
F97B45C124D9C6F200F4A88B /* ParseFile.swift */,
F97B45BC24D9C6F200F4A88B /* ParseGeoPoint.swift */,
F97B45BE24D9C6F200F4A88B /* Pointer.swift */,
F97B45BB24D9C6F200F4A88B /* Query.swift */,
70110D5D250849B30091CC1D /* Internal */,
);
path = "Parse Types";
path = Types;
sourceTree = "<group>";
};
F97B45C324D9C6F200F4A88B /* Object Protocols */ = {
F97B45C324D9C6F200F4A88B /* Objects */ = {
isa = PBXGroup;
children = (
70BDA2B2250536FF00FC2237 /* ParseInstallation.swift */,
F97B45C624D9C6F200F4A88B /* ParseObject.swift */,
F97B45C424D9C6F200F4A88B /* ParseUser.swift */,
70110D5E25084AF80091CC1D /* Protocols */,
);
path = "Object Protocols";
path = Objects;
sourceTree = "<group>";
};
F97B45C924D9C6F200F4A88B /* API */ = {
Expand Down Expand Up @@ -1152,6 +1163,7 @@
buildActionMask = 2147483647;
files = (
F97B463724D9C74400F4A88B /* Responses.swift in Sources */,
916786E2259B7DDA00BB5B4E /* ParseCloud.swift in Sources */,
F97B461624D9C6F200F4A88B /* Queryable.swift in Sources */,
F97B45DA24D9C6F200F4A88B /* Extensions.swift in Sources */,
F97B465F24D9C7B500F4A88B /* KeychainStore.swift in Sources */,
Expand Down Expand Up @@ -1209,6 +1221,7 @@
705727B12593FF8800F0ADD5 /* ParseFileTests.swift in Sources */,
70BC0B33251903D1001556DB /* ParseGeoPointTests.swift in Sources */,
705A99F9259807F900B3547F /* ParseFileManagerTests.swift in Sources */,
91678706259BC5D400BB5B4E /* ParseCloudTests.swift in Sources */,
7FFF552E2217E72A007C3B4E /* AnyEncodableTests.swift in Sources */,
7FFF55302217E72A007C3B4E /* AnyDecodableTests.swift in Sources */,
70C7DC2224D20F190050419B /* ParseObjectBatchTests.swift in Sources */,
Expand All @@ -1228,6 +1241,7 @@
buildActionMask = 2147483647;
files = (
F97B463824D9C74400F4A88B /* Responses.swift in Sources */,
916786E3259B7DDA00BB5B4E /* ParseCloud.swift in Sources */,
F97B461724D9C6F200F4A88B /* Queryable.swift in Sources */,
F97B45DB24D9C6F200F4A88B /* Extensions.swift in Sources */,
F97B466024D9C7B500F4A88B /* KeychainStore.swift in Sources */,
Expand Down Expand Up @@ -1294,6 +1308,7 @@
705727BC2593FF8C00F0ADD5 /* ParseFileTests.swift in Sources */,
709B984F2556ECAA00507778 /* AnyCodableTests.swift in Sources */,
705A99FB259807F900B3547F /* ParseFileManagerTests.swift in Sources */,
9167871A259BC5D600BB5B4E /* ParseCloudTests.swift in Sources */,
709B98592556ECAA00507778 /* MockURLResponse.swift in Sources */,
709B98522556ECAA00507778 /* ParseUserTests.swift in Sources */,
709B984E2556ECAA00507778 /* ParseGeoPointTests.swift in Sources */,
Expand All @@ -1320,6 +1335,7 @@
705727BB2593FF8B00F0ADD5 /* ParseFileTests.swift in Sources */,
70F2E2BD254F283000B2EA5C /* AnyDecodableTests.swift in Sources */,
705A99FA259807F900B3547F /* ParseFileManagerTests.swift in Sources */,
91678710259BC5D600BB5B4E /* ParseCloudTests.swift in Sources */,
70F2E2C1254F283000B2EA5C /* AnyCodableTests.swift in Sources */,
70F2E2B3254F283000B2EA5C /* ParseUserTests.swift in Sources */,
70F2E2C0254F283000B2EA5C /* MockURLResponse.swift in Sources */,
Expand All @@ -1339,6 +1355,7 @@
buildActionMask = 2147483647;
files = (
F97B45D524D9C6F200F4A88B /* AnyDecodable.swift in Sources */,
916786E5259B7DDA00BB5B4E /* ParseCloud.swift in Sources */,
F97B45E924D9C6F200F4A88B /* Query.swift in Sources */,
F97B463624D9C74400F4A88B /* URLSession+extensions.swift in Sources */,
F97B460524D9C6F200F4A88B /* NoBody.swift in Sources */,
Expand Down Expand Up @@ -1389,6 +1406,7 @@
buildActionMask = 2147483647;
files = (
F97B45D424D9C6F200F4A88B /* AnyDecodable.swift in Sources */,
916786E4259B7DDA00BB5B4E /* ParseCloud.swift in Sources */,
F97B45E824D9C6F200F4A88B /* Query.swift in Sources */,
F97B463524D9C74400F4A88B /* URLSession+extensions.swift in Sources */,
F97B460424D9C6F200F4A88B /* NoBody.swift in Sources */,
Expand Down
25 changes: 17 additions & 8 deletions Sources/ParseSwift/API/API+Commands.swift
Original file line number Diff line number Diff line change
Expand Up @@ -280,13 +280,19 @@ internal extension API {
}
urlRequest.httpBody = bodyData.encoded
} else {
guard let bodyData = try? ParseCoding
.parseEncoder()
.encode(urlBody) else {
if (urlBody as? ParseCloud) != nil {
guard let bodyData = try? ParseCoding.parseEncoder().encode(urlBody) else {
return .failure(ParseError(code: .unknownError,
message: "couldn't encode body \(urlBody)"))
message: "couldn't encode body \(urlBody)"))
}
urlRequest.httpBody = bodyData
} else {
guard let bodyData = try? ParseCoding.jsonEncoder().encode(urlBody) else {
return .failure(ParseError(code: .unknownError,
message: "couldn't encode body \(urlBody)"))
}
urlRequest.httpBody = bodyData
}
urlRequest.httpBody = bodyData
}
}
urlRequest.httpMethod = method.rawValue
Expand Down Expand Up @@ -381,7 +387,7 @@ internal extension API.Command {
}

private static func updateCommand<T>(_ object: T) -> API.Command<T, T> where T: ParseObject {
let mapper = { (data: Data) -> T in
let mapper = { (data) -> T in
try ParseCoding.jsonDecoder().decode(UpdateResponse.self, from: data).apply(to: object)
}
return API.Command<T, T>(method: .PUT,
Expand Down Expand Up @@ -551,12 +557,15 @@ extension API.Command where T: ParseObject {
}
}

//This has been disabled, looking into getting it working in the future.
//It's only needed for sending batches of childObjects which currently isn't being used.
/*
// MARK: Batch - Child Objects
extension API.Command where T: Encodable {

internal var data: Data? {
guard let body = body else { return nil }
return try? ParseCoding.parseEncoder().encode(body)
return try? ParseCoding.jsonEncoder().encode(body)
}

static func batch(commands: [API.Command<T, PointerType>]) -> RESTBatchCommandTypeEncodable<T> {
Expand Down Expand Up @@ -603,4 +612,4 @@ extension API.Command where T: Encodable {
let batchCommand = BatchCommand(requests: commands)
return RESTBatchCommandTypeEncodable<T>(method: .POST, path: .batch, body: batchCommand, mapper: mapper)
}
} // swiftlint:disable:this file_length
}*/ // swiftlint:disable:this file_length
29 changes: 25 additions & 4 deletions Sources/ParseSwift/API/API.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,17 @@ public struct API {
case batch
case objects(className: String)
case object(className: String, objectId: String)
case users
case user(objectId: String)
case installations
case installation(objectId: String)
case login
case signup
case logout
case file(fileName: String)
case passwordReset
case verificationEmailRequest
case functions(name: String)
case jobs(name: String)
case any(String)

var urlComponent: String {
Expand All @@ -32,14 +39,28 @@ public struct API {
return "/classes/\(className)"
case .object(let className, let objectId):
return "/classes/\(className)/\(objectId)"
case .users:
return "/users"
case .user(let objectId):
return "/users/\(objectId)"
case .installations:
return "/installations"
case .installation(let objectId):
return "/installations/\(objectId)"
case .login:
return "/login"
case .signup:
return "/users"
case .logout:
return "/users/logout"
return "/logout"
case .file(let fileName):
return "/files/\(fileName)"
case .passwordReset:
return "/requestPasswordReset"
case .verificationEmailRequest:
return "/verificationEmailRequest"
case .functions(name: let name):
return "/functions/\(name)"
case .jobs(name: let name):
return "/jobs/\(name)"
case .any(let path):
return path
}
Expand Down
10 changes: 10 additions & 0 deletions Sources/ParseSwift/API/Responses.swift
Original file line number Diff line number Diff line change
Expand Up @@ -134,3 +134,13 @@ internal struct FileUploadResponse: Decodable {
return file
}
}

// MARK: AnyResultResponse
internal struct AnyResultResponse: Codable {
let result: AnyCodable?
}

// MARK: AnyResultsResponse
internal struct AnyResultsResponse: Codable {
let results: AnyCodable?
}
Loading