54 lines
1.5 KiB
Swift
54 lines
1.5 KiB
Swift
import Dependencies
|
|
import DependenciesMacros
|
|
import Foundation
|
|
|
|
public extension DependencyValues {
|
|
var dateFormatter: DateFormatterKey {
|
|
get { self[DateFormatterKey.self] }
|
|
set { self[DateFormatterKey.self] = newValue }
|
|
}
|
|
}
|
|
|
|
@DependencyClient
|
|
public struct DateFormatterKey: Sendable {
|
|
public var string: @Sendable (Date?) -> String = { _ in "N/A" }
|
|
}
|
|
|
|
extension DateFormatterKey: DependencyKey {
|
|
public static let testValue = Self()
|
|
|
|
public static var liveValue: DateFormatterKey {
|
|
.init(
|
|
string: { date in
|
|
guard let date else { return "N/A" }
|
|
let formatter = ISO8601DateFormatter()
|
|
formatter.timeZone = TimeZone(identifier: "UTC")
|
|
formatter.formatOptions = [.withFullDate]
|
|
return formatter.string(from: date)
|
|
}
|
|
)
|
|
}
|
|
}
|
|
|
|
// #if hasFeature(RetroactiveAttribute)
|
|
// extension DateFormatter: @retroactive DependencyKey {
|
|
//
|
|
// public static var liveValue: DateFormatter {
|
|
// let formatter = DateFormatter()
|
|
// formatter.dateStyle = .short
|
|
// return formatter
|
|
// }
|
|
// }
|
|
// #else
|
|
// extension DateFormatter: DependencyKey {
|
|
// public static var liveValue: DateFormatter {
|
|
// let formatter = ISO8601DateFormatter()
|
|
// formatter.locale = Locale(identifier: "en_US_POSIX")
|
|
// // formatter.dateFormat = "mm/dd/yyyy"
|
|
// formatter.formatOptions = [.withFullDate]
|
|
// formatter.timeZone = TimeZone(identifier: "UTC")
|
|
// return formatter
|
|
// }
|
|
// }
|
|
// #endif
|