From e07df0e426be3680629469aebf630c4c910137f5 Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Tue, 11 Jun 2024 07:46:47 -0400 Subject: [PATCH] feat: Conforming types to Sendable --- Package.swift | 21 ++++++++++++++----- Sources/EstimatedPressureDependency/Key.swift | 10 ++++----- .../BudgetedPercentEnvelope.swift | 2 +- .../SharedModels/EquipmentMeasurement.swift | 12 +++++------ Sources/SharedModels/EquipmentMetadata.swift | 6 +++--- Sources/SharedModels/Flagged.swift | 20 +++++++++--------- .../SharedModels/HelperTypes/Percentage.swift | 2 +- .../SharedModels/HelperTypes/Positive.swift | 1 + Sources/SharedModels/PlenumDimension.swift | 4 ++-- Sources/SharedModels/RatedEnvelope.swift | 2 +- Sources/SharedModels/Velocity.swift | 2 +- 11 files changed, 47 insertions(+), 35 deletions(-) diff --git a/Package.swift b/Package.swift index b7fbc25..8aa8156 100644 --- a/Package.swift +++ b/Package.swift @@ -46,7 +46,8 @@ let package = Package( .product(name: "ComposableArchitecture", package: "swift-composable-architecture"), .product(name: "DependenciesAdditions", package: "swift-dependencies-additions"), .product(name: "TCAExtras", package: "swift-tca-extras") - ] + ], + swiftSettings: settings ), .target( name: "EstimatedPressureDependency", @@ -61,15 +62,20 @@ let package = Package( dependencies: [ "SharedModels", "Styleguide" - ] + ], + swiftSettings: settings + ), + .target( + name: "SharedModels", + swiftSettings: settings ), - .target(name: "SharedModels"), .target( name: "Styleguide", dependencies: [ "SharedModels", .product(name: "ComposableArchitecture", package: "swift-composable-architecture"), - ] + ], + swiftSettings: settings ), .testTarget( name: "EstimatedPressureTests", @@ -89,7 +95,12 @@ let package = Package( .product(name: "DependenciesAdditions", package: "swift-dependencies-additions"), .product(name: "TCAExtras", package: "swift-tca-extras") - ] + ], + swiftSettings: settings ), ] ) + +let settings: [SwiftSetting] = [ + .enableExperimentalFeature("StrictConcurrency") +] diff --git a/Sources/EstimatedPressureDependency/Key.swift b/Sources/EstimatedPressureDependency/Key.swift index fe4d256..9745249 100644 --- a/Sources/EstimatedPressureDependency/Key.swift +++ b/Sources/EstimatedPressureDependency/Key.swift @@ -12,12 +12,12 @@ extension DependencyValues { } @DependencyClient -public struct EstimatedPressureDependency { +public struct EstimatedPressureDependency: Sendable { - public var estimatedAirflow: (EstimatedAirflowRequest) async throws -> Positive - public var estimatedPressure: (EstimatedPressureRequest) async throws -> Positive + public var estimatedAirflow: @Sendable (EstimatedAirflowRequest) async throws -> Positive + public var estimatedPressure: @Sendable (EstimatedPressureRequest) async throws -> Positive - public struct EstimatedPressureRequest: Equatable { + public struct EstimatedPressureRequest: Equatable, Sendable { public let existingPressure: Positive public let existingAirflow: Positive public let targetAirflow: Positive @@ -33,7 +33,7 @@ public struct EstimatedPressureDependency { } } - public struct EstimatedAirflowRequest: Equatable { + public struct EstimatedAirflowRequest: Equatable, Sendable { public let existingAirflow: Positive public let existingPressure: Positive public let targetPressure: Positive diff --git a/Sources/SharedModels/BudgetedPercentEnvelope.swift b/Sources/SharedModels/BudgetedPercentEnvelope.swift index 2e8512b..e564969 100644 --- a/Sources/SharedModels/BudgetedPercentEnvelope.swift +++ b/Sources/SharedModels/BudgetedPercentEnvelope.swift @@ -1,6 +1,6 @@ import Foundation -public struct BudgetedPercentEnvelope: Equatable { +public struct BudgetedPercentEnvelope: Equatable, Sendable { public var coilBudget: Percentage public var filterBudget: Percentage diff --git a/Sources/SharedModels/EquipmentMeasurement.swift b/Sources/SharedModels/EquipmentMeasurement.swift index cc18e28..08045e7 100644 --- a/Sources/SharedModels/EquipmentMeasurement.swift +++ b/Sources/SharedModels/EquipmentMeasurement.swift @@ -1,7 +1,7 @@ import Foundation -public enum EquipmentMeasurement: Equatable { - +public enum EquipmentMeasurement: Equatable, Sendable { + case airHandler(AirHandler) case furnaceAndCoil(FurnaceAndCoil) @@ -32,7 +32,7 @@ public enum EquipmentMeasurement: Equatable { } } - public struct AirHandler: Equatable { + public struct AirHandler: Equatable, Sendable { @Positive public var airflow: Double @@ -95,7 +95,7 @@ public enum EquipmentMeasurement: Equatable { } } - public enum EquipmentType: Equatable, CaseIterable, CustomStringConvertible, Identifiable { + public enum EquipmentType: Equatable, CaseIterable, CustomStringConvertible, Identifiable, Sendable { case airHandler case furnaceAndCoil @@ -113,7 +113,7 @@ public enum EquipmentMeasurement: Equatable { } // TODO: Needs updated for when forms are using `minmal` values. - public struct FlaggedMeasurement: Equatable { + public struct FlaggedMeasurement: Equatable, Sendable { public var airflow: Flagged public var coilPressureDrop: Flagged public var externalStaticPressure: Flagged @@ -234,7 +234,7 @@ public enum EquipmentMeasurement: Equatable { } - public struct FurnaceAndCoil: Equatable { + public struct FurnaceAndCoil: Equatable, Sendable { @Positive public var airflow: Double diff --git a/Sources/SharedModels/EquipmentMetadata.swift b/Sources/SharedModels/EquipmentMetadata.swift index d4f6e42..97b5a02 100644 --- a/Sources/SharedModels/EquipmentMetadata.swift +++ b/Sources/SharedModels/EquipmentMetadata.swift @@ -1,6 +1,6 @@ import Foundation -public struct EquipmentMetadata: Equatable { +public struct EquipmentMetadata: Equatable, Sendable { public var coolingCapacity: CoolingCapacity public var fanType: FanType public var ratedStaticPressures: RatedStaticPressures @@ -15,7 +15,7 @@ public struct EquipmentMetadata: Equatable { self.ratedStaticPressures = ratedStaticPressures } - public enum CoolingCapacity: Double, Equatable, CaseIterable, Identifiable, CustomStringConvertible { + public enum CoolingCapacity: Double, Equatable, CaseIterable, Identifiable, CustomStringConvertible, Sendable { case half = 0.5 case threeQuarter = 0.75 case one = 1 @@ -57,7 +57,7 @@ public struct EquipmentMetadata: Equatable { } } - public enum FanType: Hashable, Equatable, CaseIterable, CustomStringConvertible, Identifiable { + public enum FanType: Hashable, Equatable, CaseIterable, CustomStringConvertible, Identifiable, Sendable { case constantSpeed case variableSpeed diff --git a/Sources/SharedModels/Flagged.swift b/Sources/SharedModels/Flagged.swift index 65b47ae..fd0a950 100644 --- a/Sources/SharedModels/Flagged.swift +++ b/Sources/SharedModels/Flagged.swift @@ -4,8 +4,8 @@ import Foundation /// on the current value. /// @dynamicMemberLookup -public struct Flagged: Equatable { - +public struct Flagged: Equatable, Sendable { + public var checkValue: CheckHandler public var wrappedValue: Double @@ -51,11 +51,11 @@ public struct Flagged: Equatable { } } - public struct CheckHandler { - - let checkValue: (Double) -> CheckResult - - public init(_ checkValue: @escaping (Double) -> CheckResult) { + public struct CheckHandler: Sendable { + + let checkValue: @Sendable (Double) -> CheckResult + + public init(_ checkValue: @escaping @Sendable (Double) -> CheckResult) { self.checkValue = checkValue } @@ -64,8 +64,8 @@ public struct Flagged: Equatable { } } - public enum CheckResult: Equatable { - + public enum CheckResult: Equatable, Sendable { + case aboveMaximum(Double) case belowMinimum(Double) case betweenRange(minimum: Double, maximum: Double) @@ -113,7 +113,7 @@ public struct Flagged: Equatable { } } - public enum Status: String, Equatable, CaseIterable { + public enum Status: String, Equatable, CaseIterable, Sendable { case good, warning, error public var title: String { diff --git a/Sources/SharedModels/HelperTypes/Percentage.swift b/Sources/SharedModels/HelperTypes/Percentage.swift index f2c94da..d7dd3cd 100644 --- a/Sources/SharedModels/HelperTypes/Percentage.swift +++ b/Sources/SharedModels/HelperTypes/Percentage.swift @@ -1,6 +1,6 @@ import Foundation -public struct Percentage: Equatable, RawRepresentable { +public struct Percentage: Equatable, RawRepresentable, Sendable { public var rawValue: Double diff --git a/Sources/SharedModels/HelperTypes/Positive.swift b/Sources/SharedModels/HelperTypes/Positive.swift index e51f5b1..e703177 100644 --- a/Sources/SharedModels/HelperTypes/Positive.swift +++ b/Sources/SharedModels/HelperTypes/Positive.swift @@ -27,6 +27,7 @@ public struct Positive where Value: Numeric, Value: Comparable { } extension Positive: Equatable where Value: Equatable { } +extension Positive: Sendable where Value: Sendable { } extension Positive: Comparable where Value: Comparable { public static func < (lhs: Positive, rhs: Positive) -> Bool { diff --git a/Sources/SharedModels/PlenumDimension.swift b/Sources/SharedModels/PlenumDimension.swift index 46ae542..0d17c8c 100644 --- a/Sources/SharedModels/PlenumDimension.swift +++ b/Sources/SharedModels/PlenumDimension.swift @@ -1,6 +1,6 @@ import Foundation -public enum PlenumDimension: Equatable { +public enum PlenumDimension: Equatable, Sendable { case rectangular(width: Double, height: Double) case round(Double) @@ -15,7 +15,7 @@ public enum PlenumDimension: Equatable { } } - public enum Key: String, Equatable, CaseIterable, CustomStringConvertible { + public enum Key: String, Equatable, CaseIterable, CustomStringConvertible, Sendable { case rectangular, round diff --git a/Sources/SharedModels/RatedEnvelope.swift b/Sources/SharedModels/RatedEnvelope.swift index 42ba965..b9ea038 100644 --- a/Sources/SharedModels/RatedEnvelope.swift +++ b/Sources/SharedModels/RatedEnvelope.swift @@ -1,6 +1,6 @@ import Foundation -public struct RatedEnvelope: Equatable { +public struct RatedEnvelope: Equatable, Sendable { public var maximum: Double public var minimum: Double public var rated: Double diff --git a/Sources/SharedModels/Velocity.swift b/Sources/SharedModels/Velocity.swift index 0d50ada..f9cc642 100644 --- a/Sources/SharedModels/Velocity.swift +++ b/Sources/SharedModels/Velocity.swift @@ -1,6 +1,6 @@ import Foundation -public struct Velocity: Equatable { +public struct Velocity: Equatable, Sendable { public var airflow: Double public var dimension: PlenumDimension