import Dependencies import DependenciesMacros import Logging import SharedModels public extension DependencyValues { var apiController: ApiController { get { self[ApiController.self] } set { self[ApiController.self] = newValue } } } @DependencyClient public struct ApiController: Sendable { public var json: @Sendable (Request) async throws -> (any Encodable)? public func json(_ route: SiteRoute.Api, logger: Logger) async throws -> (any Encodable)? { try await json(.init(route, logger: logger)) } public struct Request: Sendable { public let route: SiteRoute.Api public let logger: Logger public init(_ route: SiteRoute.Api, logger: Logger) { self.route = route self.logger = logger } } } extension ApiController: TestDependencyKey { public static let testValue: ApiController = Self() }