diff --git a/Package.swift b/Package.swift index ac57575..069fb9b 100644 --- a/Package.swift +++ b/Package.swift @@ -23,11 +23,12 @@ let package = Package( // 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. .target( - name: "swift-openfoodfacts-sdk"), + name: "swift-openfoodfacts-sdk", path: "Sources/swift-openfoodfacts-sdk" + ), .executableTarget(name: "exe", dependencies: ["swift-openfoodfacts-sdk"]), .testTarget( name: "swift-openfoodfacts-sdkTests", - dependencies: ["swift-openfoodfacts-sdk", "AnyCodable"] + dependencies: ["swift-openfoodfacts-sdk"] ), ] ) diff --git a/Sources/swift-openfoodfacts-sdk/swift_openfoodfacts_sdk.swift b/Sources/swift-openfoodfacts-sdk/swift_openfoodfacts_sdk.swift index 8a1f75a..57597a5 100644 --- a/Sources/swift-openfoodfacts-sdk/swift_openfoodfacts_sdk.swift +++ b/Sources/swift-openfoodfacts-sdk/swift_openfoodfacts_sdk.swift @@ -29,763 +29,6 @@ public class OpenFoodFactsClient { 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(key: String, value: T) throws { - // let encodedValue = try JSONEncoder().encode(value) - // otherData[key] = encodedValue - // } - - // func getDetail(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 { diff --git a/Sources/swift-openfoodfacts-sdk/types/Images.swift b/Sources/swift-openfoodfacts-sdk/types/Images.swift new file mode 100644 index 0000000..7c4fa22 --- /dev/null +++ b/Sources/swift-openfoodfacts-sdk/types/Images.swift @@ -0,0 +1,13 @@ +// public struct Images: Codable { +// private var otherData: [String: Data] = [:] + +// mutating func setDetail(key: String, value: T) throws { +// let encodedValue = try JSONEncoder().encode(value) +// otherData[key] = encodedValue +// } + +// func getDetail(key: String, type: T.Type) throws -> T? { +// guard let data = otherData[key] else { return nil } +// return try JSONDecoder().decode(type, from: data) +// } +// } diff --git a/Sources/swift-openfoodfacts-sdk/types/Ingredient.swift b/Sources/swift-openfoodfacts-sdk/types/Ingredient.swift new file mode 100644 index 0000000..2e05961 --- /dev/null +++ b/Sources/swift-openfoodfacts-sdk/types/Ingredient.swift @@ -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 + } +} diff --git a/Sources/swift-openfoodfacts-sdk/types/LanguagesCodes.swift b/Sources/swift-openfoodfacts-sdk/types/LanguagesCodes.swift new file mode 100644 index 0000000..a1ea227 --- /dev/null +++ b/Sources/swift-openfoodfacts-sdk/types/LanguagesCodes.swift @@ -0,0 +1,6 @@ + +public struct LanguagesCodes: Codable { + var en: String? = nil + var fr: String? = nil + var pl: String? = nil +} diff --git a/Sources/swift-openfoodfacts-sdk/types/NutrientLevels.swift b/Sources/swift-openfoodfacts-sdk/types/NutrientLevels.swift new file mode 100644 index 0000000..a3c9ee3 --- /dev/null +++ b/Sources/swift-openfoodfacts-sdk/types/NutrientLevels.swift @@ -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 + } +} diff --git a/Sources/swift-openfoodfacts-sdk/types/Nutriments.swift b/Sources/swift-openfoodfacts-sdk/types/Nutriments.swift new file mode 100644 index 0000000..73df88d --- /dev/null +++ b/Sources/swift-openfoodfacts-sdk/types/Nutriments.swift @@ -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 + } +} diff --git a/Sources/swift-openfoodfacts-sdk/types/Product.swift b/Sources/swift-openfoodfacts-sdk/types/Product.swift new file mode 100644 index 0000000..f3e5cc5 --- /dev/null +++ b/Sources/swift-openfoodfacts-sdk/types/Product.swift @@ -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" +} diff --git a/Sources/swift-openfoodfacts-sdk/types/ProductResponse.swift b/Sources/swift-openfoodfacts-sdk/types/ProductResponse.swift new file mode 100644 index 0000000..250f22f --- /dev/null +++ b/Sources/swift-openfoodfacts-sdk/types/ProductResponse.swift @@ -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" + } +} diff --git a/Sources/swift-openfoodfacts-sdk/types/SelectedImage.swift b/Sources/swift-openfoodfacts-sdk/types/SelectedImage.swift new file mode 100644 index 0000000..e929507 --- /dev/null +++ b/Sources/swift-openfoodfacts-sdk/types/SelectedImage.swift @@ -0,0 +1,5 @@ +public class SelectedImage: Codable { + var display: SelectedImageItem? + var small: SelectedImageItem? + var thumb: SelectedImageItem? +} diff --git a/Sources/swift-openfoodfacts-sdk/types/SelectedImageItem.swift b/Sources/swift-openfoodfacts-sdk/types/SelectedImageItem.swift new file mode 100644 index 0000000..6852ba5 --- /dev/null +++ b/Sources/swift-openfoodfacts-sdk/types/SelectedImageItem.swift @@ -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 ?? "" + } +} diff --git a/Sources/swift-openfoodfacts-sdk/types/SelectedImages.swift b/Sources/swift-openfoodfacts-sdk/types/SelectedImages.swift new file mode 100644 index 0000000..794c5b5 --- /dev/null +++ b/Sources/swift-openfoodfacts-sdk/types/SelectedImages.swift @@ -0,0 +1,5 @@ +public struct SelectedImages: Codable { + let front: SelectedImage? + let ingredients: SelectedImage? + let nutrition: SelectedImage? +} diff --git a/Sources/swift-openfoodfacts-sdk/types/Source.swift b/Sources/swift-openfoodfacts-sdk/types/Source.swift new file mode 100644 index 0000000..e1c0b1c --- /dev/null +++ b/Sources/swift-openfoodfacts-sdk/types/Source.swift @@ -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 + } +}