in Sources/Confidence/ConfidenceValueHash.swift [24:70]
func hashValue(value: ConfidenceValue, hasher: inout some HashFunction) {
switch value.type() {
case .boolean:
if let booleanData = value.asBoolean()?.data {
hasher.update(data: booleanData)
}
case .string:
if let stringData = value.asString()?.data {
hasher.update(data: stringData)
}
case .integer:
if let integerData = value.asInteger()?.data {
hasher.update(data: integerData)
}
case .double:
if let doubleData = value.asDouble()?.data {
hasher.update(data: doubleData)
}
case .date:
if let dateData = value.asDateComponents()?.date?.data {
hasher.update(data: dateData)
}
case .list:
value.asList()?.forEach { listValue in
hashValue(value: listValue, hasher: &hasher)
}
case .timestamp:
if let timestampData = value.asDate()?.data {
hasher.update(data: timestampData)
}
case .structure:
value.asStructure()?.sorted { $0.key < $1.key }.forEach { key, structureValue in
hasher.update(data: key.data)
hashValue(value: structureValue, hasher: &hasher)
}
case .null:
hasher.update(data: UInt8(0).data)
}
}