Refactored
This commit is contained in:
@@ -23,11 +23,12 @@ let package = Package(
|
|||||||
// Targets are the basic building blocks of a package, defining a module or a test suite.
|
// Targets are the basic building blocks of a package, defining a module or a test suite.
|
||||||
// Targets can depend on other targets in this package and products from dependencies.
|
// Targets can depend on other targets in this package and products from dependencies.
|
||||||
.target(
|
.target(
|
||||||
name: "swift-openfoodfacts-sdk"),
|
name: "swift-openfoodfacts-sdk", path: "Sources/swift-openfoodfacts-sdk"
|
||||||
|
),
|
||||||
.executableTarget(name: "exe", dependencies: ["swift-openfoodfacts-sdk"]),
|
.executableTarget(name: "exe", dependencies: ["swift-openfoodfacts-sdk"]),
|
||||||
.testTarget(
|
.testTarget(
|
||||||
name: "swift-openfoodfacts-sdkTests",
|
name: "swift-openfoodfacts-sdkTests",
|
||||||
dependencies: ["swift-openfoodfacts-sdk", "AnyCodable"]
|
dependencies: ["swift-openfoodfacts-sdk"]
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -29,763 +29,6 @@ public class OpenFoodFactsClient {
|
|||||||
return try JSONDecoder().decode(ProductResponse.self, from: data)
|
return try JSONDecoder().decode(ProductResponse.self, from: data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct Ingredient: Codable {
|
|
||||||
var fromPalmOil: String? = nil
|
|
||||||
var id: String? = nil
|
|
||||||
var origin: String? = nil
|
|
||||||
var percent: Float? = nil
|
|
||||||
var rank: Int? = 0
|
|
||||||
var text: String? = nil
|
|
||||||
var vegan: String? = nil
|
|
||||||
var vegetarian: String? = nil
|
|
||||||
|
|
||||||
private enum CodingKeys: String, CodingKey {
|
|
||||||
case fromPalmOil = "from_palm_oil"
|
|
||||||
case id
|
|
||||||
case origin
|
|
||||||
case percent
|
|
||||||
case rank
|
|
||||||
case text
|
|
||||||
case vegan
|
|
||||||
case vegetarian
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public struct LanguagesCodes: Codable {
|
|
||||||
var en: String? = nil
|
|
||||||
var fr: String? = nil
|
|
||||||
var pl: String? = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
public struct NutrientLevels: Codable {
|
|
||||||
private var fat: String? = nil
|
|
||||||
private var salt: String? = nil
|
|
||||||
private var saturatedFat: String? = nil
|
|
||||||
private var sugars: String? = nil
|
|
||||||
|
|
||||||
private enum CodingKeys: String, CodingKey {
|
|
||||||
case fat
|
|
||||||
case salt
|
|
||||||
case saturatedFat = "saturated-fat"
|
|
||||||
case sugars
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public struct Nutriments: Codable {
|
|
||||||
var calcium: Float? = 0.0
|
|
||||||
var calciumValue: Float? = 0.0
|
|
||||||
var calcium100G: Float? = 0.0
|
|
||||||
var calciumServing: Float? = 0.0
|
|
||||||
var calciumUnit: String? = nil
|
|
||||||
|
|
||||||
var carbohydrates: Float? = 0.0
|
|
||||||
var carbohydratesValue: Float? = 0.0
|
|
||||||
var carbohydrates100G: Float? = 0.0
|
|
||||||
var carbohydratesServing: Float? = 0.0
|
|
||||||
var carbohydratesUnit: String? = nil
|
|
||||||
|
|
||||||
var carbonFootprintFromKnownIngredientsProduct: Float? = 0.0
|
|
||||||
var carbonFootprintFromKnownIngredients100G: Float? = 0.0
|
|
||||||
var carbonFootprintFromKnownIngredientsServing: Float? = 0.0
|
|
||||||
|
|
||||||
var cholesterol: Float? = 0.0
|
|
||||||
var cholesterolValue: Float? = 0.0
|
|
||||||
var cholesterol100G: Float? = 0.0
|
|
||||||
var cholesterolServing: Float? = 0.0
|
|
||||||
var cholesterolUnit: String? = nil
|
|
||||||
|
|
||||||
var energy: Int? = 0
|
|
||||||
var energyKcal: Int? = 0
|
|
||||||
var energyKj: Int? = 0
|
|
||||||
var energyValue: Int? = 0
|
|
||||||
var energyKcalValue: Int? = 0
|
|
||||||
var energyKjValue: Int? = 0
|
|
||||||
var energy100G: Int? = 0
|
|
||||||
var energyKcal100G: Int? = 0
|
|
||||||
var energyKj100G: Int? = 0
|
|
||||||
var energyServing: Int? = 0
|
|
||||||
var energyKcalServing: Double? = 0.0
|
|
||||||
var energyKjServing: Int? = 0
|
|
||||||
var energyUnit: String? = nil
|
|
||||||
var energyKcalUnit: String? = nil
|
|
||||||
var energyKjUnit: String? = nil
|
|
||||||
|
|
||||||
var fat: Float? = 0.0
|
|
||||||
var fatValue: Float? = 0.0
|
|
||||||
var fat100G: Float? = 0.0
|
|
||||||
var fatServing: Float? = 0.0
|
|
||||||
var fatUnit: String? = nil
|
|
||||||
|
|
||||||
var fiber: Float? = 0.0
|
|
||||||
var fiberValue: Float? = 0.0
|
|
||||||
var fiber100G: Float? = 0.0
|
|
||||||
var fiberServing: Float? = 0.0
|
|
||||||
var fiberUnit: String? = nil
|
|
||||||
|
|
||||||
var fruitsVegetablesNutsEstimateFromIngredients100G: Float? = 0.0
|
|
||||||
|
|
||||||
var iron: Float? = 0.0
|
|
||||||
var ironValue: Float? = 0.0
|
|
||||||
var iron100G: Float? = 0.0
|
|
||||||
var ironServing: Float? = 0.0
|
|
||||||
var ironUnit: String? = nil
|
|
||||||
|
|
||||||
var novaGroup: Float? = 0.0
|
|
||||||
var novaGroup100G: Float? = 0.0
|
|
||||||
var novaGroupServing: Float? = 0.0
|
|
||||||
|
|
||||||
var proteins: Float? = 0.0
|
|
||||||
var proteinsValue: Float? = 0.0
|
|
||||||
var proteins100G: Float? = 0.0
|
|
||||||
var proteinsServing: Float? = 0.0
|
|
||||||
var proteinsUnit: String? = nil
|
|
||||||
|
|
||||||
var salt: Float? = 0.0
|
|
||||||
var saltValue: Float? = 0.0
|
|
||||||
var salt100G: Float? = 0.0
|
|
||||||
var saltServing: Float? = 0.0
|
|
||||||
var saltUnit: String? = nil
|
|
||||||
|
|
||||||
var saturatedFat: Float? = 0.0
|
|
||||||
var saturatedFatValue: Float? = 0.0
|
|
||||||
var saturatedFat100G: Float? = 0.0
|
|
||||||
var saturatedFatServing: Float? = 0.0
|
|
||||||
var saturatedFatUnit: String? = nil
|
|
||||||
|
|
||||||
var sodium: Float? = 0.0
|
|
||||||
var sodiumValue: Float? = 0.0
|
|
||||||
var sodium100G: Float? = 0.0
|
|
||||||
var sodiumServing: Float? = 0.0
|
|
||||||
var sodiumUnit: String? = nil
|
|
||||||
|
|
||||||
var sugars: Float? = 0.0
|
|
||||||
var sugarsValue: Float? = 0.0
|
|
||||||
var sugars100G: Float? = 0.0
|
|
||||||
var sugarsServing: Float? = 0.0
|
|
||||||
var sugarsUnit: String? = nil
|
|
||||||
|
|
||||||
var transFat: Float? = 0.0
|
|
||||||
var transFatValue: Float? = 0.0
|
|
||||||
var transFat100G: Float? = 0.0
|
|
||||||
var transFatServing: Float? = 0.0
|
|
||||||
var transFatUnit: String? = nil
|
|
||||||
|
|
||||||
var vitaminA: Float? = 0.0
|
|
||||||
var vitaminAValue: Float? = 0.0
|
|
||||||
var vitaminA100G: Float? = 0.0
|
|
||||||
var vitaminAServing: Float? = 0.0
|
|
||||||
var vitaminAUnit: String? = nil
|
|
||||||
|
|
||||||
var vitaminC: Float? = 0.0
|
|
||||||
var vitaminCValue: Float? = 0.0
|
|
||||||
var vitaminC100G: Float? = 0.0
|
|
||||||
var vitaminCServing: Float? = 0.0
|
|
||||||
var vitaminCUnit: String? = nil
|
|
||||||
|
|
||||||
var vitaminD: Float? = 0.0
|
|
||||||
var vitaminDValue: Float? = 0.0
|
|
||||||
var vitaminD100G: Float? = 0.0
|
|
||||||
var vitaminDServing: Float? = 0.0
|
|
||||||
var vitaminDUnit: String? = nil
|
|
||||||
|
|
||||||
// var other: [String: Any] = [:]
|
|
||||||
//
|
|
||||||
// mutating func setDetail(key: String, value: Any) {
|
|
||||||
// other[key] = value
|
|
||||||
// }
|
|
||||||
|
|
||||||
private enum CodingKeys: String, CodingKey {
|
|
||||||
case calcium
|
|
||||||
case calciumValue = "calcium_value"
|
|
||||||
case calcium100G = "calcium_100g"
|
|
||||||
case calciumServing = "calcium_serving"
|
|
||||||
case calciumUnit = "calcium_unit"
|
|
||||||
|
|
||||||
case carbohydrates
|
|
||||||
case carbohydratesValue = "carbohydrates_value"
|
|
||||||
case carbohydrates100G = "carbohydrates_100g"
|
|
||||||
case carbohydratesServing = "carbohydrates_serving"
|
|
||||||
case carbohydratesUnit = "carbohydrates_unit"
|
|
||||||
|
|
||||||
case carbonFootprintFromKnownIngredientsProduct = "carbon-footprint-from-known-ingredients_product"
|
|
||||||
case carbonFootprintFromKnownIngredients100G = "carbon-footprint-from-known-ingredients_100g"
|
|
||||||
case carbonFootprintFromKnownIngredientsServing = "carbon-footprint-from-known-ingredients_serving"
|
|
||||||
|
|
||||||
case cholesterol
|
|
||||||
case cholesterolValue = "cholesterol_value"
|
|
||||||
case cholesterol100G = "cholesterol_100g"
|
|
||||||
case cholesterolServing = "cholesterol_serving"
|
|
||||||
case cholesterolUnit = "cholesterol_unit"
|
|
||||||
|
|
||||||
case energy
|
|
||||||
case energyKcal = "energy-kcal"
|
|
||||||
case energyKj = "energy-kj"
|
|
||||||
case energyValue = "energy_value"
|
|
||||||
case energyKcalValue = "energy-kcal_value"
|
|
||||||
case energyKjValue = "energy-kj_value"
|
|
||||||
case energy100G = "energy_100g"
|
|
||||||
case energyKcal100G = "energy-kcal_100g"
|
|
||||||
case energyKj100G = "energy-kj_100g"
|
|
||||||
case energyServing = "energy_serving"
|
|
||||||
case energyKcalServing = "energy-kcal_serving"
|
|
||||||
case energyKjServing = "energy-kj_serving"
|
|
||||||
case energyUnit = "energy_unit"
|
|
||||||
case energyKcalUnit = "energy-kcal_unit"
|
|
||||||
case energyKjUnit = "energy-kj_unit"
|
|
||||||
|
|
||||||
case fat
|
|
||||||
case fatValue = "fat_value"
|
|
||||||
case fat100G = "fat_100g"
|
|
||||||
case fatServing = "fat_serving"
|
|
||||||
case fatUnit = "fat_unit"
|
|
||||||
|
|
||||||
case fiber
|
|
||||||
case fiberValue = "fiber_value"
|
|
||||||
case fiber100G = "fiber_100g"
|
|
||||||
case fiberServing = "fiber_serving"
|
|
||||||
case fiberUnit = "fiber_unit"
|
|
||||||
|
|
||||||
case fruitsVegetablesNutsEstimateFromIngredients100G = "fruits-vegetables-nuts-estimate-from-ingredients_100g"
|
|
||||||
|
|
||||||
case iron
|
|
||||||
case ironValue = "iron_value"
|
|
||||||
case iron100G = "iron_100g"
|
|
||||||
case ironServing = "iron_serving"
|
|
||||||
case ironUnit = "iron_unit"
|
|
||||||
|
|
||||||
case novaGroup
|
|
||||||
case novaGroup100G = "nova-group_100g"
|
|
||||||
case novaGroupServing = "nova-group_serving"
|
|
||||||
|
|
||||||
case proteins
|
|
||||||
case proteinsValue = "proteins_value"
|
|
||||||
case proteins100G = "proteins_100g"
|
|
||||||
case proteinsServing = "proteins_serving"
|
|
||||||
case proteinsUnit = "proteins_unit"
|
|
||||||
|
|
||||||
case salt
|
|
||||||
case saltValue = "salt_value"
|
|
||||||
case salt100G = "salt_100g"
|
|
||||||
case saltServing = "salt_serving"
|
|
||||||
case saltUnit = "salt_unit"
|
|
||||||
|
|
||||||
case saturatedFat = "saturated-fat"
|
|
||||||
case saturatedFatValue = "saturated-fat_value"
|
|
||||||
case saturatedFat100G = "saturated-fat_100g"
|
|
||||||
case saturatedFatServing = "saturated-fat_serving"
|
|
||||||
case saturatedFatUnit = "saturated-fat_unit"
|
|
||||||
|
|
||||||
case sodium
|
|
||||||
case sodiumValue = "sodium_value"
|
|
||||||
case sodium100G = "sodium_100g"
|
|
||||||
case sodiumServing = "sodium_serving"
|
|
||||||
case sodiumUnit = "sodium_unit"
|
|
||||||
|
|
||||||
case sugars
|
|
||||||
case sugarsValue = "sugars_value"
|
|
||||||
case sugars100G = "sugars_100g"
|
|
||||||
case sugarsServing = "sugars_serving"
|
|
||||||
case sugarsUnit = "sugars_unit"
|
|
||||||
|
|
||||||
case transFat = "trans-fat"
|
|
||||||
case transFatValue = "trans-fat_value"
|
|
||||||
case transFat100G = "trans-fat_100g"
|
|
||||||
case transFatServing = "trans-fat_serving"
|
|
||||||
case transFatUnit = "trans-fat_unit"
|
|
||||||
|
|
||||||
case vitaminA = "vitamin-a"
|
|
||||||
case vitaminAValue = "vitamin-a_value"
|
|
||||||
case vitaminA100G = "vitamin-a_100g"
|
|
||||||
case vitaminAServing = "vitamin-a_serving"
|
|
||||||
case vitaminAUnit = "vitamin-a_unit"
|
|
||||||
|
|
||||||
case vitaminC = "vitamin-c"
|
|
||||||
case vitaminCValue = "vitamin-c_value"
|
|
||||||
case vitaminC100G = "vitamin-c_100g"
|
|
||||||
case vitaminCServing = "vitamin-c_serving"
|
|
||||||
case vitaminCUnit = "vitamin-c_unit"
|
|
||||||
|
|
||||||
case vitaminD = "vitamin-d"
|
|
||||||
case vitaminDValue = "vitamin-d_value"
|
|
||||||
case vitaminD100G = "vitamin-d_100g"
|
|
||||||
case vitaminDServing = "vitamin-d_serving"
|
|
||||||
case vitaminDUnit = "vitamin-d_unit"
|
|
||||||
|
|
||||||
// case other
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public struct ProductResponse: Codable {
|
|
||||||
var product: Product?
|
|
||||||
var code: String?
|
|
||||||
var status: Int? // or Bool, depending on your needs
|
|
||||||
var statusVerbose: String?
|
|
||||||
|
|
||||||
private enum CodingKeys: String, CodingKey {
|
|
||||||
case product
|
|
||||||
case code
|
|
||||||
case status
|
|
||||||
case statusVerbose = "status_verbose"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public struct SelectedImages: Codable {
|
|
||||||
let front: SelectedImage?
|
|
||||||
let ingredients: SelectedImage?
|
|
||||||
let nutrition: SelectedImage?
|
|
||||||
}
|
|
||||||
|
|
||||||
public class SelectedImage: Codable {
|
|
||||||
var display: SelectedImageItem?
|
|
||||||
var small: SelectedImageItem?
|
|
||||||
var thumb: SelectedImageItem?
|
|
||||||
}
|
|
||||||
|
|
||||||
public struct SelectedImageItem: Codable {
|
|
||||||
let en: String?
|
|
||||||
let fr: String?
|
|
||||||
let pl: String?
|
|
||||||
|
|
||||||
var url: String {
|
|
||||||
[en, fr, pl].compactMap { $0 }.first ?? ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// public struct Images: Codable {
|
|
||||||
// private var otherData: [String: Data] = [:]
|
|
||||||
|
|
||||||
// mutating func setDetail<T: Encodable>(key: String, value: T) throws {
|
|
||||||
// let encodedValue = try JSONEncoder().encode(value)
|
|
||||||
// otherData[key] = encodedValue
|
|
||||||
// }
|
|
||||||
|
|
||||||
// func getDetail<T: Decodable>(key: String, type: T.Type) throws -> T? {
|
|
||||||
// guard let data = otherData[key] else { return nil }
|
|
||||||
// return try JSONDecoder().decode(type, from: data)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
public struct Source: Codable {
|
|
||||||
let fields: [String] = []
|
|
||||||
let id: String? = nil
|
|
||||||
let images: [String] = []
|
|
||||||
let importT: Int = 0
|
|
||||||
let manufacturer: String? = nil
|
|
||||||
let name: String? = nil
|
|
||||||
let url: String? = nil
|
|
||||||
|
|
||||||
private enum CodingKeys: String, CodingKey {
|
|
||||||
case fields
|
|
||||||
case id
|
|
||||||
case images
|
|
||||||
case importT = "import_t"
|
|
||||||
case manufacturer
|
|
||||||
case name
|
|
||||||
case url
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class Product: Codable {
|
|
||||||
// var images: Images? = Images()
|
|
||||||
var ingredients: [Ingredient]? = []
|
|
||||||
var languagesCodes: LanguagesCodes?
|
|
||||||
var nutrientLevels: NutrientLevels?
|
|
||||||
var nutriments: Nutriments? = Nutriments()
|
|
||||||
var selectedImages: SelectedImages?
|
|
||||||
var sources: [Source]? = []
|
|
||||||
var additivesN: Int?
|
|
||||||
var additivesOldN: Int?
|
|
||||||
var additivesOriginalTags: [String]?
|
|
||||||
var additivesOldTags: [String]?
|
|
||||||
var additivesPrevOriginalTags: [String]?
|
|
||||||
var additivesDebugTags: [String]?
|
|
||||||
var additivesTags: [String]?
|
|
||||||
var allergens: String?
|
|
||||||
var allergensFromIngredients: String?
|
|
||||||
var allergensFromUser: String?
|
|
||||||
var allergensHierarchy: [String]?
|
|
||||||
var allergensLc: String?
|
|
||||||
var allergensTags: [String]?
|
|
||||||
var aminoAcidsPrevTags: [String]?
|
|
||||||
var aminoAcidsTags: [String]?
|
|
||||||
var brands: String?
|
|
||||||
var brandsDebugTags: [String]?
|
|
||||||
var brandsTags: [String]?
|
|
||||||
var carbonFootprintPercentOfKnownIngredients: String?
|
|
||||||
var carbonFootprintFromKnownIngredientsDebug: String?
|
|
||||||
var categories: String?
|
|
||||||
var categoriesHierarchy: [String]?
|
|
||||||
var categoriesLc: String?
|
|
||||||
var categoriesPropertiesTags: [String]?
|
|
||||||
var categoriesTags: [String]?
|
|
||||||
var checkersTags: [String]?
|
|
||||||
var citiesTags: [String]?
|
|
||||||
var code: String?
|
|
||||||
var codesTags: [String]?
|
|
||||||
var comparedToCategory: String?
|
|
||||||
var complete: Int?
|
|
||||||
var completedT: Int?
|
|
||||||
var completeness: Double?
|
|
||||||
var conservationConditions: String?
|
|
||||||
var countries: String?
|
|
||||||
var countriesHierarchy: [String]?
|
|
||||||
var countriesLc: String?
|
|
||||||
var countriesDebugTags: [String]?
|
|
||||||
var countriesTags: [String]?
|
|
||||||
var correctorsTags: [String]?
|
|
||||||
var createdT: Int?
|
|
||||||
var creator: String?
|
|
||||||
var dataQualityBugsTags: [String]?
|
|
||||||
var dataQualityErrorsTags: [String]?
|
|
||||||
var dataQualityInfoTags: [String]?
|
|
||||||
var dataQualityTags: [String]?
|
|
||||||
var dataQualityWarningsTags: [String]?
|
|
||||||
var dataSources: String?
|
|
||||||
var dataSourcesTags: [String]?
|
|
||||||
var debugParamSortedLangs: [String]?
|
|
||||||
var editorsTags: [String]?
|
|
||||||
var embCodes: String?
|
|
||||||
var embCodesDebugTags: [String]?
|
|
||||||
var embCodesOrig: String?
|
|
||||||
var embCodesTags: [String]?
|
|
||||||
var entryDatesTags: [String]?
|
|
||||||
var expirationDate: String?
|
|
||||||
var expirationDateDebugTags: [String]?
|
|
||||||
var fruitsVegetablesNuts100GEstimate: Int?
|
|
||||||
var genericName: String?
|
|
||||||
var id: String?
|
|
||||||
var _id: String?
|
|
||||||
var imageFrontSmallUrl: String?
|
|
||||||
var imageFrontThumbUrl: String?
|
|
||||||
var imageFrontUrl: String?
|
|
||||||
var imageIngredientsUrl: String?
|
|
||||||
var imageIngredientsSmallUrl: String?
|
|
||||||
var imageIngredientsThumbUrl: String?
|
|
||||||
var imageNutritionSmallUrl: String?
|
|
||||||
var imageNutritionThumbUrl: String?
|
|
||||||
var imageNutritionUrl: String?
|
|
||||||
var imageSmallUrl: String?
|
|
||||||
var imageThumbUrl: String?
|
|
||||||
var imageUrl: String?
|
|
||||||
var informersTags: [String]?
|
|
||||||
var ingredientsAnalysisTags: [String]?
|
|
||||||
var ingredientsDebug: [String?]?
|
|
||||||
var ingredientsFromOrThatMayBeFromPalmOilN: Int?
|
|
||||||
var ingredientsFromPalmOilTags: [String]?
|
|
||||||
var ingredientsFromPalmOilN: Int?
|
|
||||||
var ingredientsHierarchy: [String]?
|
|
||||||
var ingredientsIdsDebug: [String]?
|
|
||||||
var ingredientsN: Int?
|
|
||||||
var ingredientsNTags: [String]?
|
|
||||||
var ingredientsOriginalTags: [String]?
|
|
||||||
var ingredientsTags: [String]?
|
|
||||||
var ingredientsText: String?
|
|
||||||
var ingredientsTextDebug: String?
|
|
||||||
var ingredientsTextWithAllergens: String?
|
|
||||||
var ingredientsThatMayBeFromPalmOilN: Int?
|
|
||||||
var ingredientsThatMayBeFromPalmOilTags: [String]?
|
|
||||||
var interfaceVersionCreated: String?
|
|
||||||
var interfaceVersionModified: String?
|
|
||||||
var keywords: [String]?
|
|
||||||
var knownIngredientsN: Int?
|
|
||||||
var labels: String?
|
|
||||||
var labelsHierarchy: [String]?
|
|
||||||
var labelsLc: String?
|
|
||||||
var labelsPrevHierarchy: [String]?
|
|
||||||
var labelsPrevTags: [String]?
|
|
||||||
var labelsTags: [String]?
|
|
||||||
var labelsDebugTags: [String]?
|
|
||||||
var lang: String?
|
|
||||||
var langDebugTags: [String]?
|
|
||||||
var languagesHierarchy: [String]?
|
|
||||||
var languagesTags: [String]?
|
|
||||||
var lastEditDatesTags: [String]?
|
|
||||||
var lastEditor: String?
|
|
||||||
var lastImageDatesTags: [String]?
|
|
||||||
var lastImageT: Int?
|
|
||||||
var lastModifiedBy: String?
|
|
||||||
var lastModifiedT: Int?
|
|
||||||
var lc: String?
|
|
||||||
var link: String?
|
|
||||||
var linkDebugTags: [String]?
|
|
||||||
var manufacturingPlaces: String?
|
|
||||||
var manufacturingPlacesDebugTags: [String]?
|
|
||||||
var manufacturingPlacesTags: [String]?
|
|
||||||
var maxImgid: String?
|
|
||||||
var mineralsPrevTags: [String]?
|
|
||||||
var mineralsTags: [String]?
|
|
||||||
var miscTags: [String]?
|
|
||||||
var netWeightUnit: String?
|
|
||||||
var netWeightValue: String?
|
|
||||||
var nutritionDataPer: String?
|
|
||||||
var nutritionScoreWarningNoFruitsVegetablesNuts: Int?
|
|
||||||
var noNutritionData: String?
|
|
||||||
var novaGroup: String?
|
|
||||||
var novaGroups: String?
|
|
||||||
var novaGroupDebug: String?
|
|
||||||
var novaGroupTags: [String]?
|
|
||||||
var novaGroupsTags: [String]?
|
|
||||||
var nucleotidesPrevTags: [String]?
|
|
||||||
var nucleotidesTags: [String]?
|
|
||||||
var nutrientLevelsTags: [String]?
|
|
||||||
var nutritionData: String?
|
|
||||||
var nutritionDataPerDebugTags: [String]?
|
|
||||||
var nutritionDataPrepared: String?
|
|
||||||
var nutritionDataPreparedPer: String?
|
|
||||||
var nutritionGrades: String?
|
|
||||||
var nutritionScoreBeverage: Int?
|
|
||||||
var nutritionScoreDebug: String?
|
|
||||||
var nutritionScoreWarningNoFiber: Int?
|
|
||||||
var nutritionGradesTags: [String]?
|
|
||||||
var origins: String?
|
|
||||||
var originsDebugTags: [String]?
|
|
||||||
var originsTags: [String]?
|
|
||||||
var otherInformation: String?
|
|
||||||
var otherNutritionalSubstancesTags: [String]?
|
|
||||||
var packaging: String?
|
|
||||||
var packagingDebugTags: [String]?
|
|
||||||
var packagingTags: [String]?
|
|
||||||
var photographersTags: [String]?
|
|
||||||
var pnnsGroups1: String?
|
|
||||||
var pnnsGroups2: String?
|
|
||||||
var pnnsGroups1Tags: [String]?
|
|
||||||
var pnnsGroups2Tags: [String]?
|
|
||||||
var popularityKey: Int?
|
|
||||||
var producerVersionId: String?
|
|
||||||
var productName: String?
|
|
||||||
var productQuantity: String?
|
|
||||||
var purchasePlaces: String?
|
|
||||||
var purchasePlacesDebugTags: [String]?
|
|
||||||
var purchasePlacesTags: [String]?
|
|
||||||
var qualityTags: [String]?
|
|
||||||
var quantity: String?
|
|
||||||
var quantityDebugTags: [String]?
|
|
||||||
var recyclingInstructionsToDiscard: String?
|
|
||||||
var rev: Int?
|
|
||||||
var servingQuantity: String?
|
|
||||||
var servingSize: String?
|
|
||||||
var servingSizeDebugTags: [String]?
|
|
||||||
var sortkey: Int?
|
|
||||||
var states: String?
|
|
||||||
var statesHierarchy: [String]?
|
|
||||||
var statesTags: [String]?
|
|
||||||
var stores: String?
|
|
||||||
var storesDebugTags: [String]?
|
|
||||||
var storesTags: [String]?
|
|
||||||
var traces: String?
|
|
||||||
var tracesFromIngredients: String?
|
|
||||||
var tracesHierarchy: [String]?
|
|
||||||
var tracesDebugTags: [String]?
|
|
||||||
var tracesFromUser: String?
|
|
||||||
var tracesLc: String?
|
|
||||||
var tracesTags: [String]?
|
|
||||||
var unknownIngredientsN: Int?
|
|
||||||
var unknownNutrientsTags: [String]?
|
|
||||||
var updateKey: String?
|
|
||||||
var vitaminsPrevTags: [String]?
|
|
||||||
var vitaminsTags: [String]?
|
|
||||||
}
|
|
||||||
|
|
||||||
private enum CodingKeys: String, CodingKey {
|
|
||||||
case images
|
|
||||||
case ingredients
|
|
||||||
case languagesCodes = "languages_codes"
|
|
||||||
case nutrientLevels = "nutrient_levels"
|
|
||||||
case nutriments
|
|
||||||
case selectedImages = "selected_images"
|
|
||||||
case sources
|
|
||||||
case additivesN = "additives_n"
|
|
||||||
case additivesOldN = "additives_old_n"
|
|
||||||
case additivesOriginalTags = "additives_original_tags"
|
|
||||||
case additivesOldTags = "additives_old_tags"
|
|
||||||
case additivesPrevOriginalTags = "additives_prev_original_tags"
|
|
||||||
case additivesDebugTags = "additives_debug_tags"
|
|
||||||
case additivesTags = "additives_tags"
|
|
||||||
case allergens
|
|
||||||
case allergensFromIngredients = "allergens_from_ingredients"
|
|
||||||
case allergensFromUser = "allergens_from_user"
|
|
||||||
case allergensHierarchy = "allergens_hierarchy"
|
|
||||||
case allergensLc = "allergens_lc"
|
|
||||||
case allergensTags = "allergens_tags"
|
|
||||||
case aminoAcidsPrevTags = "amino_acids_prev_tags"
|
|
||||||
case aminoAcidsTags = "amino_acids_tags"
|
|
||||||
case brands
|
|
||||||
case brandsDebugTags = "brands_debug_tags"
|
|
||||||
case brandsTags = "brands_tags"
|
|
||||||
case carbonFootprintPercentOfKnownIngredients = "carbon_footprint_percent_of_known_ingredients"
|
|
||||||
case carbonFootprintFromKnownIngredientsDebug = "carbon_footprint_from_known_ingredients_debug"
|
|
||||||
case categories
|
|
||||||
case categoriesHierarchy = "categories_hierarchy"
|
|
||||||
case categoriesLc = "categories_lc"
|
|
||||||
case categoriesPropertiesTags = "categories_properties_tags"
|
|
||||||
case categoriesTags = "categories_tags"
|
|
||||||
case checkersTags = "checkers_tags"
|
|
||||||
case citiesTags = "cities_tags"
|
|
||||||
case code
|
|
||||||
case codesTags = "codes_tags"
|
|
||||||
case comparedToCategory = "compared_to_category"
|
|
||||||
case complete
|
|
||||||
case completedT = "completed_t"
|
|
||||||
case completeness
|
|
||||||
case conservationConditions = "conservation_conditions"
|
|
||||||
case countries
|
|
||||||
case countriesHierarchy = "countries_hierarchy"
|
|
||||||
case countriesLc = "countries_lc"
|
|
||||||
case countriesDebugTags = "countries_debug_tags"
|
|
||||||
case countriesTags = "countries_tags"
|
|
||||||
case correctorsTags = "correctors_tags"
|
|
||||||
case createdT = "created_t"
|
|
||||||
case creator
|
|
||||||
case dataQualityBugsTags = "data_quality_bugs_tags"
|
|
||||||
case dataQualityErrorsTags = "data_quality_errors_tags"
|
|
||||||
case dataQualityInfoTags = "data_quality_info_tags"
|
|
||||||
case dataQualityTags = "data_quality_tags"
|
|
||||||
case dataQualityWarningsTags = "data_quality_warnings_tags"
|
|
||||||
case dataSources = "data_sources"
|
|
||||||
case dataSourcesTags = "data_sources_tags"
|
|
||||||
case debugParamSortedLangs = "debug_param_sorted_langs"
|
|
||||||
case editorsTags = "editors_tags"
|
|
||||||
case embCodes = "emb_codes"
|
|
||||||
case embCodesDebugTags = "emb_codes_debug_tags"
|
|
||||||
case embCodesOrig = "emb_codes_orig"
|
|
||||||
case embCodesTags = "emb_codes_tags"
|
|
||||||
case entryDatesTags = "entry_dates_tags"
|
|
||||||
case expirationDate = "expiration_date"
|
|
||||||
case expirationDateDebugTags = "expiration_date_debug_tags"
|
|
||||||
case fruitsVegetablesNuts100GEstimate = "fruits-vegetables-nuts_100g_estimate"
|
|
||||||
case genericName
|
|
||||||
case id
|
|
||||||
case imageFrontSmallUrl = "image_front_small_url"
|
|
||||||
case imageFrontThumbUrl = "image_front_thumb_url"
|
|
||||||
case imageFrontUrl = "image_front_url"
|
|
||||||
case imageIngredientsUrl = "image_ingredients_url"
|
|
||||||
case imageIngredientsSmallUrl = "image_ingredients_small_url"
|
|
||||||
case imageIngredientsThumbUrl = "image_ingredients_thumb_url"
|
|
||||||
case imageNutritionSmallUrl = "image_nutrition_small_url"
|
|
||||||
case imageNutritionThumbUrl = "image_nutrition_thumb_url"
|
|
||||||
case imageNutritionUrl = "image_nutrition_url"
|
|
||||||
case imageSmallUrl = "image_small_url"
|
|
||||||
case imageThumbUrl = "image_thumb_url"
|
|
||||||
case imageUrl = "image_url"
|
|
||||||
case informersTags = "informers_tags"
|
|
||||||
case ingredientsAnalysisTags = "ingredients_analysis_tags"
|
|
||||||
case ingredientsDebug = "ingredients_debug"
|
|
||||||
case ingredientsFromOrThatMayBeFromPalmOilN = "ingredients_from_or_that_may_be_from_palm_oil_n"
|
|
||||||
case ingredientsFromPalmOilTags = "ingredients_from_palm_oil_tags"
|
|
||||||
case ingredientsFromPalmOilN = "ingredients_from_palm_oil_n"
|
|
||||||
case ingredientsHierarchy = "ingredients_hierarchy"
|
|
||||||
case ingredientsIdsDebug = "ingredients_ids_debug"
|
|
||||||
case ingredientsN = "ingredients_n"
|
|
||||||
case ingredientsNTags = "ingredients_n_tags"
|
|
||||||
case ingredientsOriginalTags = "ingredients_original_tags"
|
|
||||||
case ingredientsTags = "ingredients_tags"
|
|
||||||
case ingredientsText = "ingredients_text"
|
|
||||||
case ingredientsTextDebug = "ingredients_text_debug"
|
|
||||||
case ingredientsTextWithAllergens = "ingredients_text_with_allergens"
|
|
||||||
case ingredientsThatMayBeFromPalmOilN = "ingredients_that_may_be_from_palm_oil_n"
|
|
||||||
case ingredientsThatMayBeFromPalmOilTags = "ingredients_that_may_be_from_palm_oil_tags"
|
|
||||||
case interfaceVersionCreated = "interface_version_created"
|
|
||||||
case interfaceVersionModified = "interface_version_modified"
|
|
||||||
case keywords
|
|
||||||
case knownIngredientsN = "known_ingredients_n"
|
|
||||||
case labels
|
|
||||||
case labelsHierarchy = "labels_hierarchy"
|
|
||||||
case labelsLc = "labels_lc"
|
|
||||||
case labelsPrevHierarchy = "labels_prev_hierarchy"
|
|
||||||
case labelsPrevTags = "labels_prev_tags"
|
|
||||||
case labelsTags = "labels_tags"
|
|
||||||
case labelsDebugTags = "labels_debug_tags"
|
|
||||||
case lang
|
|
||||||
case langDebugTags = "lang_debug_tags"
|
|
||||||
case languagesHierarchy = "languages_hierarchy"
|
|
||||||
case languagesTags = "languages_tags"
|
|
||||||
case lastEditDatesTags = "last_edit_dates_tags"
|
|
||||||
case lastEditor = "last_editor"
|
|
||||||
case lastImageDatesTags = "last_image_dates_tags"
|
|
||||||
case lastImageT = "last_image_t"
|
|
||||||
case lastModifiedBy = "last_modified_by"
|
|
||||||
case lastModifiedT = "last_modified_t"
|
|
||||||
case lc
|
|
||||||
case link
|
|
||||||
case linkDebugTags = "link_debug_tags"
|
|
||||||
case manufacturingPlaces = "manufacturing_places"
|
|
||||||
case manufacturingPlacesDebugTags = "manufacturing_places_debug_tags"
|
|
||||||
case manufacturingPlacesTags = "manufacturing_places_tags"
|
|
||||||
case maxImgid = "max_imgid"
|
|
||||||
case mineralsPrevTags = "minerals_prev_tags"
|
|
||||||
case mineralsTags = "minerals_tags"
|
|
||||||
case miscTags = "misc_tags"
|
|
||||||
case netWeightUnit = "net_weight_unit"
|
|
||||||
case netWeightValue = "net_weight_value"
|
|
||||||
case nutritionDataPer = "nutrition_data_per"
|
|
||||||
case nutritionScoreWarningNoFruitsVegetablesNuts = "nutrition_score_warning_no_fruits_vegetables_nuts"
|
|
||||||
case noNutritionData = "no_nutrition_data"
|
|
||||||
case novaGroup = "nova_group"
|
|
||||||
case novaGroups = "nova_groups"
|
|
||||||
case novaGroupDebug = "nova_group_debug"
|
|
||||||
case novaGroupTags = "nova_group_tags"
|
|
||||||
case novaGroupsTags = "nova_groups_tags"
|
|
||||||
case nucleotidesPrevTags = "nucleotides_prev_tags"
|
|
||||||
case nucleotidesTags = "nucleotides_tags"
|
|
||||||
case nutrientLevelsTags = "nutrient_levels_tags"
|
|
||||||
case nutritionData = "nutrition_data"
|
|
||||||
case nutritionDataPerDebugTags = "nutrition_data_per_debug_tags"
|
|
||||||
case nutritionDataPrepared = "nutrition_data_prepared"
|
|
||||||
case nutritionDataPreparedPer = "nutrition_data_prepared_per"
|
|
||||||
case nutritionGrades = "nutrition_grades"
|
|
||||||
case nutritionScoreBeverage = "nutrition_score_beverage"
|
|
||||||
case nutritionScoreDebug = "nutrition_score_debug"
|
|
||||||
case nutritionScoreWarningNoFiber = "nutrition_score_warning_no_fiber"
|
|
||||||
case nutritionGradesTags = "nutrition_grades_tags"
|
|
||||||
case origins
|
|
||||||
case originsDebugTags = "origins_debug_tags"
|
|
||||||
case originsTags = "origins_tags"
|
|
||||||
case otherInformation = "other_information"
|
|
||||||
case otherNutritionalSubstancesTags = "other_nutritional_substances_tags"
|
|
||||||
case packaging
|
|
||||||
case packagingDebugTags = "packaging_debug_tags"
|
|
||||||
case packagingTags = "packaging_tags"
|
|
||||||
case photographersTags = "photographers_tags"
|
|
||||||
case pnnsGroups1 = "pnns_groups_1"
|
|
||||||
case pnnsGroups2 = "pnns_groups_2"
|
|
||||||
case pnnsGroups1Tags = "pnns_groups_1_tags"
|
|
||||||
case pnnsGroups2Tags = "pnns_groups_2_tags"
|
|
||||||
case popularityKey = "popularity_key"
|
|
||||||
case producerVersionId = "producer_version_id"
|
|
||||||
case productName = "product_name"
|
|
||||||
case productQuantity = "product_quantity"
|
|
||||||
case purchasePlaces = "purchase_places"
|
|
||||||
case purchasePlacesDebugTags = "purchase_places_debug_tags"
|
|
||||||
case purchasePlacesTags = "purchase_places_tags"
|
|
||||||
case qualityTags = "quality_tags"
|
|
||||||
case quantity
|
|
||||||
case quantityDebugTags = "quantity_debug_tags"
|
|
||||||
case recyclingInstructionsToDiscard = "recycling_instructions_to_discard"
|
|
||||||
case rev
|
|
||||||
case servingQuantity = "serving_quantity"
|
|
||||||
case servingSize = "serving_size"
|
|
||||||
case servingSizeDebugTags = "serving_size_debug_tags"
|
|
||||||
case sortkey
|
|
||||||
case states
|
|
||||||
case statesHierarchy = "states_hierarchy"
|
|
||||||
case statesTags = "states_tags"
|
|
||||||
case stores
|
|
||||||
case storesDebugTags = "stores_debug_tags"
|
|
||||||
case storesTags = "stores_tags"
|
|
||||||
case traces
|
|
||||||
case tracesFromIngredients = "traces_from_ingredients"
|
|
||||||
case tracesHierarchy = "traces_hierarchy"
|
|
||||||
case tracesDebugTags = "traces_debug_tags"
|
|
||||||
case tracesFromUser = "traces_from_user"
|
|
||||||
case tracesLc = "traces_lc"
|
|
||||||
case tracesTags = "traces_tags"
|
|
||||||
case unknownIngredientsN = "unknown_ingredients_n"
|
|
||||||
case unknownNutrientsTags = "unknown_nutrients_tags"
|
|
||||||
case updateKey = "update_key"
|
|
||||||
case vitaminsPrevTags = "vitamins_prev_tags"
|
|
||||||
case vitaminsTags = "vitamins_tags"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum OFFError: Error {
|
enum OFFError: Error {
|
||||||
|
|||||||
13
Sources/swift-openfoodfacts-sdk/types/Images.swift
Normal file
13
Sources/swift-openfoodfacts-sdk/types/Images.swift
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// public struct Images: Codable {
|
||||||
|
// private var otherData: [String: Data] = [:]
|
||||||
|
|
||||||
|
// mutating func setDetail<T: Encodable>(key: String, value: T) throws {
|
||||||
|
// let encodedValue = try JSONEncoder().encode(value)
|
||||||
|
// otherData[key] = encodedValue
|
||||||
|
// }
|
||||||
|
|
||||||
|
// func getDetail<T: Decodable>(key: String, type: T.Type) throws -> T? {
|
||||||
|
// guard let data = otherData[key] else { return nil }
|
||||||
|
// return try JSONDecoder().decode(type, from: data)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
21
Sources/swift-openfoodfacts-sdk/types/Ingredient.swift
Normal file
21
Sources/swift-openfoodfacts-sdk/types/Ingredient.swift
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
public struct Ingredient: Codable {
|
||||||
|
var fromPalmOil: String? = nil
|
||||||
|
var id: String? = nil
|
||||||
|
var origin: String? = nil
|
||||||
|
var percent: Float? = nil
|
||||||
|
var rank: Int? = 0
|
||||||
|
var text: String? = nil
|
||||||
|
var vegan: String? = nil
|
||||||
|
var vegetarian: String? = nil
|
||||||
|
|
||||||
|
private enum CodingKeys: String, CodingKey {
|
||||||
|
case fromPalmOil = "from_palm_oil"
|
||||||
|
case id
|
||||||
|
case origin
|
||||||
|
case percent
|
||||||
|
case rank
|
||||||
|
case text
|
||||||
|
case vegan
|
||||||
|
case vegetarian
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
public struct LanguagesCodes: Codable {
|
||||||
|
var en: String? = nil
|
||||||
|
var fr: String? = nil
|
||||||
|
var pl: String? = nil
|
||||||
|
}
|
||||||
13
Sources/swift-openfoodfacts-sdk/types/NutrientLevels.swift
Normal file
13
Sources/swift-openfoodfacts-sdk/types/NutrientLevels.swift
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
public struct NutrientLevels: Codable {
|
||||||
|
private var fat: String? = nil
|
||||||
|
private var salt: String? = nil
|
||||||
|
private var saturatedFat: String? = nil
|
||||||
|
private var sugars: String? = nil
|
||||||
|
|
||||||
|
private enum CodingKeys: String, CodingKey {
|
||||||
|
case fat
|
||||||
|
case salt
|
||||||
|
case saturatedFat = "saturated-fat"
|
||||||
|
case sugars
|
||||||
|
}
|
||||||
|
}
|
||||||
243
Sources/swift-openfoodfacts-sdk/types/Nutriments.swift
Normal file
243
Sources/swift-openfoodfacts-sdk/types/Nutriments.swift
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
public struct Nutriments: Codable {
|
||||||
|
var calcium: Float? = 0.0
|
||||||
|
var calciumValue: Float? = 0.0
|
||||||
|
var calcium100G: Float? = 0.0
|
||||||
|
var calciumServing: Float? = 0.0
|
||||||
|
var calciumUnit: String? = nil
|
||||||
|
|
||||||
|
var carbohydrates: Float? = 0.0
|
||||||
|
var carbohydratesValue: Float? = 0.0
|
||||||
|
var carbohydrates100G: Float? = 0.0
|
||||||
|
var carbohydratesServing: Float? = 0.0
|
||||||
|
var carbohydratesUnit: String? = nil
|
||||||
|
|
||||||
|
var carbonFootprintFromKnownIngredientsProduct: Float? = 0.0
|
||||||
|
var carbonFootprintFromKnownIngredients100G: Float? = 0.0
|
||||||
|
var carbonFootprintFromKnownIngredientsServing: Float? = 0.0
|
||||||
|
|
||||||
|
var cholesterol: Float? = 0.0
|
||||||
|
var cholesterolValue: Float? = 0.0
|
||||||
|
var cholesterol100G: Float? = 0.0
|
||||||
|
var cholesterolServing: Float? = 0.0
|
||||||
|
var cholesterolUnit: String? = nil
|
||||||
|
|
||||||
|
var energy: Int? = 0
|
||||||
|
var energyKcal: Int? = 0
|
||||||
|
var energyKj: Int? = 0
|
||||||
|
var energyValue: Int? = 0
|
||||||
|
var energyKcalValue: Int? = 0
|
||||||
|
var energyKjValue: Int? = 0
|
||||||
|
var energy100G: Int? = 0
|
||||||
|
var energyKcal100G: Int? = 0
|
||||||
|
var energyKj100G: Int? = 0
|
||||||
|
var energyServing: Int? = 0
|
||||||
|
var energyKcalServing: Double? = 0.0
|
||||||
|
var energyKjServing: Int? = 0
|
||||||
|
var energyUnit: String? = nil
|
||||||
|
var energyKcalUnit: String? = nil
|
||||||
|
var energyKjUnit: String? = nil
|
||||||
|
|
||||||
|
var fat: Float? = 0.0
|
||||||
|
var fatValue: Float? = 0.0
|
||||||
|
var fat100G: Float? = 0.0
|
||||||
|
var fatServing: Float? = 0.0
|
||||||
|
var fatUnit: String? = nil
|
||||||
|
|
||||||
|
var fiber: Float? = 0.0
|
||||||
|
var fiberValue: Float? = 0.0
|
||||||
|
var fiber100G: Float? = 0.0
|
||||||
|
var fiberServing: Float? = 0.0
|
||||||
|
var fiberUnit: String? = nil
|
||||||
|
|
||||||
|
var fruitsVegetablesNutsEstimateFromIngredients100G: Float? = 0.0
|
||||||
|
|
||||||
|
var iron: Float? = 0.0
|
||||||
|
var ironValue: Float? = 0.0
|
||||||
|
var iron100G: Float? = 0.0
|
||||||
|
var ironServing: Float? = 0.0
|
||||||
|
var ironUnit: String? = nil
|
||||||
|
|
||||||
|
var novaGroup: Float? = 0.0
|
||||||
|
var novaGroup100G: Float? = 0.0
|
||||||
|
var novaGroupServing: Float? = 0.0
|
||||||
|
|
||||||
|
var proteins: Float? = 0.0
|
||||||
|
var proteinsValue: Float? = 0.0
|
||||||
|
var proteins100G: Float? = 0.0
|
||||||
|
var proteinsServing: Float? = 0.0
|
||||||
|
var proteinsUnit: String? = nil
|
||||||
|
|
||||||
|
var salt: Float? = 0.0
|
||||||
|
var saltValue: Float? = 0.0
|
||||||
|
var salt100G: Float? = 0.0
|
||||||
|
var saltServing: Float? = 0.0
|
||||||
|
var saltUnit: String? = nil
|
||||||
|
|
||||||
|
var saturatedFat: Float? = 0.0
|
||||||
|
var saturatedFatValue: Float? = 0.0
|
||||||
|
var saturatedFat100G: Float? = 0.0
|
||||||
|
var saturatedFatServing: Float? = 0.0
|
||||||
|
var saturatedFatUnit: String? = nil
|
||||||
|
|
||||||
|
var sodium: Float? = 0.0
|
||||||
|
var sodiumValue: Float? = 0.0
|
||||||
|
var sodium100G: Float? = 0.0
|
||||||
|
var sodiumServing: Float? = 0.0
|
||||||
|
var sodiumUnit: String? = nil
|
||||||
|
|
||||||
|
var sugars: Float? = 0.0
|
||||||
|
var sugarsValue: Float? = 0.0
|
||||||
|
var sugars100G: Float? = 0.0
|
||||||
|
var sugarsServing: Float? = 0.0
|
||||||
|
var sugarsUnit: String? = nil
|
||||||
|
|
||||||
|
var transFat: Float? = 0.0
|
||||||
|
var transFatValue: Float? = 0.0
|
||||||
|
var transFat100G: Float? = 0.0
|
||||||
|
var transFatServing: Float? = 0.0
|
||||||
|
var transFatUnit: String? = nil
|
||||||
|
|
||||||
|
var vitaminA: Float? = 0.0
|
||||||
|
var vitaminAValue: Float? = 0.0
|
||||||
|
var vitaminA100G: Float? = 0.0
|
||||||
|
var vitaminAServing: Float? = 0.0
|
||||||
|
var vitaminAUnit: String? = nil
|
||||||
|
|
||||||
|
var vitaminC: Float? = 0.0
|
||||||
|
var vitaminCValue: Float? = 0.0
|
||||||
|
var vitaminC100G: Float? = 0.0
|
||||||
|
var vitaminCServing: Float? = 0.0
|
||||||
|
var vitaminCUnit: String? = nil
|
||||||
|
|
||||||
|
var vitaminD: Float? = 0.0
|
||||||
|
var vitaminDValue: Float? = 0.0
|
||||||
|
var vitaminD100G: Float? = 0.0
|
||||||
|
var vitaminDServing: Float? = 0.0
|
||||||
|
var vitaminDUnit: String? = nil
|
||||||
|
|
||||||
|
// var other: [String: Any] = [:]
|
||||||
|
//
|
||||||
|
// mutating func setDetail(key: String, value: Any) {
|
||||||
|
// other[key] = value
|
||||||
|
// }
|
||||||
|
|
||||||
|
private enum CodingKeys: String, CodingKey {
|
||||||
|
case calcium
|
||||||
|
case calciumValue = "calcium_value"
|
||||||
|
case calcium100G = "calcium_100g"
|
||||||
|
case calciumServing = "calcium_serving"
|
||||||
|
case calciumUnit = "calcium_unit"
|
||||||
|
|
||||||
|
case carbohydrates
|
||||||
|
case carbohydratesValue = "carbohydrates_value"
|
||||||
|
case carbohydrates100G = "carbohydrates_100g"
|
||||||
|
case carbohydratesServing = "carbohydrates_serving"
|
||||||
|
case carbohydratesUnit = "carbohydrates_unit"
|
||||||
|
|
||||||
|
case carbonFootprintFromKnownIngredientsProduct = "carbon-footprint-from-known-ingredients_product"
|
||||||
|
case carbonFootprintFromKnownIngredients100G = "carbon-footprint-from-known-ingredients_100g"
|
||||||
|
case carbonFootprintFromKnownIngredientsServing = "carbon-footprint-from-known-ingredients_serving"
|
||||||
|
|
||||||
|
case cholesterol
|
||||||
|
case cholesterolValue = "cholesterol_value"
|
||||||
|
case cholesterol100G = "cholesterol_100g"
|
||||||
|
case cholesterolServing = "cholesterol_serving"
|
||||||
|
case cholesterolUnit = "cholesterol_unit"
|
||||||
|
|
||||||
|
case energy
|
||||||
|
case energyKcal = "energy-kcal"
|
||||||
|
case energyKj = "energy-kj"
|
||||||
|
case energyValue = "energy_value"
|
||||||
|
case energyKcalValue = "energy-kcal_value"
|
||||||
|
case energyKjValue = "energy-kj_value"
|
||||||
|
case energy100G = "energy_100g"
|
||||||
|
case energyKcal100G = "energy-kcal_100g"
|
||||||
|
case energyKj100G = "energy-kj_100g"
|
||||||
|
case energyServing = "energy_serving"
|
||||||
|
case energyKcalServing = "energy-kcal_serving"
|
||||||
|
case energyKjServing = "energy-kj_serving"
|
||||||
|
case energyUnit = "energy_unit"
|
||||||
|
case energyKcalUnit = "energy-kcal_unit"
|
||||||
|
case energyKjUnit = "energy-kj_unit"
|
||||||
|
|
||||||
|
case fat
|
||||||
|
case fatValue = "fat_value"
|
||||||
|
case fat100G = "fat_100g"
|
||||||
|
case fatServing = "fat_serving"
|
||||||
|
case fatUnit = "fat_unit"
|
||||||
|
|
||||||
|
case fiber
|
||||||
|
case fiberValue = "fiber_value"
|
||||||
|
case fiber100G = "fiber_100g"
|
||||||
|
case fiberServing = "fiber_serving"
|
||||||
|
case fiberUnit = "fiber_unit"
|
||||||
|
|
||||||
|
case fruitsVegetablesNutsEstimateFromIngredients100G = "fruits-vegetables-nuts-estimate-from-ingredients_100g"
|
||||||
|
|
||||||
|
case iron
|
||||||
|
case ironValue = "iron_value"
|
||||||
|
case iron100G = "iron_100g"
|
||||||
|
case ironServing = "iron_serving"
|
||||||
|
case ironUnit = "iron_unit"
|
||||||
|
|
||||||
|
case novaGroup
|
||||||
|
case novaGroup100G = "nova-group_100g"
|
||||||
|
case novaGroupServing = "nova-group_serving"
|
||||||
|
|
||||||
|
case proteins
|
||||||
|
case proteinsValue = "proteins_value"
|
||||||
|
case proteins100G = "proteins_100g"
|
||||||
|
case proteinsServing = "proteins_serving"
|
||||||
|
case proteinsUnit = "proteins_unit"
|
||||||
|
|
||||||
|
case salt
|
||||||
|
case saltValue = "salt_value"
|
||||||
|
case salt100G = "salt_100g"
|
||||||
|
case saltServing = "salt_serving"
|
||||||
|
case saltUnit = "salt_unit"
|
||||||
|
|
||||||
|
case saturatedFat = "saturated-fat"
|
||||||
|
case saturatedFatValue = "saturated-fat_value"
|
||||||
|
case saturatedFat100G = "saturated-fat_100g"
|
||||||
|
case saturatedFatServing = "saturated-fat_serving"
|
||||||
|
case saturatedFatUnit = "saturated-fat_unit"
|
||||||
|
|
||||||
|
case sodium
|
||||||
|
case sodiumValue = "sodium_value"
|
||||||
|
case sodium100G = "sodium_100g"
|
||||||
|
case sodiumServing = "sodium_serving"
|
||||||
|
case sodiumUnit = "sodium_unit"
|
||||||
|
|
||||||
|
case sugars
|
||||||
|
case sugarsValue = "sugars_value"
|
||||||
|
case sugars100G = "sugars_100g"
|
||||||
|
case sugarsServing = "sugars_serving"
|
||||||
|
case sugarsUnit = "sugars_unit"
|
||||||
|
|
||||||
|
case transFat = "trans-fat"
|
||||||
|
case transFatValue = "trans-fat_value"
|
||||||
|
case transFat100G = "trans-fat_100g"
|
||||||
|
case transFatServing = "trans-fat_serving"
|
||||||
|
case transFatUnit = "trans-fat_unit"
|
||||||
|
|
||||||
|
case vitaminA = "vitamin-a"
|
||||||
|
case vitaminAValue = "vitamin-a_value"
|
||||||
|
case vitaminA100G = "vitamin-a_100g"
|
||||||
|
case vitaminAServing = "vitamin-a_serving"
|
||||||
|
case vitaminAUnit = "vitamin-a_unit"
|
||||||
|
|
||||||
|
case vitaminC = "vitamin-c"
|
||||||
|
case vitaminCValue = "vitamin-c_value"
|
||||||
|
case vitaminC100G = "vitamin-c_100g"
|
||||||
|
case vitaminCServing = "vitamin-c_serving"
|
||||||
|
case vitaminCUnit = "vitamin-c_unit"
|
||||||
|
|
||||||
|
case vitaminD = "vitamin-d"
|
||||||
|
case vitaminDValue = "vitamin-d_value"
|
||||||
|
case vitaminD100G = "vitamin-d_100g"
|
||||||
|
case vitaminDServing = "vitamin-d_serving"
|
||||||
|
case vitaminDUnit = "vitamin-d_unit"
|
||||||
|
|
||||||
|
// case other
|
||||||
|
}
|
||||||
|
}
|
||||||
400
Sources/swift-openfoodfacts-sdk/types/Product.swift
Normal file
400
Sources/swift-openfoodfacts-sdk/types/Product.swift
Normal file
@@ -0,0 +1,400 @@
|
|||||||
|
public class Product: Codable {
|
||||||
|
// var images: Images? = Images()
|
||||||
|
var ingredients: [Ingredient]? = []
|
||||||
|
var languagesCodes: LanguagesCodes?
|
||||||
|
var nutrientLevels: NutrientLevels?
|
||||||
|
var nutriments: Nutriments? = Nutriments()
|
||||||
|
var selectedImages: SelectedImages?
|
||||||
|
var sources: [Source]? = []
|
||||||
|
var additivesN: Int?
|
||||||
|
var additivesOldN: Int?
|
||||||
|
var additivesOriginalTags: [String]?
|
||||||
|
var additivesOldTags: [String]?
|
||||||
|
var additivesPrevOriginalTags: [String]?
|
||||||
|
var additivesDebugTags: [String]?
|
||||||
|
var additivesTags: [String]?
|
||||||
|
var allergens: String?
|
||||||
|
var allergensFromIngredients: String?
|
||||||
|
var allergensFromUser: String?
|
||||||
|
var allergensHierarchy: [String]?
|
||||||
|
var allergensLc: String?
|
||||||
|
var allergensTags: [String]?
|
||||||
|
var aminoAcidsPrevTags: [String]?
|
||||||
|
var aminoAcidsTags: [String]?
|
||||||
|
var brands: String?
|
||||||
|
var brandsDebugTags: [String]?
|
||||||
|
var brandsTags: [String]?
|
||||||
|
var carbonFootprintPercentOfKnownIngredients: String?
|
||||||
|
var carbonFootprintFromKnownIngredientsDebug: String?
|
||||||
|
var categories: String?
|
||||||
|
var categoriesHierarchy: [String]?
|
||||||
|
var categoriesLc: String?
|
||||||
|
var categoriesPropertiesTags: [String]?
|
||||||
|
var categoriesTags: [String]?
|
||||||
|
var checkersTags: [String]?
|
||||||
|
var citiesTags: [String]?
|
||||||
|
var code: String?
|
||||||
|
var codesTags: [String]?
|
||||||
|
var comparedToCategory: String?
|
||||||
|
var complete: Int?
|
||||||
|
var completedT: Int?
|
||||||
|
var completeness: Double?
|
||||||
|
var conservationConditions: String?
|
||||||
|
var countries: String?
|
||||||
|
var countriesHierarchy: [String]?
|
||||||
|
var countriesLc: String?
|
||||||
|
var countriesDebugTags: [String]?
|
||||||
|
var countriesTags: [String]?
|
||||||
|
var correctorsTags: [String]?
|
||||||
|
var createdT: Int?
|
||||||
|
var creator: String?
|
||||||
|
var dataQualityBugsTags: [String]?
|
||||||
|
var dataQualityErrorsTags: [String]?
|
||||||
|
var dataQualityInfoTags: [String]?
|
||||||
|
var dataQualityTags: [String]?
|
||||||
|
var dataQualityWarningsTags: [String]?
|
||||||
|
var dataSources: String?
|
||||||
|
var dataSourcesTags: [String]?
|
||||||
|
var debugParamSortedLangs: [String]?
|
||||||
|
var editorsTags: [String]?
|
||||||
|
var embCodes: String?
|
||||||
|
var embCodesDebugTags: [String]?
|
||||||
|
var embCodesOrig: String?
|
||||||
|
var embCodesTags: [String]?
|
||||||
|
var entryDatesTags: [String]?
|
||||||
|
var expirationDate: String?
|
||||||
|
var expirationDateDebugTags: [String]?
|
||||||
|
var fruitsVegetablesNuts100GEstimate: Int?
|
||||||
|
var genericName: String?
|
||||||
|
var id: String?
|
||||||
|
var _id: String?
|
||||||
|
var imageFrontSmallUrl: String?
|
||||||
|
var imageFrontThumbUrl: String?
|
||||||
|
var imageFrontUrl: String?
|
||||||
|
var imageIngredientsUrl: String?
|
||||||
|
var imageIngredientsSmallUrl: String?
|
||||||
|
var imageIngredientsThumbUrl: String?
|
||||||
|
var imageNutritionSmallUrl: String?
|
||||||
|
var imageNutritionThumbUrl: String?
|
||||||
|
var imageNutritionUrl: String?
|
||||||
|
var imageSmallUrl: String?
|
||||||
|
var imageThumbUrl: String?
|
||||||
|
var imageUrl: String?
|
||||||
|
var informersTags: [String]?
|
||||||
|
var ingredientsAnalysisTags: [String]?
|
||||||
|
var ingredientsDebug: [String?]?
|
||||||
|
var ingredientsFromOrThatMayBeFromPalmOilN: Int?
|
||||||
|
var ingredientsFromPalmOilTags: [String]?
|
||||||
|
var ingredientsFromPalmOilN: Int?
|
||||||
|
var ingredientsHierarchy: [String]?
|
||||||
|
var ingredientsIdsDebug: [String]?
|
||||||
|
var ingredientsN: Int?
|
||||||
|
var ingredientsNTags: [String]?
|
||||||
|
var ingredientsOriginalTags: [String]?
|
||||||
|
var ingredientsTags: [String]?
|
||||||
|
var ingredientsText: String?
|
||||||
|
var ingredientsTextDebug: String?
|
||||||
|
var ingredientsTextWithAllergens: String?
|
||||||
|
var ingredientsThatMayBeFromPalmOilN: Int?
|
||||||
|
var ingredientsThatMayBeFromPalmOilTags: [String]?
|
||||||
|
var interfaceVersionCreated: String?
|
||||||
|
var interfaceVersionModified: String?
|
||||||
|
var keywords: [String]?
|
||||||
|
var knownIngredientsN: Int?
|
||||||
|
var labels: String?
|
||||||
|
var labelsHierarchy: [String]?
|
||||||
|
var labelsLc: String?
|
||||||
|
var labelsPrevHierarchy: [String]?
|
||||||
|
var labelsPrevTags: [String]?
|
||||||
|
var labelsTags: [String]?
|
||||||
|
var labelsDebugTags: [String]?
|
||||||
|
var lang: String?
|
||||||
|
var langDebugTags: [String]?
|
||||||
|
var languagesHierarchy: [String]?
|
||||||
|
var languagesTags: [String]?
|
||||||
|
var lastEditDatesTags: [String]?
|
||||||
|
var lastEditor: String?
|
||||||
|
var lastImageDatesTags: [String]?
|
||||||
|
var lastImageT: Int?
|
||||||
|
var lastModifiedBy: String?
|
||||||
|
var lastModifiedT: Int?
|
||||||
|
var lc: String?
|
||||||
|
var link: String?
|
||||||
|
var linkDebugTags: [String]?
|
||||||
|
var manufacturingPlaces: String?
|
||||||
|
var manufacturingPlacesDebugTags: [String]?
|
||||||
|
var manufacturingPlacesTags: [String]?
|
||||||
|
var maxImgid: String?
|
||||||
|
var mineralsPrevTags: [String]?
|
||||||
|
var mineralsTags: [String]?
|
||||||
|
var miscTags: [String]?
|
||||||
|
var netWeightUnit: String?
|
||||||
|
var netWeightValue: String?
|
||||||
|
var nutritionDataPer: String?
|
||||||
|
var nutritionScoreWarningNoFruitsVegetablesNuts: Int?
|
||||||
|
var noNutritionData: String?
|
||||||
|
var novaGroup: String?
|
||||||
|
var novaGroups: String?
|
||||||
|
var novaGroupDebug: String?
|
||||||
|
var novaGroupTags: [String]?
|
||||||
|
var novaGroupsTags: [String]?
|
||||||
|
var nucleotidesPrevTags: [String]?
|
||||||
|
var nucleotidesTags: [String]?
|
||||||
|
var nutrientLevelsTags: [String]?
|
||||||
|
var nutritionData: String?
|
||||||
|
var nutritionDataPerDebugTags: [String]?
|
||||||
|
var nutritionDataPrepared: String?
|
||||||
|
var nutritionDataPreparedPer: String?
|
||||||
|
var nutritionGrades: String?
|
||||||
|
var nutritionScoreBeverage: Int?
|
||||||
|
var nutritionScoreDebug: String?
|
||||||
|
var nutritionScoreWarningNoFiber: Int?
|
||||||
|
var nutritionGradesTags: [String]?
|
||||||
|
var origins: String?
|
||||||
|
var originsDebugTags: [String]?
|
||||||
|
var originsTags: [String]?
|
||||||
|
var otherInformation: String?
|
||||||
|
var otherNutritionalSubstancesTags: [String]?
|
||||||
|
var packaging: String?
|
||||||
|
var packagingDebugTags: [String]?
|
||||||
|
var packagingTags: [String]?
|
||||||
|
var photographersTags: [String]?
|
||||||
|
var pnnsGroups1: String?
|
||||||
|
var pnnsGroups2: String?
|
||||||
|
var pnnsGroups1Tags: [String]?
|
||||||
|
var pnnsGroups2Tags: [String]?
|
||||||
|
var popularityKey: Int?
|
||||||
|
var producerVersionId: String?
|
||||||
|
var productName: String?
|
||||||
|
var productQuantity: String?
|
||||||
|
var purchasePlaces: String?
|
||||||
|
var purchasePlacesDebugTags: [String]?
|
||||||
|
var purchasePlacesTags: [String]?
|
||||||
|
var qualityTags: [String]?
|
||||||
|
var quantity: String?
|
||||||
|
var quantityDebugTags: [String]?
|
||||||
|
var recyclingInstructionsToDiscard: String?
|
||||||
|
var rev: Int?
|
||||||
|
var servingQuantity: String?
|
||||||
|
var servingSize: String?
|
||||||
|
var servingSizeDebugTags: [String]?
|
||||||
|
var sortkey: Int?
|
||||||
|
var states: String?
|
||||||
|
var statesHierarchy: [String]?
|
||||||
|
var statesTags: [String]?
|
||||||
|
var stores: String?
|
||||||
|
var storesDebugTags: [String]?
|
||||||
|
var storesTags: [String]?
|
||||||
|
var traces: String?
|
||||||
|
var tracesFromIngredients: String?
|
||||||
|
var tracesHierarchy: [String]?
|
||||||
|
var tracesDebugTags: [String]?
|
||||||
|
var tracesFromUser: String?
|
||||||
|
var tracesLc: String?
|
||||||
|
var tracesTags: [String]?
|
||||||
|
var unknownIngredientsN: Int?
|
||||||
|
var unknownNutrientsTags: [String]?
|
||||||
|
var updateKey: String?
|
||||||
|
var vitaminsPrevTags: [String]?
|
||||||
|
var vitaminsTags: [String]?
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum CodingKeys: String, CodingKey {
|
||||||
|
case images
|
||||||
|
case ingredients
|
||||||
|
case languagesCodes = "languages_codes"
|
||||||
|
case nutrientLevels = "nutrient_levels"
|
||||||
|
case nutriments
|
||||||
|
case selectedImages = "selected_images"
|
||||||
|
case sources
|
||||||
|
case additivesN = "additives_n"
|
||||||
|
case additivesOldN = "additives_old_n"
|
||||||
|
case additivesOriginalTags = "additives_original_tags"
|
||||||
|
case additivesOldTags = "additives_old_tags"
|
||||||
|
case additivesPrevOriginalTags = "additives_prev_original_tags"
|
||||||
|
case additivesDebugTags = "additives_debug_tags"
|
||||||
|
case additivesTags = "additives_tags"
|
||||||
|
case allergens
|
||||||
|
case allergensFromIngredients = "allergens_from_ingredients"
|
||||||
|
case allergensFromUser = "allergens_from_user"
|
||||||
|
case allergensHierarchy = "allergens_hierarchy"
|
||||||
|
case allergensLc = "allergens_lc"
|
||||||
|
case allergensTags = "allergens_tags"
|
||||||
|
case aminoAcidsPrevTags = "amino_acids_prev_tags"
|
||||||
|
case aminoAcidsTags = "amino_acids_tags"
|
||||||
|
case brands
|
||||||
|
case brandsDebugTags = "brands_debug_tags"
|
||||||
|
case brandsTags = "brands_tags"
|
||||||
|
case carbonFootprintPercentOfKnownIngredients = "carbon_footprint_percent_of_known_ingredients"
|
||||||
|
case carbonFootprintFromKnownIngredientsDebug = "carbon_footprint_from_known_ingredients_debug"
|
||||||
|
case categories
|
||||||
|
case categoriesHierarchy = "categories_hierarchy"
|
||||||
|
case categoriesLc = "categories_lc"
|
||||||
|
case categoriesPropertiesTags = "categories_properties_tags"
|
||||||
|
case categoriesTags = "categories_tags"
|
||||||
|
case checkersTags = "checkers_tags"
|
||||||
|
case citiesTags = "cities_tags"
|
||||||
|
case code
|
||||||
|
case codesTags = "codes_tags"
|
||||||
|
case comparedToCategory = "compared_to_category"
|
||||||
|
case complete
|
||||||
|
case completedT = "completed_t"
|
||||||
|
case completeness
|
||||||
|
case conservationConditions = "conservation_conditions"
|
||||||
|
case countries
|
||||||
|
case countriesHierarchy = "countries_hierarchy"
|
||||||
|
case countriesLc = "countries_lc"
|
||||||
|
case countriesDebugTags = "countries_debug_tags"
|
||||||
|
case countriesTags = "countries_tags"
|
||||||
|
case correctorsTags = "correctors_tags"
|
||||||
|
case createdT = "created_t"
|
||||||
|
case creator
|
||||||
|
case dataQualityBugsTags = "data_quality_bugs_tags"
|
||||||
|
case dataQualityErrorsTags = "data_quality_errors_tags"
|
||||||
|
case dataQualityInfoTags = "data_quality_info_tags"
|
||||||
|
case dataQualityTags = "data_quality_tags"
|
||||||
|
case dataQualityWarningsTags = "data_quality_warnings_tags"
|
||||||
|
case dataSources = "data_sources"
|
||||||
|
case dataSourcesTags = "data_sources_tags"
|
||||||
|
case debugParamSortedLangs = "debug_param_sorted_langs"
|
||||||
|
case editorsTags = "editors_tags"
|
||||||
|
case embCodes = "emb_codes"
|
||||||
|
case embCodesDebugTags = "emb_codes_debug_tags"
|
||||||
|
case embCodesOrig = "emb_codes_orig"
|
||||||
|
case embCodesTags = "emb_codes_tags"
|
||||||
|
case entryDatesTags = "entry_dates_tags"
|
||||||
|
case expirationDate = "expiration_date"
|
||||||
|
case expirationDateDebugTags = "expiration_date_debug_tags"
|
||||||
|
case fruitsVegetablesNuts100GEstimate = "fruits-vegetables-nuts_100g_estimate"
|
||||||
|
case genericName
|
||||||
|
case id
|
||||||
|
case imageFrontSmallUrl = "image_front_small_url"
|
||||||
|
case imageFrontThumbUrl = "image_front_thumb_url"
|
||||||
|
case imageFrontUrl = "image_front_url"
|
||||||
|
case imageIngredientsUrl = "image_ingredients_url"
|
||||||
|
case imageIngredientsSmallUrl = "image_ingredients_small_url"
|
||||||
|
case imageIngredientsThumbUrl = "image_ingredients_thumb_url"
|
||||||
|
case imageNutritionSmallUrl = "image_nutrition_small_url"
|
||||||
|
case imageNutritionThumbUrl = "image_nutrition_thumb_url"
|
||||||
|
case imageNutritionUrl = "image_nutrition_url"
|
||||||
|
case imageSmallUrl = "image_small_url"
|
||||||
|
case imageThumbUrl = "image_thumb_url"
|
||||||
|
case imageUrl = "image_url"
|
||||||
|
case informersTags = "informers_tags"
|
||||||
|
case ingredientsAnalysisTags = "ingredients_analysis_tags"
|
||||||
|
case ingredientsDebug = "ingredients_debug"
|
||||||
|
case ingredientsFromOrThatMayBeFromPalmOilN = "ingredients_from_or_that_may_be_from_palm_oil_n"
|
||||||
|
case ingredientsFromPalmOilTags = "ingredients_from_palm_oil_tags"
|
||||||
|
case ingredientsFromPalmOilN = "ingredients_from_palm_oil_n"
|
||||||
|
case ingredientsHierarchy = "ingredients_hierarchy"
|
||||||
|
case ingredientsIdsDebug = "ingredients_ids_debug"
|
||||||
|
case ingredientsN = "ingredients_n"
|
||||||
|
case ingredientsNTags = "ingredients_n_tags"
|
||||||
|
case ingredientsOriginalTags = "ingredients_original_tags"
|
||||||
|
case ingredientsTags = "ingredients_tags"
|
||||||
|
case ingredientsText = "ingredients_text"
|
||||||
|
case ingredientsTextDebug = "ingredients_text_debug"
|
||||||
|
case ingredientsTextWithAllergens = "ingredients_text_with_allergens"
|
||||||
|
case ingredientsThatMayBeFromPalmOilN = "ingredients_that_may_be_from_palm_oil_n"
|
||||||
|
case ingredientsThatMayBeFromPalmOilTags = "ingredients_that_may_be_from_palm_oil_tags"
|
||||||
|
case interfaceVersionCreated = "interface_version_created"
|
||||||
|
case interfaceVersionModified = "interface_version_modified"
|
||||||
|
case keywords
|
||||||
|
case knownIngredientsN = "known_ingredients_n"
|
||||||
|
case labels
|
||||||
|
case labelsHierarchy = "labels_hierarchy"
|
||||||
|
case labelsLc = "labels_lc"
|
||||||
|
case labelsPrevHierarchy = "labels_prev_hierarchy"
|
||||||
|
case labelsPrevTags = "labels_prev_tags"
|
||||||
|
case labelsTags = "labels_tags"
|
||||||
|
case labelsDebugTags = "labels_debug_tags"
|
||||||
|
case lang
|
||||||
|
case langDebugTags = "lang_debug_tags"
|
||||||
|
case languagesHierarchy = "languages_hierarchy"
|
||||||
|
case languagesTags = "languages_tags"
|
||||||
|
case lastEditDatesTags = "last_edit_dates_tags"
|
||||||
|
case lastEditor = "last_editor"
|
||||||
|
case lastImageDatesTags = "last_image_dates_tags"
|
||||||
|
case lastImageT = "last_image_t"
|
||||||
|
case lastModifiedBy = "last_modified_by"
|
||||||
|
case lastModifiedT = "last_modified_t"
|
||||||
|
case lc
|
||||||
|
case link
|
||||||
|
case linkDebugTags = "link_debug_tags"
|
||||||
|
case manufacturingPlaces = "manufacturing_places"
|
||||||
|
case manufacturingPlacesDebugTags = "manufacturing_places_debug_tags"
|
||||||
|
case manufacturingPlacesTags = "manufacturing_places_tags"
|
||||||
|
case maxImgid = "max_imgid"
|
||||||
|
case mineralsPrevTags = "minerals_prev_tags"
|
||||||
|
case mineralsTags = "minerals_tags"
|
||||||
|
case miscTags = "misc_tags"
|
||||||
|
case netWeightUnit = "net_weight_unit"
|
||||||
|
case netWeightValue = "net_weight_value"
|
||||||
|
case nutritionDataPer = "nutrition_data_per"
|
||||||
|
case nutritionScoreWarningNoFruitsVegetablesNuts = "nutrition_score_warning_no_fruits_vegetables_nuts"
|
||||||
|
case noNutritionData = "no_nutrition_data"
|
||||||
|
case novaGroup = "nova_group"
|
||||||
|
case novaGroups = "nova_groups"
|
||||||
|
case novaGroupDebug = "nova_group_debug"
|
||||||
|
case novaGroupTags = "nova_group_tags"
|
||||||
|
case novaGroupsTags = "nova_groups_tags"
|
||||||
|
case nucleotidesPrevTags = "nucleotides_prev_tags"
|
||||||
|
case nucleotidesTags = "nucleotides_tags"
|
||||||
|
case nutrientLevelsTags = "nutrient_levels_tags"
|
||||||
|
case nutritionData = "nutrition_data"
|
||||||
|
case nutritionDataPerDebugTags = "nutrition_data_per_debug_tags"
|
||||||
|
case nutritionDataPrepared = "nutrition_data_prepared"
|
||||||
|
case nutritionDataPreparedPer = "nutrition_data_prepared_per"
|
||||||
|
case nutritionGrades = "nutrition_grades"
|
||||||
|
case nutritionScoreBeverage = "nutrition_score_beverage"
|
||||||
|
case nutritionScoreDebug = "nutrition_score_debug"
|
||||||
|
case nutritionScoreWarningNoFiber = "nutrition_score_warning_no_fiber"
|
||||||
|
case nutritionGradesTags = "nutrition_grades_tags"
|
||||||
|
case origins
|
||||||
|
case originsDebugTags = "origins_debug_tags"
|
||||||
|
case originsTags = "origins_tags"
|
||||||
|
case otherInformation = "other_information"
|
||||||
|
case otherNutritionalSubstancesTags = "other_nutritional_substances_tags"
|
||||||
|
case packaging
|
||||||
|
case packagingDebugTags = "packaging_debug_tags"
|
||||||
|
case packagingTags = "packaging_tags"
|
||||||
|
case photographersTags = "photographers_tags"
|
||||||
|
case pnnsGroups1 = "pnns_groups_1"
|
||||||
|
case pnnsGroups2 = "pnns_groups_2"
|
||||||
|
case pnnsGroups1Tags = "pnns_groups_1_tags"
|
||||||
|
case pnnsGroups2Tags = "pnns_groups_2_tags"
|
||||||
|
case popularityKey = "popularity_key"
|
||||||
|
case producerVersionId = "producer_version_id"
|
||||||
|
case productName = "product_name"
|
||||||
|
case productQuantity = "product_quantity"
|
||||||
|
case purchasePlaces = "purchase_places"
|
||||||
|
case purchasePlacesDebugTags = "purchase_places_debug_tags"
|
||||||
|
case purchasePlacesTags = "purchase_places_tags"
|
||||||
|
case qualityTags = "quality_tags"
|
||||||
|
case quantity
|
||||||
|
case quantityDebugTags = "quantity_debug_tags"
|
||||||
|
case recyclingInstructionsToDiscard = "recycling_instructions_to_discard"
|
||||||
|
case rev
|
||||||
|
case servingQuantity = "serving_quantity"
|
||||||
|
case servingSize = "serving_size"
|
||||||
|
case servingSizeDebugTags = "serving_size_debug_tags"
|
||||||
|
case sortkey
|
||||||
|
case states
|
||||||
|
case statesHierarchy = "states_hierarchy"
|
||||||
|
case statesTags = "states_tags"
|
||||||
|
case stores
|
||||||
|
case storesDebugTags = "stores_debug_tags"
|
||||||
|
case storesTags = "stores_tags"
|
||||||
|
case traces
|
||||||
|
case tracesFromIngredients = "traces_from_ingredients"
|
||||||
|
case tracesHierarchy = "traces_hierarchy"
|
||||||
|
case tracesDebugTags = "traces_debug_tags"
|
||||||
|
case tracesFromUser = "traces_from_user"
|
||||||
|
case tracesLc = "traces_lc"
|
||||||
|
case tracesTags = "traces_tags"
|
||||||
|
case unknownIngredientsN = "unknown_ingredients_n"
|
||||||
|
case unknownNutrientsTags = "unknown_nutrients_tags"
|
||||||
|
case updateKey = "update_key"
|
||||||
|
case vitaminsPrevTags = "vitamins_prev_tags"
|
||||||
|
case vitaminsTags = "vitamins_tags"
|
||||||
|
}
|
||||||
14
Sources/swift-openfoodfacts-sdk/types/ProductResponse.swift
Normal file
14
Sources/swift-openfoodfacts-sdk/types/ProductResponse.swift
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
|
||||||
|
public struct ProductResponse: Codable {
|
||||||
|
var product: Product?
|
||||||
|
var code: String?
|
||||||
|
var status: Int? // or Bool, depending on your needs
|
||||||
|
var statusVerbose: String?
|
||||||
|
|
||||||
|
private enum CodingKeys: String, CodingKey {
|
||||||
|
case product
|
||||||
|
case code
|
||||||
|
case status
|
||||||
|
case statusVerbose = "status_verbose"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
public class SelectedImage: Codable {
|
||||||
|
var display: SelectedImageItem?
|
||||||
|
var small: SelectedImageItem?
|
||||||
|
var thumb: SelectedImageItem?
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
public struct SelectedImageItem: Codable {
|
||||||
|
let en: String?
|
||||||
|
let fr: String?
|
||||||
|
let pl: String?
|
||||||
|
|
||||||
|
var url: String {
|
||||||
|
[en, fr, pl].compactMap { $0 }.first ?? ""
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
public struct SelectedImages: Codable {
|
||||||
|
let front: SelectedImage?
|
||||||
|
let ingredients: SelectedImage?
|
||||||
|
let nutrition: SelectedImage?
|
||||||
|
}
|
||||||
19
Sources/swift-openfoodfacts-sdk/types/Source.swift
Normal file
19
Sources/swift-openfoodfacts-sdk/types/Source.swift
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
public struct Source: Codable {
|
||||||
|
let fields: [String] = []
|
||||||
|
let id: String? = nil
|
||||||
|
let images: [String] = []
|
||||||
|
let importT: Int = 0
|
||||||
|
let manufacturer: String? = nil
|
||||||
|
let name: String? = nil
|
||||||
|
let url: String? = nil
|
||||||
|
|
||||||
|
private enum CodingKeys: String, CodingKey {
|
||||||
|
case fields
|
||||||
|
case id
|
||||||
|
case images
|
||||||
|
case importT = "import_t"
|
||||||
|
case manufacturer
|
||||||
|
case name
|
||||||
|
case url
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user