feat: Adds minimal cli executable and commands.
All checks were successful
CI / Linux Tests (push) Successful in 6m44s

This commit is contained in:
2026-02-07 21:17:29 -05:00
parent 1a38922ac0
commit 291bed28d5
6 changed files with 103 additions and 2 deletions

View File

@@ -0,0 +1,35 @@
import ArgumentParser
import Dependencies
import ManualDClient
struct ConvertCommand: AsyncParsableCommand {
static let configuration = CommandConfiguration(
commandName: "convert",
abstract: "Convert to an equivalent recangular size."
)
@Option(
name: .shortAndLong,
help: "The height"
)
var height: Int
@Argument(
// name: .shortAndLong,
help: "The round size."
)
var roundSize: Int
func run() async throws {
@Dependency(\.manualD) var manualD
let size = try await manualD.rectangularSize(
round: .init(roundSize),
height: .init(height)
)
print("\(size.width) x \(height)")
}
}

View File

@@ -0,0 +1,35 @@
import ArgumentParser
import Dependencies
import ManualDClient
struct SizeCommand: AsyncParsableCommand {
static let configuration = CommandConfiguration(
commandName: "size",
abstract: "Calculate the required size of a duct."
)
@Option(
name: .shortAndLong,
help: "The design friction rate."
)
var frictionRate: Double = 0.06
@Argument(
help: "The required CFM for the duct."
)
var cfm: Int
func run() async throws {
@Dependency(\.manualD) var manualD
let size = try await manualD.ductSize(cfm: cfm, frictionRate: frictionRate)
print(
"""
Calculated: \(size.calculatedSize.string(digits: 2))
Final Size: \(size.finalSize)
Flex Size: \(size.flexSize)
"""
)
}
}