Working on state and topics.

This commit is contained in:
2021-10-29 09:12:10 -04:00
parent 1971b2fd19
commit 6fd2013376
3 changed files with 124 additions and 37 deletions

View File

@@ -3,26 +3,70 @@ import CoreUnitTypes
public struct State: Equatable {
@TrackedChanges
public var temperature: Temperature?
public var sensors: Sensors
@TrackedChanges
public var humidity: RelativeHumidity?
public init(
temperature: Temperature? = nil,
humidity: RelativeHumidity? = nil,
needsProcessed: Bool = false
) {
self._temperature = .init(wrappedValue: temperature, needsProcessed: needsProcessed)
self._humidity = .init(wrappedValue: humidity, needsProcessed: needsProcessed)
public init(sensors: Sensors = .init()) {
self.sensors = sensors
}
public var needsProcessed: Bool {
$temperature.needsProcessed || $humidity.needsProcessed
public struct Sensors: Equatable {
public var mixedSensor: TemperatureHumiditySensor<Mixed>
public var postCoilSensor: TemperatureHumiditySensor<PostCoil>
public var returnSensor: TemperatureHumiditySensor<Return>
public var supplySensor: TemperatureHumiditySensor<Supply>
public init(
mixedSensor: TemperatureHumiditySensor<Mixed> = .init(),
postCoilSensor: TemperatureHumiditySensor<PostCoil> = .init(),
returnSensor: TemperatureHumiditySensor<Return> = .init(),
supplySensor: TemperatureHumiditySensor<Supply> = .init()
) {
self.mixedSensor = mixedSensor
self.postCoilSensor = postCoilSensor
self.returnSensor = returnSensor
self.supplySensor = supplySensor
}
public var needsProcessed: Bool {
mixedSensor.needsProcessed
|| postCoilSensor.needsProcessed
|| returnSensor.needsProcessed
|| supplySensor.needsProcessed
}
}
}
extension State.Sensors {
public struct TemperatureHumiditySensor<Location>: Equatable {
@TrackedChanges
public var temperature: Temperature?
@TrackedChanges
public var humidity: RelativeHumidity?
public var needsProcessed: Bool {
$temperature.needsProcessed || $humidity.needsProcessed
}
public init(
temperature: Temperature? = nil,
humidity: RelativeHumidity? = nil,
needsProcessed: Bool = false
) {
self._temperature = .init(wrappedValue: temperature, needsProcessed: needsProcessed)
self._humidity = .init(wrappedValue: humidity, needsProcessed: needsProcessed)
}
}
// MARK: - Temperature / Humidity Sensor Locations
public enum Mixed { }
public enum PostCoil { }
public enum Return { }
public enum Supply { }
}
// MARK: - Tracked Changes
@propertyWrapper
public struct TrackedChanges<Value> {