40 lines
1014 B
Swift
40 lines
1014 B
Swift
import Dependencies
|
|
import DependenciesMacros
|
|
import Foundation
|
|
import TOMLKit
|
|
|
|
public extension DependencyValues {
|
|
var coders: Coders {
|
|
get { self[Coders.self] }
|
|
set { self[Coders.self] = newValue }
|
|
}
|
|
}
|
|
|
|
@DependencyClient
|
|
public struct Coders: Sendable {
|
|
public var jsonDecoder: @Sendable () -> JSONDecoder = { .init() }
|
|
public var jsonEncoder: @Sendable () -> JSONEncoder = { .init() }
|
|
public var tomlDecoder: @Sendable () -> TOMLDecoder = { .init() }
|
|
public var tomlEncoder: @Sendable () -> TOMLEncoder = { .init() }
|
|
}
|
|
|
|
extension Coders: DependencyKey {
|
|
|
|
public static var testValue: Self { Self() }
|
|
|
|
public static var liveValue: Self {
|
|
.init(
|
|
jsonDecoder: { JSONDecoder() },
|
|
jsonEncoder: { defaultJsonEncoder },
|
|
tomlDecoder: { TOMLDecoder() },
|
|
tomlEncoder: { TOMLEncoder() }
|
|
)
|
|
}
|
|
}
|
|
|
|
private let defaultJsonEncoder: JSONEncoder = {
|
|
var encoder = JSONEncoder()
|
|
encoder.outputFormatting = [.prettyPrinted, .withoutEscapingSlashes]
|
|
return encoder
|
|
}()
|