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
}
}
|