Files
swift-hvac-toolbox/Sources/ApiController/Extensions/FeetOfHead.swift
Michael Housh a44cc6975d
Some checks failed
CI / ubuntu (push) Failing after 7m22s
CI / macOS (debug, 16.2) (push) Has been cancelled
CI / macOS (release, 16.2) (push) Has been cancelled
feat: Adds psi to feet of head conversion.
2025-03-07 16:27:03 -05:00

39 lines
1.1 KiB
Swift

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