summaryrefslogtreecommitdiffhomepage
path: root/ios/MullvadREST/MullvadAPI/APIRequest/APIRequest.swift
blob: 7810230464cfd98fda39f181ac56ee7fb37571ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//
//  APIRequest.swift
//  MullvadVPN
//
//  Created by Jon Petersson on 2025-02-24.
//  Copyright © 2025 Mullvad VPN AB. All rights reserved.
//

public enum APIRequest: Codable, Sendable {
    case getAddressList(_ retryStrategy: REST.RetryStrategy)
    case getRelayList(_ retryStrategy: REST.RetryStrategy, etag: String?)
    case sendProblemReport(_ retryStrategy: REST.RetryStrategy, problemReportRequest: REST.ProblemReportRequest)

    case createAccount(_ retryStrategy: REST.RetryStrategy)
    case getAccount(_ retryStrategy: REST.RetryStrategy, accountNumber: String)
    case deleteAccount(_ retryStrategy: REST.RetryStrategy, accountNumber: String)

    var name: String {
        switch self {
        case .getAddressList:
            "get-address-list"
        case .getRelayList:
            "get-relay-list"
        case .sendProblemReport:
            "send-problem-report"
        case .createAccount:
            "create-account"
        case .getAccount:
            "get-account"
        case .deleteAccount:
            "delete-account"
        }
    }

    var retryStrategy: REST.RetryStrategy {
        switch self {
        case
            let .getAddressList(strategy),
            let .getRelayList(strategy, _),
            let .sendProblemReport(strategy, _),
            let .createAccount(strategy),
            let .getAccount(strategy, _),
            let .deleteAccount(strategy, _):
            strategy
        }
    }
}

public struct ProxyAPIRequest: Codable, Sendable {
    public let id: UUID
    public let request: APIRequest

    public init(id: UUID, request: APIRequest) {
        self.id = id
        self.request = request
    }
}

public struct ProxyAPIResponse: Codable, Sendable {
    public let data: Data?
    public let error: APIError?
    public let etag: String?

    public init(data: Data?, error: APIError?, etag: String? = nil) {
        self.data = data
        self.error = error
        self.etag = etag
    }
}