import Dependencies import Logging import PsychrometricClient import Routes public extension HydronicSystemPressure.Request { func respond(logger: Logger) async throws -> HydronicSystemPressure.Response { @Dependency(\.psychrometricClient) var psychrometricClient try validate() let waterTemperature = DryBulb.fahrenheit(self.waterTemperature ?? 60) let density = try await psychrometricClient.density.water(waterTemperature) let pressure = height * (density.value / 144) + 5 var warnings = [String]() if self.waterTemperature == nil { warnings.append( """ Calculations based on default water temperature of 60°F. """ ) } return .init(pressure: pressure, waterDensity: density, warnings: warnings) } private func validate() throws { guard height > 0 else { throw ValidationError(message: "Height should be greater than 0.") } if let waterTemperature { guard waterTemperature > 32 else { throw ValidationError(message: "Water temperature should be above freezing.") } } } }