Newer
Older
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import ComposableArchitecture
import Foundation
import XCTestDynamicOverlay
import XXMessengerClient
public struct AppDependencies {
public var dbManager: DBManager
public var messenger: Messenger
public var authHandler: AuthCallbackHandler
public var backupStorage: BackupStorage
public var mainQueue: AnySchedulerOf<DispatchQueue>
public var bgQueue: AnySchedulerOf<DispatchQueue>
public var now: () -> Date
public var sendMessage: SendMessage
public var sendImage: SendImage
public var messageListener: MessageListenerHandler
public var receiveFileHandler: ReceiveFileHandler
public var log: Logger
public var loadData: URLDataLoader
}
extension AppDependencies {
public static func live() -> AppDependencies {
let dbManager = DBManager.live()
let messengerEnv = MessengerEnvironment.live()
let messenger = Messenger.live(messengerEnv)
let now: () -> Date = Date.init
return AppDependencies(
dbManager: dbManager,
messenger: messenger,
authHandler: .live(
messenger: messenger,
handleRequest: .live(db: dbManager.getDB, now: now),
handleConfirm: .live(db: dbManager.getDB),
handleReset: .live(db: dbManager.getDB)
),
backupStorage: .onDisk(),
mainQueue: DispatchQueue.main.eraseToAnyScheduler(),
bgQueue: DispatchQueue.global(qos: .background).eraseToAnyScheduler(),
now: now,
sendMessage: .live(
messenger: messenger,
db: dbManager.getDB,
now: now
),
sendImage: .live(
messenger: messenger,
db: dbManager.getDB,
now: now
),
messageListener: .live(
messenger: messenger,
db: dbManager.getDB
),
receiveFileHandler: .live(
messenger: messenger,
db: dbManager.getDB,
now: now
),
log: .live(),
loadData: .live
)
}
public static let unimplemented = AppDependencies(
dbManager: .unimplemented,
messenger: .unimplemented,
authHandler: .unimplemented,
backupStorage: .unimplemented,
mainQueue: .unimplemented,
bgQueue: .unimplemented,
now: XCTestDynamicOverlay.unimplemented(
"\(Self.self)",
placeholder: Date(timeIntervalSince1970: 0)
),
sendMessage: .unimplemented,
sendImage: .unimplemented,
messageListener: .unimplemented,
receiveFileHandler: .unimplemented,
log: .unimplemented,
loadData: .unimplemented
)
}
private enum AppDependenciesKey: DependencyKey {
static let liveValue: AppDependencies = .live()
static let testValue: AppDependencies = .unimplemented
}
extension DependencyValues {
get { self[AppDependenciesKey.self] }
set { self[AppDependenciesKey.self] = newValue }
}
}