feat: Begins work on supporting toml for configuration.

This commit is contained in:
2024-12-09 17:00:52 -05:00
parent a8d35fed37
commit 87390c4b63
14 changed files with 354 additions and 196 deletions

View File

@@ -3,6 +3,8 @@ import DependenciesMacros
import Foundation
import ShellClient
// TODO: Drop support for non-json configuration.
public extension DependencyValues {
var cliClient: CliClient {
get { self[CliClient.self] }
@@ -38,6 +40,7 @@ public struct CliClient: Sendable {
extension CliClient: DependencyKey {
// swiftlint:disable function_body_length
public static func live(
decoder: JSONDecoder = .init(),
encoder: JSONEncoder = .init(),
@@ -55,9 +58,10 @@ extension CliClient: DependencyKey {
var env = env
logger.trace("Loading configuration from: \(url)")
try fileClient.loadFile(url, &env, decoder)
return try .fromEnv(env)
guard let config = try fileClient.loadFile(url, &env, decoder) else {
return try .fromEnv(env)
}
return config
} runCommand: { args, quiet, shell in
@Dependency(\.asyncShellClient) var shellClient
@@ -105,6 +109,8 @@ extension CliClient: DependencyKey {
}
}
// swiftlint:enable function_body_length
public static var liveValue: CliClient {
.live(env: ProcessInfo.processInfo.environment)
}