func hashValue()

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)
    }
}