Skip to content
Snippets Groups Projects
Commit 461c4734 authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Add AppDependencies to AppCore library

parent 83b4f971
No related branches found
No related tags found
2 merge requests!126Migrate example app to ComposableArchitecture's ReducerProtocol,!102Release 1.0.0
......@@ -82,6 +82,7 @@ let package = Package(
name: "AppCoreTests",
dependencies: [
.target(name: "AppCore"),
.product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
.product(name: "CustomDump", package: "swift-custom-dump"),
],
swiftSettings: swiftSettings
......
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 {
public var appDependencies: AppDependencies {
get { self[AppDependenciesKey.self] }
set { self[AppDependenciesKey.self] = newValue }
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment