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