Ahhh, OpenFoodFacts and their types...

This commit is contained in:
cdricms
2025-12-06 18:13:36 +01:00
parent 62ad13cb8c
commit bdc4bb37f5
3 changed files with 31 additions and 1 deletions

View File

@@ -8,4 +8,15 @@ extension KeyedDecodingContainer {
}
return nil
}
public func decodeStringOrInt(forKey key: Key) throws -> Int? {
if let intVal = try? decode(Int.self, forKey: key) {
return intVal
}
if let stringVal = try? decode(String.self, forKey: key) {
return Int(stringVal)
}
return nil
}
}

View File

@@ -23,4 +23,23 @@ public struct NutriscoreData: Sendable, Codable {
case energy
}
public init(from decoder: any Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
saturatedFatRatio = try container.decodeIfPresent(
Float.self, forKey: .saturatedFatRatio)
saturatedFatRatioPoints = try container.decodeIfPresent(
Int.self, forKey: .saturatedFatRatioPoints)
saturatedFatRatioValue = try container.decodeIfPresent(
Float.self, forKey: .saturatedFatRatioValue)
isBeverage = try container.decodeIfPresent(
Int.self, forKey: .isBeverage)
isCheese = try container.decodeIfPresent(Int.self, forKey: .isCheese)
isWater = try container.decodeStringOrInt(forKey: .isWater)
isFat = try container.decodeIfPresent(Int.self, forKey: .isFat)
energy = try container.decodeIfPresent(Int.self, forKey: .energy)
}
}