retail.projects.enrollSolution

enum_GoogleCloudRetailV2alphaEnrollSolutionRequestSolution := [ "SOLUTION_TYPE_UNSPECIFIED", "SOLUTION_TYPE_RECOMMENDATION", "SOLUTION_TYPE_SEARCH" ]

valid {
    input.Body.solution == enum_GoogleCloudRetailV2alphaEnrollSolutionRequestSolution[_]
    input.ReqMap.ProjectID == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}

retail.projects.getAlertConfig

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.getLoggingConfig

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.getRetailProject

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.listEnrolledSolutions

valid {
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.attributesConfig.addCatalogAttribute

enum_GoogleCloudRetailV2CatalogAttributeDynamicFacetableOption := [ "DYNAMIC_FACETABLE_OPTION_UNSPECIFIED", "DYNAMIC_FACETABLE_ENABLED", "DYNAMIC_FACETABLE_DISABLED" ]
enum_GoogleCloudRetailV2CatalogAttributeExactSearchableOption := [ "EXACT_SEARCHABLE_OPTION_UNSPECIFIED", "EXACT_SEARCHABLE_ENABLED", "EXACT_SEARCHABLE_DISABLED" ]
enum_GoogleCloudRetailV2CatalogAttributeIndexableOption := [ "INDEXABLE_OPTION_UNSPECIFIED", "INDEXABLE_ENABLED", "INDEXABLE_DISABLED" ]
enum_GoogleCloudRetailV2CatalogAttributeRetrievableOption := [ "RETRIEVABLE_OPTION_UNSPECIFIED", "RETRIEVABLE_ENABLED", "RETRIEVABLE_DISABLED" ]
enum_GoogleCloudRetailV2CatalogAttributeSearchableOption := [ "SEARCHABLE_OPTION_UNSPECIFIED", "SEARCHABLE_ENABLED", "SEARCHABLE_DISABLED" ]

valid {
    input.Body.catalogAttribute.dynamicFacetableOption == enum_GoogleCloudRetailV2CatalogAttributeDynamicFacetableOption[_]
    input.Body.catalogAttribute.exactSearchableOption == enum_GoogleCloudRetailV2CatalogAttributeExactSearchableOption[_]
    input.Body.catalogAttribute.facetConfig.facetIntervals[_].exclusiveMaximum == NUMBER
    input.Body.catalogAttribute.facetConfig.facetIntervals[_].exclusiveMinimum == NUMBER
    input.Body.catalogAttribute.facetConfig.facetIntervals[_].maximum == NUMBER
    input.Body.catalogAttribute.facetConfig.facetIntervals[_].minimum == NUMBER
    input.Body.catalogAttribute.facetConfig.ignoredFacetValues[_].endTime == STRING
    input.Body.catalogAttribute.facetConfig.ignoredFacetValues[_].startTime == STRING
    input.Body.catalogAttribute.facetConfig.ignoredFacetValues[_].values[_] == STRING
    input.Body.catalogAttribute.facetConfig.mergedFacet.mergedFacetKey == STRING
    input.Body.catalogAttribute.facetConfig.mergedFacet.mergedFacetValues[_].mergedValue == STRING
    input.Body.catalogAttribute.facetConfig.mergedFacet.mergedFacetValues[_].values[_] == STRING
    input.Body.catalogAttribute.facetConfig.mergedFacetValues[_].mergedValue == STRING
    input.Body.catalogAttribute.facetConfig.mergedFacetValues[_].values[_] == STRING
    input.Body.catalogAttribute.facetConfig.rerankConfig.facetValues[_] == STRING
    input.Body.catalogAttribute.facetConfig.rerankConfig.rerankFacet == BOOLEAN
    input.Body.catalogAttribute.indexableOption == enum_GoogleCloudRetailV2CatalogAttributeIndexableOption[_]
    input.Body.catalogAttribute.key == STRING
    input.Body.catalogAttribute.retrievableOption == enum_GoogleCloudRetailV2CatalogAttributeRetrievableOption[_]
    input.Body.catalogAttribute.searchableOption == enum_GoogleCloudRetailV2CatalogAttributeSearchableOption[_]
    input.ReqMap.attributesConfig == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.attributesConfig.batchRemoveCatalogAttributes

valid {
    input.Body.attributeKeys[_] == STRING
    input.ReqMap.attributesConfig == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.attributesConfig.removeCatalogAttribute

valid {
    input.Body.key == STRING
    input.ReqMap.attributesConfig == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.attributesConfig.replaceCatalogAttribute

enum_GoogleCloudRetailV2CatalogAttributeDynamicFacetableOption := [ "DYNAMIC_FACETABLE_OPTION_UNSPECIFIED", "DYNAMIC_FACETABLE_ENABLED", "DYNAMIC_FACETABLE_DISABLED" ]
enum_GoogleCloudRetailV2CatalogAttributeExactSearchableOption := [ "EXACT_SEARCHABLE_OPTION_UNSPECIFIED", "EXACT_SEARCHABLE_ENABLED", "EXACT_SEARCHABLE_DISABLED" ]
enum_GoogleCloudRetailV2CatalogAttributeIndexableOption := [ "INDEXABLE_OPTION_UNSPECIFIED", "INDEXABLE_ENABLED", "INDEXABLE_DISABLED" ]
enum_GoogleCloudRetailV2CatalogAttributeRetrievableOption := [ "RETRIEVABLE_OPTION_UNSPECIFIED", "RETRIEVABLE_ENABLED", "RETRIEVABLE_DISABLED" ]
enum_GoogleCloudRetailV2CatalogAttributeSearchableOption := [ "SEARCHABLE_OPTION_UNSPECIFIED", "SEARCHABLE_ENABLED", "SEARCHABLE_DISABLED" ]

valid {
    input.Body.catalogAttribute.dynamicFacetableOption == enum_GoogleCloudRetailV2CatalogAttributeDynamicFacetableOption[_]
    input.Body.catalogAttribute.exactSearchableOption == enum_GoogleCloudRetailV2CatalogAttributeExactSearchableOption[_]
    input.Body.catalogAttribute.facetConfig.facetIntervals[_].exclusiveMaximum == NUMBER
    input.Body.catalogAttribute.facetConfig.facetIntervals[_].exclusiveMinimum == NUMBER
    input.Body.catalogAttribute.facetConfig.facetIntervals[_].maximum == NUMBER
    input.Body.catalogAttribute.facetConfig.facetIntervals[_].minimum == NUMBER
    input.Body.catalogAttribute.facetConfig.ignoredFacetValues[_].endTime == STRING
    input.Body.catalogAttribute.facetConfig.ignoredFacetValues[_].startTime == STRING
    input.Body.catalogAttribute.facetConfig.ignoredFacetValues[_].values[_] == STRING
    input.Body.catalogAttribute.facetConfig.mergedFacet.mergedFacetKey == STRING
    input.Body.catalogAttribute.facetConfig.mergedFacet.mergedFacetValues[_].mergedValue == STRING
    input.Body.catalogAttribute.facetConfig.mergedFacet.mergedFacetValues[_].values[_] == STRING
    input.Body.catalogAttribute.facetConfig.mergedFacetValues[_].mergedValue == STRING
    input.Body.catalogAttribute.facetConfig.mergedFacetValues[_].values[_] == STRING
    input.Body.catalogAttribute.facetConfig.rerankConfig.facetValues[_] == STRING
    input.Body.catalogAttribute.facetConfig.rerankConfig.rerankFacet == BOOLEAN
    input.Body.catalogAttribute.indexableOption == enum_GoogleCloudRetailV2CatalogAttributeIndexableOption[_]
    input.Body.catalogAttribute.key == STRING
    input.Body.catalogAttribute.retrievableOption == enum_GoogleCloudRetailV2CatalogAttributeRetrievableOption[_]
    input.Body.catalogAttribute.searchableOption == enum_GoogleCloudRetailV2CatalogAttributeSearchableOption[_]
    input.Body.updateMask == STRING
    input.ReqMap.attributesConfig == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.branches.operations.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.branches.places.operations.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.branches.products.addFulfillmentPlaces

valid {
    input.Body.addTime == STRING
    input.Body.allowMissing == BOOLEAN
    input.Body.placeIds[_] == STRING
    input.Body.type == STRING
    input.ReqMap.product == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.branches.products.addLocalInventories

valid {
    input.Body.addMask == STRING
    input.Body.addTime == STRING
    input.Body.allowMissing == BOOLEAN
    input.Body.localInventories[_].attributes.STRING.indexable == BOOLEAN
    input.Body.localInventories[_].attributes.STRING.numbers[_] == NUMBER
    input.Body.localInventories[_].attributes.STRING.searchable == BOOLEAN
    input.Body.localInventories[_].attributes.STRING.text[_] == STRING
    input.Body.localInventories[_].fulfillmentTypes[_] == STRING
    input.Body.localInventories[_].placeId == STRING
    input.Body.localInventories[_].priceInfo.cost == NUMBER
    input.Body.localInventories[_].priceInfo.currencyCode == STRING
    input.Body.localInventories[_].priceInfo.originalPrice == NUMBER
    input.Body.localInventories[_].priceInfo.price == NUMBER
    input.Body.localInventories[_].priceInfo.priceEffectiveTime == STRING
    input.Body.localInventories[_].priceInfo.priceExpireTime == STRING
    input.ReqMap.product == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.branches.products.create

enum_GoogleCloudRetailV2ProductAvailability := [ "AVAILABILITY_UNSPECIFIED", "IN_STOCK", "OUT_OF_STOCK", "PREORDER", "BACKORDER" ]
enum_GoogleCloudRetailV2ProductType := [ "TYPE_UNSPECIFIED", "PRIMARY", "VARIANT", "COLLECTION" ]

valid {
    input.Body.attributes.STRING.indexable == BOOLEAN
    input.Body.attributes.STRING.numbers[_] == NUMBER
    input.Body.attributes.STRING.searchable == BOOLEAN
    input.Body.attributes.STRING.text[_] == STRING
    input.Body.audience.ageGroups[_] == STRING
    input.Body.audience.genders[_] == STRING
    input.Body.availability == enum_GoogleCloudRetailV2ProductAvailability[_]
    input.Body.availableQuantity == INTEGER
    input.Body.availableTime == STRING
    input.Body.brands[_] == STRING
    input.Body.categories[_] == STRING
    input.Body.collectionMemberIds[_] == STRING
    input.Body.colorInfo.colorFamilies[_] == STRING
    input.Body.colorInfo.colors[_] == STRING
    input.Body.conditions[_] == STRING
    input.Body.description == STRING
    input.Body.expireTime == STRING
    input.Body.fulfillmentInfo[_].placeIds[_] == STRING
    input.Body.fulfillmentInfo[_].type == STRING
    input.Body.gtin == STRING
    input.Body.id == STRING
    input.Body.images[_].height == INTEGER
    input.Body.images[_].uri == STRING
    input.Body.images[_].width == INTEGER
    input.Body.languageCode == STRING
    input.Body.materials[_] == STRING
    input.Body.name == STRING
    input.Body.patterns[_] == STRING
    input.Body.priceInfo.cost == NUMBER
    input.Body.priceInfo.currencyCode == STRING
    input.Body.priceInfo.originalPrice == NUMBER
    input.Body.priceInfo.price == NUMBER
    input.Body.priceInfo.priceEffectiveTime == STRING
    input.Body.priceInfo.priceExpireTime == STRING
    input.Body.primaryProductId == STRING
    input.Body.promotions[_].promotionId == STRING
    input.Body.publishTime == STRING
    input.Body.rating.averageRating == NUMBER
    input.Body.rating.ratingCount == INTEGER
    input.Body.rating.ratingHistogram[_] == INTEGER
    input.Body.retrievableFields == STRING
    input.Body.sizes[_] == STRING
    input.Body.tags[_] == STRING
    input.Body.title == STRING
    input.Body.ttl == STRING
    input.Body.type == enum_GoogleCloudRetailV2ProductType[_]
    input.Body.uri == STRING
    input.ReqMap.parent == STRING
    input.Qs.productId == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.branches.products.delete

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.branches.products.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.branches.products.import

enum_GoogleCloudRetailV2ImportProductsRequestReconciliationMode := [ "RECONCILIATION_MODE_UNSPECIFIED", "INCREMENTAL", "FULL" ]
enum_GoogleCloudRetailV2ProductAvailability := [ "AVAILABILITY_UNSPECIFIED", "IN_STOCK", "OUT_OF_STOCK", "PREORDER", "BACKORDER" ]
enum_GoogleCloudRetailV2ProductType := [ "TYPE_UNSPECIFIED", "PRIMARY", "VARIANT", "COLLECTION" ]

valid {
    input.Body.errorsConfig.gcsPrefix == STRING
    input.Body.inputConfig.bigQuerySource.dataSchema == STRING
    input.Body.inputConfig.bigQuerySource.datasetId == STRING
    input.Body.inputConfig.bigQuerySource.gcsStagingDir == STRING
    input.Body.inputConfig.bigQuerySource.partitionDate.day == INTEGER
    input.Body.inputConfig.bigQuerySource.partitionDate.month == INTEGER
    input.Body.inputConfig.bigQuerySource.partitionDate.year == INTEGER
    input.Body.inputConfig.bigQuerySource.projectId == STRING
    input.Body.inputConfig.bigQuerySource.tableId == STRING
    input.Body.inputConfig.gcsSource.dataSchema == STRING
    input.Body.inputConfig.gcsSource.inputUris[_] == STRING
    input.Body.inputConfig.productInlineSource.products[_].attributes.STRING.indexable == BOOLEAN
    input.Body.inputConfig.productInlineSource.products[_].attributes.STRING.numbers[_] == NUMBER
    input.Body.inputConfig.productInlineSource.products[_].attributes.STRING.searchable == BOOLEAN
    input.Body.inputConfig.productInlineSource.products[_].attributes.STRING.text[_] == STRING
    input.Body.inputConfig.productInlineSource.products[_].audience.ageGroups[_] == STRING
    input.Body.inputConfig.productInlineSource.products[_].audience.genders[_] == STRING
    input.Body.inputConfig.productInlineSource.products[_].availability == enum_GoogleCloudRetailV2ProductAvailability[_]
    input.Body.inputConfig.productInlineSource.products[_].availableQuantity == INTEGER
    input.Body.inputConfig.productInlineSource.products[_].availableTime == STRING
    input.Body.inputConfig.productInlineSource.products[_].brands[_] == STRING
    input.Body.inputConfig.productInlineSource.products[_].categories[_] == STRING
    input.Body.inputConfig.productInlineSource.products[_].collectionMemberIds[_] == STRING
    input.Body.inputConfig.productInlineSource.products[_].colorInfo.colorFamilies[_] == STRING
    input.Body.inputConfig.productInlineSource.products[_].colorInfo.colors[_] == STRING
    input.Body.inputConfig.productInlineSource.products[_].conditions[_] == STRING
    input.Body.inputConfig.productInlineSource.products[_].description == STRING
    input.Body.inputConfig.productInlineSource.products[_].expireTime == STRING
    input.Body.inputConfig.productInlineSource.products[_].fulfillmentInfo[_].placeIds[_] == STRING
    input.Body.inputConfig.productInlineSource.products[_].fulfillmentInfo[_].type == STRING
    input.Body.inputConfig.productInlineSource.products[_].gtin == STRING
    input.Body.inputConfig.productInlineSource.products[_].id == STRING
    input.Body.inputConfig.productInlineSource.products[_].images[_].height == INTEGER
    input.Body.inputConfig.productInlineSource.products[_].images[_].uri == STRING
    input.Body.inputConfig.productInlineSource.products[_].images[_].width == INTEGER
    input.Body.inputConfig.productInlineSource.products[_].languageCode == STRING
    input.Body.inputConfig.productInlineSource.products[_].materials[_] == STRING
    input.Body.inputConfig.productInlineSource.products[_].name == STRING
    input.Body.inputConfig.productInlineSource.products[_].patterns[_] == STRING
    input.Body.inputConfig.productInlineSource.products[_].priceInfo.cost == NUMBER
    input.Body.inputConfig.productInlineSource.products[_].priceInfo.currencyCode == STRING
    input.Body.inputConfig.productInlineSource.products[_].priceInfo.originalPrice == NUMBER
    input.Body.inputConfig.productInlineSource.products[_].priceInfo.price == NUMBER
    input.Body.inputConfig.productInlineSource.products[_].priceInfo.priceEffectiveTime == STRING
    input.Body.inputConfig.productInlineSource.products[_].priceInfo.priceExpireTime == STRING
    input.Body.inputConfig.productInlineSource.products[_].primaryProductId == STRING
    input.Body.inputConfig.productInlineSource.products[_].promotions[_].promotionId == STRING
    input.Body.inputConfig.productInlineSource.products[_].publishTime == STRING
    input.Body.inputConfig.productInlineSource.products[_].rating.averageRating == NUMBER
    input.Body.inputConfig.productInlineSource.products[_].rating.ratingCount == INTEGER
    input.Body.inputConfig.productInlineSource.products[_].rating.ratingHistogram[_] == INTEGER
    input.Body.inputConfig.productInlineSource.products[_].retrievableFields == STRING
    input.Body.inputConfig.productInlineSource.products[_].sizes[_] == STRING
    input.Body.inputConfig.productInlineSource.products[_].tags[_] == STRING
    input.Body.inputConfig.productInlineSource.products[_].title == STRING
    input.Body.inputConfig.productInlineSource.products[_].ttl == STRING
    input.Body.inputConfig.productInlineSource.products[_].type == enum_GoogleCloudRetailV2ProductType[_]
    input.Body.inputConfig.productInlineSource.products[_].uri == STRING
    input.Body.notificationPubsubTopic == STRING
    input.Body.reconciliationMode == enum_GoogleCloudRetailV2ImportProductsRequestReconciliationMode[_]
    input.Body.requestId == STRING
    input.Body.updateMask == STRING
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.branches.products.list

valid {
    input.ReqMap.parent == STRING
    input.Qs.filter == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.Qs.readMask == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.branches.products.patch

enum_GoogleCloudRetailV2ProductAvailability := [ "AVAILABILITY_UNSPECIFIED", "IN_STOCK", "OUT_OF_STOCK", "PREORDER", "BACKORDER" ]
enum_GoogleCloudRetailV2ProductType := [ "TYPE_UNSPECIFIED", "PRIMARY", "VARIANT", "COLLECTION" ]

valid {
    input.Body.attributes.STRING.indexable == BOOLEAN
    input.Body.attributes.STRING.numbers[_] == NUMBER
    input.Body.attributes.STRING.searchable == BOOLEAN
    input.Body.attributes.STRING.text[_] == STRING
    input.Body.audience.ageGroups[_] == STRING
    input.Body.audience.genders[_] == STRING
    input.Body.availability == enum_GoogleCloudRetailV2ProductAvailability[_]
    input.Body.availableQuantity == INTEGER
    input.Body.availableTime == STRING
    input.Body.brands[_] == STRING
    input.Body.categories[_] == STRING
    input.Body.collectionMemberIds[_] == STRING
    input.Body.colorInfo.colorFamilies[_] == STRING
    input.Body.colorInfo.colors[_] == STRING
    input.Body.conditions[_] == STRING
    input.Body.description == STRING
    input.Body.expireTime == STRING
    input.Body.fulfillmentInfo[_].placeIds[_] == STRING
    input.Body.fulfillmentInfo[_].type == STRING
    input.Body.gtin == STRING
    input.Body.id == STRING
    input.Body.images[_].height == INTEGER
    input.Body.images[_].uri == STRING
    input.Body.images[_].width == INTEGER
    input.Body.languageCode == STRING
    input.Body.materials[_] == STRING
    input.Body.name == STRING
    input.Body.patterns[_] == STRING
    input.Body.priceInfo.cost == NUMBER
    input.Body.priceInfo.currencyCode == STRING
    input.Body.priceInfo.originalPrice == NUMBER
    input.Body.priceInfo.price == NUMBER
    input.Body.priceInfo.priceEffectiveTime == STRING
    input.Body.priceInfo.priceExpireTime == STRING
    input.Body.primaryProductId == STRING
    input.Body.promotions[_].promotionId == STRING
    input.Body.publishTime == STRING
    input.Body.rating.averageRating == NUMBER
    input.Body.rating.ratingCount == INTEGER
    input.Body.rating.ratingHistogram[_] == INTEGER
    input.Body.retrievableFields == STRING
    input.Body.sizes[_] == STRING
    input.Body.tags[_] == STRING
    input.Body.title == STRING
    input.Body.ttl == STRING
    input.Body.type == enum_GoogleCloudRetailV2ProductType[_]
    input.Body.uri == STRING
    input.ReqMap.name == STRING
    input.Qs.allowMissing == BOOLEAN
    input.Qs.updateMask == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.branches.products.purge

valid {
    input.Body.filter == STRING
    input.Body.force == BOOLEAN
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.branches.products.removeFulfillmentPlaces

valid {
    input.Body.allowMissing == BOOLEAN
    input.Body.placeIds[_] == STRING
    input.Body.removeTime == STRING
    input.Body.type == STRING
    input.ReqMap.product == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.branches.products.removeLocalInventories

valid {
    input.Body.allowMissing == BOOLEAN
    input.Body.placeIds[_] == STRING
    input.Body.removeTime == STRING
    input.ReqMap.product == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.branches.products.setInventory

enum_GoogleCloudRetailV2ProductAvailability := [ "AVAILABILITY_UNSPECIFIED", "IN_STOCK", "OUT_OF_STOCK", "PREORDER", "BACKORDER" ]
enum_GoogleCloudRetailV2ProductType := [ "TYPE_UNSPECIFIED", "PRIMARY", "VARIANT", "COLLECTION" ]

valid {
    input.Body.allowMissing == BOOLEAN
    input.Body.inventory.attributes.STRING.indexable == BOOLEAN
    input.Body.inventory.attributes.STRING.numbers[_] == NUMBER
    input.Body.inventory.attributes.STRING.searchable == BOOLEAN
    input.Body.inventory.attributes.STRING.text[_] == STRING
    input.Body.inventory.audience.ageGroups[_] == STRING
    input.Body.inventory.audience.genders[_] == STRING
    input.Body.inventory.availability == enum_GoogleCloudRetailV2ProductAvailability[_]
    input.Body.inventory.availableQuantity == INTEGER
    input.Body.inventory.availableTime == STRING
    input.Body.inventory.brands[_] == STRING
    input.Body.inventory.categories[_] == STRING
    input.Body.inventory.collectionMemberIds[_] == STRING
    input.Body.inventory.colorInfo.colorFamilies[_] == STRING
    input.Body.inventory.colorInfo.colors[_] == STRING
    input.Body.inventory.conditions[_] == STRING
    input.Body.inventory.description == STRING
    input.Body.inventory.expireTime == STRING
    input.Body.inventory.fulfillmentInfo[_].placeIds[_] == STRING
    input.Body.inventory.fulfillmentInfo[_].type == STRING
    input.Body.inventory.gtin == STRING
    input.Body.inventory.id == STRING
    input.Body.inventory.images[_].height == INTEGER
    input.Body.inventory.images[_].uri == STRING
    input.Body.inventory.images[_].width == INTEGER
    input.Body.inventory.languageCode == STRING
    input.Body.inventory.materials[_] == STRING
    input.Body.inventory.name == STRING
    input.Body.inventory.patterns[_] == STRING
    input.Body.inventory.priceInfo.cost == NUMBER
    input.Body.inventory.priceInfo.currencyCode == STRING
    input.Body.inventory.priceInfo.originalPrice == NUMBER
    input.Body.inventory.priceInfo.price == NUMBER
    input.Body.inventory.priceInfo.priceEffectiveTime == STRING
    input.Body.inventory.priceInfo.priceExpireTime == STRING
    input.Body.inventory.primaryProductId == STRING
    input.Body.inventory.promotions[_].promotionId == STRING
    input.Body.inventory.publishTime == STRING
    input.Body.inventory.rating.averageRating == NUMBER
    input.Body.inventory.rating.ratingCount == INTEGER
    input.Body.inventory.rating.ratingHistogram[_] == INTEGER
    input.Body.inventory.retrievableFields == STRING
    input.Body.inventory.sizes[_] == STRING
    input.Body.inventory.tags[_] == STRING
    input.Body.inventory.title == STRING
    input.Body.inventory.ttl == STRING
    input.Body.inventory.type == enum_GoogleCloudRetailV2ProductType[_]
    input.Body.inventory.uri == STRING
    input.Body.setMask == STRING
    input.Body.setTime == STRING
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.completeQuery

valid {
    input.ReqMap.catalog == STRING
    input.Qs.dataset == STRING
    input.Qs.deviceType == STRING
    input.Qs.entity == STRING
    input.Qs.languageCodes == STRING
    input.Qs.maxSuggestions == INTEGER
    input.Qs.query == STRING
    input.Qs.visitorId == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.completionData.import

valid {
    input.Body.inputConfig.bigQuerySource.dataSchema == STRING
    input.Body.inputConfig.bigQuerySource.datasetId == STRING
    input.Body.inputConfig.bigQuerySource.gcsStagingDir == STRING
    input.Body.inputConfig.bigQuerySource.partitionDate.day == INTEGER
    input.Body.inputConfig.bigQuerySource.partitionDate.month == INTEGER
    input.Body.inputConfig.bigQuerySource.partitionDate.year == INTEGER
    input.Body.inputConfig.bigQuerySource.projectId == STRING
    input.Body.inputConfig.bigQuerySource.tableId == STRING
    input.Body.notificationPubsubTopic == STRING
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.controls.create

enum_GoogleCloudRetailV2ControlSearchSolutionUseCase := [ "SEARCH_SOLUTION_USE_CASE_UNSPECIFIED", "SEARCH_SOLUTION_USE_CASE_SEARCH", "SEARCH_SOLUTION_USE_CASE_BROWSE" ]
enum_GoogleCloudRetailV2ControlSolutionTypes := [ "SOLUTION_TYPE_UNSPECIFIED", "SOLUTION_TYPE_RECOMMENDATION", "SOLUTION_TYPE_SEARCH" ]

valid {
    input.Body.displayName == STRING
    input.Body.name == STRING
    input.Body.rule.boostAction.boost == NUMBER
    input.Body.rule.boostAction.productsFilter == STRING
    input.Body.rule.condition.activeTimeRange[_].endTime == STRING
    input.Body.rule.condition.activeTimeRange[_].startTime == STRING
    input.Body.rule.condition.pageCategories[_] == STRING
    input.Body.rule.condition.queryTerms[_].fullMatch == BOOLEAN
    input.Body.rule.condition.queryTerms[_].value == STRING
    input.Body.rule.doNotAssociateAction.doNotAssociateTerms[_] == STRING
    input.Body.rule.doNotAssociateAction.queryTerms[_] == STRING
    input.Body.rule.doNotAssociateAction.terms[_] == STRING
    input.Body.rule.filterAction.filter == STRING
    input.Body.rule.forceReturnFacetAction.facetPositionAdjustments[_].attributeName == STRING
    input.Body.rule.forceReturnFacetAction.facetPositionAdjustments[_].position == INTEGER
    input.Body.rule.ignoreAction.ignoreTerms[_] == STRING
    input.Body.rule.onewaySynonymsAction.onewayTerms[_] == STRING
    input.Body.rule.onewaySynonymsAction.queryTerms[_] == STRING
    input.Body.rule.onewaySynonymsAction.synonyms[_] == STRING
    input.Body.rule.redirectAction.redirectUri == STRING
    input.Body.rule.removeFacetAction.attributeNames[_] == STRING
    input.Body.rule.replacementAction.queryTerms[_] == STRING
    input.Body.rule.replacementAction.replacementTerm == STRING
    input.Body.rule.replacementAction.term == STRING
    input.Body.rule.twowaySynonymsAction.synonyms[_] == STRING
    input.Body.searchSolutionUseCase[_] == enum_GoogleCloudRetailV2ControlSearchSolutionUseCase[_]
    input.Body.solutionTypes[_] == enum_GoogleCloudRetailV2ControlSolutionTypes[_]
    input.ReqMap.parent == STRING
    input.Qs.controlId == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.controls.delete

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.controls.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.controls.list

valid {
    input.ReqMap.parent == STRING
    input.Qs.filter == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.controls.patch

enum_GoogleCloudRetailV2ControlSearchSolutionUseCase := [ "SEARCH_SOLUTION_USE_CASE_UNSPECIFIED", "SEARCH_SOLUTION_USE_CASE_SEARCH", "SEARCH_SOLUTION_USE_CASE_BROWSE" ]
enum_GoogleCloudRetailV2ControlSolutionTypes := [ "SOLUTION_TYPE_UNSPECIFIED", "SOLUTION_TYPE_RECOMMENDATION", "SOLUTION_TYPE_SEARCH" ]

valid {
    input.Body.displayName == STRING
    input.Body.name == STRING
    input.Body.rule.boostAction.boost == NUMBER
    input.Body.rule.boostAction.productsFilter == STRING
    input.Body.rule.condition.activeTimeRange[_].endTime == STRING
    input.Body.rule.condition.activeTimeRange[_].startTime == STRING
    input.Body.rule.condition.pageCategories[_] == STRING
    input.Body.rule.condition.queryTerms[_].fullMatch == BOOLEAN
    input.Body.rule.condition.queryTerms[_].value == STRING
    input.Body.rule.doNotAssociateAction.doNotAssociateTerms[_] == STRING
    input.Body.rule.doNotAssociateAction.queryTerms[_] == STRING
    input.Body.rule.doNotAssociateAction.terms[_] == STRING
    input.Body.rule.filterAction.filter == STRING
    input.Body.rule.forceReturnFacetAction.facetPositionAdjustments[_].attributeName == STRING
    input.Body.rule.forceReturnFacetAction.facetPositionAdjustments[_].position == INTEGER
    input.Body.rule.ignoreAction.ignoreTerms[_] == STRING
    input.Body.rule.onewaySynonymsAction.onewayTerms[_] == STRING
    input.Body.rule.onewaySynonymsAction.queryTerms[_] == STRING
    input.Body.rule.onewaySynonymsAction.synonyms[_] == STRING
    input.Body.rule.redirectAction.redirectUri == STRING
    input.Body.rule.removeFacetAction.attributeNames[_] == STRING
    input.Body.rule.replacementAction.queryTerms[_] == STRING
    input.Body.rule.replacementAction.replacementTerm == STRING
    input.Body.rule.replacementAction.term == STRING
    input.Body.rule.twowaySynonymsAction.synonyms[_] == STRING
    input.Body.searchSolutionUseCase[_] == enum_GoogleCloudRetailV2ControlSearchSolutionUseCase[_]
    input.Body.solutionTypes[_] == enum_GoogleCloudRetailV2ControlSolutionTypes[_]
    input.ReqMap.name == STRING
    input.Qs.updateMask == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.exportAnalyticsMetrics

valid {
    input.Body.filter == STRING
    input.Body.outputConfig.bigqueryDestination.datasetId == STRING
    input.Body.outputConfig.bigqueryDestination.tableIdPrefix == STRING
    input.Body.outputConfig.bigqueryDestination.tableType == STRING
    input.Body.outputConfig.gcsDestination.outputUriPrefix == STRING
    input.ReqMap.catalog == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.getAttributesConfig

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.getCompletionConfig

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.getDefaultBranch

valid {
    input.ReqMap.catalog == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.list

valid {
    input.ReqMap.parent == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.merchantCenterAccountLinks.create

valid {
    input.Body.branchId == STRING
    input.Body.feedFilters[_].primaryFeedId == STRING
    input.Body.feedFilters[_].primaryFeedName == STRING
    input.Body.feedLabel == STRING
    input.Body.languageCode == STRING
    input.Body.merchantCenterAccountId == STRING
    input.Body.source == STRING
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.merchantCenterAccountLinks.delete

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.merchantCenterAccountLinks.list

valid {
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.models.create

enum_GoogleCloudRetailV2ModelFilteringOption := [ "RECOMMENDATIONS_FILTERING_OPTION_UNSPECIFIED", "RECOMMENDATIONS_FILTERING_DISABLED", "RECOMMENDATIONS_FILTERING_ENABLED" ]
enum_GoogleCloudRetailV2ModelFrequentlyBoughtTogetherFeaturesConfigContextProductsType := [ "CONTEXT_PRODUCTS_TYPE_UNSPECIFIED", "SINGLE_CONTEXT_PRODUCT", "MULTIPLE_CONTEXT_PRODUCTS" ]
enum_GoogleCloudRetailV2ModelPeriodicTuningState := [ "PERIODIC_TUNING_STATE_UNSPECIFIED", "PERIODIC_TUNING_DISABLED", "ALL_TUNING_DISABLED", "PERIODIC_TUNING_ENABLED" ]
enum_GoogleCloudRetailV2ModelTrainingState := [ "TRAINING_STATE_UNSPECIFIED", "PAUSED", "TRAINING" ]

valid {
    input.Body.displayName == STRING
    input.Body.filteringOption == enum_GoogleCloudRetailV2ModelFilteringOption[_]
    input.Body.modelFeaturesConfig.frequentlyBoughtTogetherConfig.contextProductsType == enum_GoogleCloudRetailV2ModelFrequentlyBoughtTogetherFeaturesConfigContextProductsType[_]
    input.Body.name == STRING
    input.Body.optimizationObjective == STRING
    input.Body.periodicTuningState == enum_GoogleCloudRetailV2ModelPeriodicTuningState[_]
    input.Body.trainingState == enum_GoogleCloudRetailV2ModelTrainingState[_]
    input.Body.type == STRING
    input.ReqMap.parent == STRING
    input.Qs.dryRun == BOOLEAN
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.models.delete

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.models.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.models.list

valid {
    input.ReqMap.parent == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.models.patch

enum_GoogleCloudRetailV2ModelFilteringOption := [ "RECOMMENDATIONS_FILTERING_OPTION_UNSPECIFIED", "RECOMMENDATIONS_FILTERING_DISABLED", "RECOMMENDATIONS_FILTERING_ENABLED" ]
enum_GoogleCloudRetailV2ModelFrequentlyBoughtTogetherFeaturesConfigContextProductsType := [ "CONTEXT_PRODUCTS_TYPE_UNSPECIFIED", "SINGLE_CONTEXT_PRODUCT", "MULTIPLE_CONTEXT_PRODUCTS" ]
enum_GoogleCloudRetailV2ModelPeriodicTuningState := [ "PERIODIC_TUNING_STATE_UNSPECIFIED", "PERIODIC_TUNING_DISABLED", "ALL_TUNING_DISABLED", "PERIODIC_TUNING_ENABLED" ]
enum_GoogleCloudRetailV2ModelTrainingState := [ "TRAINING_STATE_UNSPECIFIED", "PAUSED", "TRAINING" ]

valid {
    input.Body.displayName == STRING
    input.Body.filteringOption == enum_GoogleCloudRetailV2ModelFilteringOption[_]
    input.Body.modelFeaturesConfig.frequentlyBoughtTogetherConfig.contextProductsType == enum_GoogleCloudRetailV2ModelFrequentlyBoughtTogetherFeaturesConfigContextProductsType[_]
    input.Body.name == STRING
    input.Body.optimizationObjective == STRING
    input.Body.periodicTuningState == enum_GoogleCloudRetailV2ModelPeriodicTuningState[_]
    input.Body.trainingState == enum_GoogleCloudRetailV2ModelTrainingState[_]
    input.Body.type == STRING
    input.ReqMap.name == STRING
    input.Qs.updateMask == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.models.pause

valid {
    input.Body.STRING == STRING
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.models.resume

valid {
    input.Body.STRING == STRING
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.models.tune

valid {
    input.Body.STRING == STRING
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.operations.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.operations.list

valid {
    input.ReqMap.name == STRING
    input.Qs.filter == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.patch

valid {
    input.Body.displayName == STRING
    input.Body.name == STRING
    input.Body.productLevelConfig.ingestionProductType == STRING
    input.Body.productLevelConfig.merchantCenterProductIdField == STRING
    input.ReqMap.name == STRING
    input.Qs.updateMask == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.placements.predict

enum_GoogleCloudRetailV2ProductAvailability := [ "AVAILABILITY_UNSPECIFIED", "IN_STOCK", "OUT_OF_STOCK", "PREORDER", "BACKORDER" ]
enum_GoogleCloudRetailV2ProductType := [ "TYPE_UNSPECIFIED", "PRIMARY", "VARIANT", "COLLECTION" ]

valid {
    input.Body.filter == STRING
    input.Body.labels.STRING == STRING
    input.Body.pageSize == INTEGER
    input.Body.pageToken == STRING
    input.Body.params.STRING == ANY
    input.Body.userEvent.attributes.STRING.indexable == BOOLEAN
    input.Body.userEvent.attributes.STRING.numbers[_] == NUMBER
    input.Body.userEvent.attributes.STRING.searchable == BOOLEAN
    input.Body.userEvent.attributes.STRING.text[_] == STRING
    input.Body.userEvent.attributionToken == STRING
    input.Body.userEvent.cartId == STRING
    input.Body.userEvent.completionDetail.completionAttributionToken == STRING
    input.Body.userEvent.completionDetail.selectedPosition == INTEGER
    input.Body.userEvent.completionDetail.selectedSuggestion == STRING
    input.Body.userEvent.entity == STRING
    input.Body.userEvent.eventTime == STRING
    input.Body.userEvent.eventType == STRING
    input.Body.userEvent.experimentIds[_] == STRING
    input.Body.userEvent.filter == STRING
    input.Body.userEvent.offset == INTEGER
    input.Body.userEvent.orderBy == STRING
    input.Body.userEvent.pageCategories[_] == STRING
    input.Body.userEvent.pageViewId == STRING
    input.Body.userEvent.productDetails[_].product.attributes.STRING.indexable == BOOLEAN
    input.Body.userEvent.productDetails[_].product.attributes.STRING.numbers[_] == NUMBER
    input.Body.userEvent.productDetails[_].product.attributes.STRING.searchable == BOOLEAN
    input.Body.userEvent.productDetails[_].product.attributes.STRING.text[_] == STRING
    input.Body.userEvent.productDetails[_].product.audience.ageGroups[_] == STRING
    input.Body.userEvent.productDetails[_].product.audience.genders[_] == STRING
    input.Body.userEvent.productDetails[_].product.availability == enum_GoogleCloudRetailV2ProductAvailability[_]
    input.Body.userEvent.productDetails[_].product.availableQuantity == INTEGER
    input.Body.userEvent.productDetails[_].product.availableTime == STRING
    input.Body.userEvent.productDetails[_].product.brands[_] == STRING
    input.Body.userEvent.productDetails[_].product.categories[_] == STRING
    input.Body.userEvent.productDetails[_].product.collectionMemberIds[_] == STRING
    input.Body.userEvent.productDetails[_].product.colorInfo.colorFamilies[_] == STRING
    input.Body.userEvent.productDetails[_].product.colorInfo.colors[_] == STRING
    input.Body.userEvent.productDetails[_].product.conditions[_] == STRING
    input.Body.userEvent.productDetails[_].product.description == STRING
    input.Body.userEvent.productDetails[_].product.expireTime == STRING
    input.Body.userEvent.productDetails[_].product.fulfillmentInfo[_].placeIds[_] == STRING
    input.Body.userEvent.productDetails[_].product.fulfillmentInfo[_].type == STRING
    input.Body.userEvent.productDetails[_].product.gtin == STRING
    input.Body.userEvent.productDetails[_].product.id == STRING
    input.Body.userEvent.productDetails[_].product.images[_].height == INTEGER
    input.Body.userEvent.productDetails[_].product.images[_].uri == STRING
    input.Body.userEvent.productDetails[_].product.images[_].width == INTEGER
    input.Body.userEvent.productDetails[_].product.languageCode == STRING
    input.Body.userEvent.productDetails[_].product.materials[_] == STRING
    input.Body.userEvent.productDetails[_].product.name == STRING
    input.Body.userEvent.productDetails[_].product.patterns[_] == STRING
    input.Body.userEvent.productDetails[_].product.priceInfo.cost == NUMBER
    input.Body.userEvent.productDetails[_].product.priceInfo.currencyCode == STRING
    input.Body.userEvent.productDetails[_].product.priceInfo.originalPrice == NUMBER
    input.Body.userEvent.productDetails[_].product.priceInfo.price == NUMBER
    input.Body.userEvent.productDetails[_].product.priceInfo.priceEffectiveTime == STRING
    input.Body.userEvent.productDetails[_].product.priceInfo.priceExpireTime == STRING
    input.Body.userEvent.productDetails[_].product.primaryProductId == STRING
    input.Body.userEvent.productDetails[_].product.promotions[_].promotionId == STRING
    input.Body.userEvent.productDetails[_].product.publishTime == STRING
    input.Body.userEvent.productDetails[_].product.rating.averageRating == NUMBER
    input.Body.userEvent.productDetails[_].product.rating.ratingCount == INTEGER
    input.Body.userEvent.productDetails[_].product.rating.ratingHistogram[_] == INTEGER
    input.Body.userEvent.productDetails[_].product.retrievableFields == STRING
    input.Body.userEvent.productDetails[_].product.sizes[_] == STRING
    input.Body.userEvent.productDetails[_].product.tags[_] == STRING
    input.Body.userEvent.productDetails[_].product.title == STRING
    input.Body.userEvent.productDetails[_].product.ttl == STRING
    input.Body.userEvent.productDetails[_].product.type == enum_GoogleCloudRetailV2ProductType[_]
    input.Body.userEvent.productDetails[_].product.uri == STRING
    input.Body.userEvent.productDetails[_].quantity == INTEGER
    input.Body.userEvent.purchaseTransaction.cost == NUMBER
    input.Body.userEvent.purchaseTransaction.currencyCode == STRING
    input.Body.userEvent.purchaseTransaction.id == STRING
    input.Body.userEvent.purchaseTransaction.revenue == NUMBER
    input.Body.userEvent.purchaseTransaction.tax == NUMBER
    input.Body.userEvent.referrerUri == STRING
    input.Body.userEvent.searchQuery == STRING
    input.Body.userEvent.sessionId == STRING
    input.Body.userEvent.uri == STRING
    input.Body.userEvent.userInfo.directUserRequest == BOOLEAN
    input.Body.userEvent.userInfo.ipAddress == STRING
    input.Body.userEvent.userInfo.userAgent == STRING
    input.Body.userEvent.userInfo.userId == STRING
    input.Body.userEvent.visitorId == STRING
    input.Body.validateOnly == BOOLEAN
    input.ReqMap.placement == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.placements.search

enum_GoogleCloudRetailV2SearchRequestDynamicFacetSpecMode := [ "MODE_UNSPECIFIED", "DISABLED", "ENABLED" ]
enum_GoogleCloudRetailV2SearchRequestPersonalizationSpecMode := [ "MODE_UNSPECIFIED", "AUTO", "DISABLED" ]
enum_GoogleCloudRetailV2SearchRequestQueryExpansionSpecCondition := [ "CONDITION_UNSPECIFIED", "DISABLED", "AUTO" ]
enum_GoogleCloudRetailV2SearchRequestSearchMode := [ "SEARCH_MODE_UNSPECIFIED", "PRODUCT_SEARCH_ONLY", "FACETED_SEARCH_ONLY" ]
enum_GoogleCloudRetailV2SearchRequestSpellCorrectionSpecMode := [ "MODE_UNSPECIFIED", "SUGGESTION_ONLY", "AUTO" ]

valid {
    input.Body.boostSpec.conditionBoostSpecs[_].boost == NUMBER
    input.Body.boostSpec.conditionBoostSpecs[_].condition == STRING
    input.Body.boostSpec.skipBoostSpecValidation == BOOLEAN
    input.Body.branch == STRING
    input.Body.canonicalFilter == STRING
    input.Body.dynamicFacetSpec.mode == enum_GoogleCloudRetailV2SearchRequestDynamicFacetSpecMode[_]
    input.Body.entity == STRING
    input.Body.facetSpecs[_].enableDynamicPosition == BOOLEAN
    input.Body.facetSpecs[_].excludedFilterKeys[_] == STRING
    input.Body.facetSpecs[_].facetKey.caseInsensitive == BOOLEAN
    input.Body.facetSpecs[_].facetKey.contains[_] == STRING
    input.Body.facetSpecs[_].facetKey.intervals[_].exclusiveMaximum == NUMBER
    input.Body.facetSpecs[_].facetKey.intervals[_].exclusiveMinimum == NUMBER
    input.Body.facetSpecs[_].facetKey.intervals[_].maximum == NUMBER
    input.Body.facetSpecs[_].facetKey.intervals[_].minimum == NUMBER
    input.Body.facetSpecs[_].facetKey.key == STRING
    input.Body.facetSpecs[_].facetKey.orderBy == STRING
    input.Body.facetSpecs[_].facetKey.prefixes[_] == STRING
    input.Body.facetSpecs[_].facetKey.query == STRING
    input.Body.facetSpecs[_].facetKey.restrictedValues[_] == STRING
    input.Body.facetSpecs[_].facetKey.returnMinMax == BOOLEAN
    input.Body.facetSpecs[_].limit == INTEGER
    input.Body.filter == STRING
    input.Body.labels.STRING == STRING
    input.Body.offset == INTEGER
    input.Body.orderBy == STRING
    input.Body.pageCategories[_] == STRING
    input.Body.pageSize == INTEGER
    input.Body.pageToken == STRING
    input.Body.personalizationSpec.mode == enum_GoogleCloudRetailV2SearchRequestPersonalizationSpecMode[_]
    input.Body.query == STRING
    input.Body.queryExpansionSpec.condition == enum_GoogleCloudRetailV2SearchRequestQueryExpansionSpecCondition[_]
    input.Body.queryExpansionSpec.pinUnexpandedResults == BOOLEAN
    input.Body.searchMode == enum_GoogleCloudRetailV2SearchRequestSearchMode[_]
    input.Body.spellCorrectionSpec.mode == enum_GoogleCloudRetailV2SearchRequestSpellCorrectionSpecMode[_]
    input.Body.userInfo.directUserRequest == BOOLEAN
    input.Body.userInfo.ipAddress == STRING
    input.Body.userInfo.userAgent == STRING
    input.Body.userInfo.userId == STRING
    input.Body.variantRollupKeys[_] == STRING
    input.Body.visitorId == STRING
    input.ReqMap.placement == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.servingConfigs.addControl

valid {
    input.Body.controlId == STRING
    input.ReqMap.servingConfig == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.servingConfigs.create

enum_GoogleCloudRetailV2SearchRequestDynamicFacetSpecMode := [ "MODE_UNSPECIFIED", "DISABLED", "ENABLED" ]
enum_GoogleCloudRetailV2SearchRequestPersonalizationSpecMode := [ "MODE_UNSPECIFIED", "AUTO", "DISABLED" ]
enum_GoogleCloudRetailV2ServingConfigDiversityType := [ "DIVERSITY_TYPE_UNSPECIFIED", "RULE_BASED_DIVERSITY", "DATA_DRIVEN_DIVERSITY" ]
enum_GoogleCloudRetailV2ServingConfigSolutionTypes := [ "SOLUTION_TYPE_UNSPECIFIED", "SOLUTION_TYPE_RECOMMENDATION", "SOLUTION_TYPE_SEARCH" ]

valid {
    input.Body.boostControlIds[_] == STRING
    input.Body.displayName == STRING
    input.Body.diversityLevel == STRING
    input.Body.diversityType == enum_GoogleCloudRetailV2ServingConfigDiversityType[_]
    input.Body.doNotAssociateControlIds[_] == STRING
    input.Body.dynamicFacetSpec.mode == enum_GoogleCloudRetailV2SearchRequestDynamicFacetSpecMode[_]
    input.Body.enableCategoryFilterLevel == STRING
    input.Body.facetControlIds[_] == STRING
    input.Body.filterControlIds[_] == STRING
    input.Body.ignoreControlIds[_] == STRING
    input.Body.ignoreRecsDenylist == BOOLEAN
    input.Body.modelId == STRING
    input.Body.name == STRING
    input.Body.onewaySynonymsControlIds[_] == STRING
    input.Body.personalizationSpec.mode == enum_GoogleCloudRetailV2SearchRequestPersonalizationSpecMode[_]
    input.Body.priceRerankingLevel == STRING
    input.Body.redirectControlIds[_] == STRING
    input.Body.replacementControlIds[_] == STRING
    input.Body.solutionTypes[_] == enum_GoogleCloudRetailV2ServingConfigSolutionTypes[_]
    input.Body.twowaySynonymsControlIds[_] == STRING
    input.ReqMap.parent == STRING
    input.Qs.servingConfigId == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.servingConfigs.delete

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.servingConfigs.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.servingConfigs.list

valid {
    input.ReqMap.parent == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.servingConfigs.patch

enum_GoogleCloudRetailV2SearchRequestDynamicFacetSpecMode := [ "MODE_UNSPECIFIED", "DISABLED", "ENABLED" ]
enum_GoogleCloudRetailV2SearchRequestPersonalizationSpecMode := [ "MODE_UNSPECIFIED", "AUTO", "DISABLED" ]
enum_GoogleCloudRetailV2ServingConfigDiversityType := [ "DIVERSITY_TYPE_UNSPECIFIED", "RULE_BASED_DIVERSITY", "DATA_DRIVEN_DIVERSITY" ]
enum_GoogleCloudRetailV2ServingConfigSolutionTypes := [ "SOLUTION_TYPE_UNSPECIFIED", "SOLUTION_TYPE_RECOMMENDATION", "SOLUTION_TYPE_SEARCH" ]

valid {
    input.Body.boostControlIds[_] == STRING
    input.Body.displayName == STRING
    input.Body.diversityLevel == STRING
    input.Body.diversityType == enum_GoogleCloudRetailV2ServingConfigDiversityType[_]
    input.Body.doNotAssociateControlIds[_] == STRING
    input.Body.dynamicFacetSpec.mode == enum_GoogleCloudRetailV2SearchRequestDynamicFacetSpecMode[_]
    input.Body.enableCategoryFilterLevel == STRING
    input.Body.facetControlIds[_] == STRING
    input.Body.filterControlIds[_] == STRING
    input.Body.ignoreControlIds[_] == STRING
    input.Body.ignoreRecsDenylist == BOOLEAN
    input.Body.modelId == STRING
    input.Body.name == STRING
    input.Body.onewaySynonymsControlIds[_] == STRING
    input.Body.personalizationSpec.mode == enum_GoogleCloudRetailV2SearchRequestPersonalizationSpecMode[_]
    input.Body.priceRerankingLevel == STRING
    input.Body.redirectControlIds[_] == STRING
    input.Body.replacementControlIds[_] == STRING
    input.Body.solutionTypes[_] == enum_GoogleCloudRetailV2ServingConfigSolutionTypes[_]
    input.Body.twowaySynonymsControlIds[_] == STRING
    input.ReqMap.name == STRING
    input.Qs.updateMask == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.servingConfigs.predict

enum_GoogleCloudRetailV2ProductAvailability := [ "AVAILABILITY_UNSPECIFIED", "IN_STOCK", "OUT_OF_STOCK", "PREORDER", "BACKORDER" ]
enum_GoogleCloudRetailV2ProductType := [ "TYPE_UNSPECIFIED", "PRIMARY", "VARIANT", "COLLECTION" ]

valid {
    input.Body.filter == STRING
    input.Body.labels.STRING == STRING
    input.Body.pageSize == INTEGER
    input.Body.pageToken == STRING
    input.Body.params.STRING == ANY
    input.Body.userEvent.attributes.STRING.indexable == BOOLEAN
    input.Body.userEvent.attributes.STRING.numbers[_] == NUMBER
    input.Body.userEvent.attributes.STRING.searchable == BOOLEAN
    input.Body.userEvent.attributes.STRING.text[_] == STRING
    input.Body.userEvent.attributionToken == STRING
    input.Body.userEvent.cartId == STRING
    input.Body.userEvent.completionDetail.completionAttributionToken == STRING
    input.Body.userEvent.completionDetail.selectedPosition == INTEGER
    input.Body.userEvent.completionDetail.selectedSuggestion == STRING
    input.Body.userEvent.entity == STRING
    input.Body.userEvent.eventTime == STRING
    input.Body.userEvent.eventType == STRING
    input.Body.userEvent.experimentIds[_] == STRING
    input.Body.userEvent.filter == STRING
    input.Body.userEvent.offset == INTEGER
    input.Body.userEvent.orderBy == STRING
    input.Body.userEvent.pageCategories[_] == STRING
    input.Body.userEvent.pageViewId == STRING
    input.Body.userEvent.productDetails[_].product.attributes.STRING.indexable == BOOLEAN
    input.Body.userEvent.productDetails[_].product.attributes.STRING.numbers[_] == NUMBER
    input.Body.userEvent.productDetails[_].product.attributes.STRING.searchable == BOOLEAN
    input.Body.userEvent.productDetails[_].product.attributes.STRING.text[_] == STRING
    input.Body.userEvent.productDetails[_].product.audience.ageGroups[_] == STRING
    input.Body.userEvent.productDetails[_].product.audience.genders[_] == STRING
    input.Body.userEvent.productDetails[_].product.availability == enum_GoogleCloudRetailV2ProductAvailability[_]
    input.Body.userEvent.productDetails[_].product.availableQuantity == INTEGER
    input.Body.userEvent.productDetails[_].product.availableTime == STRING
    input.Body.userEvent.productDetails[_].product.brands[_] == STRING
    input.Body.userEvent.productDetails[_].product.categories[_] == STRING
    input.Body.userEvent.productDetails[_].product.collectionMemberIds[_] == STRING
    input.Body.userEvent.productDetails[_].product.colorInfo.colorFamilies[_] == STRING
    input.Body.userEvent.productDetails[_].product.colorInfo.colors[_] == STRING
    input.Body.userEvent.productDetails[_].product.conditions[_] == STRING
    input.Body.userEvent.productDetails[_].product.description == STRING
    input.Body.userEvent.productDetails[_].product.expireTime == STRING
    input.Body.userEvent.productDetails[_].product.fulfillmentInfo[_].placeIds[_] == STRING
    input.Body.userEvent.productDetails[_].product.fulfillmentInfo[_].type == STRING
    input.Body.userEvent.productDetails[_].product.gtin == STRING
    input.Body.userEvent.productDetails[_].product.id == STRING
    input.Body.userEvent.productDetails[_].product.images[_].height == INTEGER
    input.Body.userEvent.productDetails[_].product.images[_].uri == STRING
    input.Body.userEvent.productDetails[_].product.images[_].width == INTEGER
    input.Body.userEvent.productDetails[_].product.languageCode == STRING
    input.Body.userEvent.productDetails[_].product.materials[_] == STRING
    input.Body.userEvent.productDetails[_].product.name == STRING
    input.Body.userEvent.productDetails[_].product.patterns[_] == STRING
    input.Body.userEvent.productDetails[_].product.priceInfo.cost == NUMBER
    input.Body.userEvent.productDetails[_].product.priceInfo.currencyCode == STRING
    input.Body.userEvent.productDetails[_].product.priceInfo.originalPrice == NUMBER
    input.Body.userEvent.productDetails[_].product.priceInfo.price == NUMBER
    input.Body.userEvent.productDetails[_].product.priceInfo.priceEffectiveTime == STRING
    input.Body.userEvent.productDetails[_].product.priceInfo.priceExpireTime == STRING
    input.Body.userEvent.productDetails[_].product.primaryProductId == STRING
    input.Body.userEvent.productDetails[_].product.promotions[_].promotionId == STRING
    input.Body.userEvent.productDetails[_].product.publishTime == STRING
    input.Body.userEvent.productDetails[_].product.rating.averageRating == NUMBER
    input.Body.userEvent.productDetails[_].product.rating.ratingCount == INTEGER
    input.Body.userEvent.productDetails[_].product.rating.ratingHistogram[_] == INTEGER
    input.Body.userEvent.productDetails[_].product.retrievableFields == STRING
    input.Body.userEvent.productDetails[_].product.sizes[_] == STRING
    input.Body.userEvent.productDetails[_].product.tags[_] == STRING
    input.Body.userEvent.productDetails[_].product.title == STRING
    input.Body.userEvent.productDetails[_].product.ttl == STRING
    input.Body.userEvent.productDetails[_].product.type == enum_GoogleCloudRetailV2ProductType[_]
    input.Body.userEvent.productDetails[_].product.uri == STRING
    input.Body.userEvent.productDetails[_].quantity == INTEGER
    input.Body.userEvent.purchaseTransaction.cost == NUMBER
    input.Body.userEvent.purchaseTransaction.currencyCode == STRING
    input.Body.userEvent.purchaseTransaction.id == STRING
    input.Body.userEvent.purchaseTransaction.revenue == NUMBER
    input.Body.userEvent.purchaseTransaction.tax == NUMBER
    input.Body.userEvent.referrerUri == STRING
    input.Body.userEvent.searchQuery == STRING
    input.Body.userEvent.sessionId == STRING
    input.Body.userEvent.uri == STRING
    input.Body.userEvent.userInfo.directUserRequest == BOOLEAN
    input.Body.userEvent.userInfo.ipAddress == STRING
    input.Body.userEvent.userInfo.userAgent == STRING
    input.Body.userEvent.userInfo.userId == STRING
    input.Body.userEvent.visitorId == STRING
    input.Body.validateOnly == BOOLEAN
    input.ReqMap.placement == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.servingConfigs.removeControl

valid {
    input.Body.controlId == STRING
    input.ReqMap.servingConfig == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.servingConfigs.search

enum_GoogleCloudRetailV2SearchRequestDynamicFacetSpecMode := [ "MODE_UNSPECIFIED", "DISABLED", "ENABLED" ]
enum_GoogleCloudRetailV2SearchRequestPersonalizationSpecMode := [ "MODE_UNSPECIFIED", "AUTO", "DISABLED" ]
enum_GoogleCloudRetailV2SearchRequestQueryExpansionSpecCondition := [ "CONDITION_UNSPECIFIED", "DISABLED", "AUTO" ]
enum_GoogleCloudRetailV2SearchRequestSearchMode := [ "SEARCH_MODE_UNSPECIFIED", "PRODUCT_SEARCH_ONLY", "FACETED_SEARCH_ONLY" ]
enum_GoogleCloudRetailV2SearchRequestSpellCorrectionSpecMode := [ "MODE_UNSPECIFIED", "SUGGESTION_ONLY", "AUTO" ]

valid {
    input.Body.boostSpec.conditionBoostSpecs[_].boost == NUMBER
    input.Body.boostSpec.conditionBoostSpecs[_].condition == STRING
    input.Body.boostSpec.skipBoostSpecValidation == BOOLEAN
    input.Body.branch == STRING
    input.Body.canonicalFilter == STRING
    input.Body.dynamicFacetSpec.mode == enum_GoogleCloudRetailV2SearchRequestDynamicFacetSpecMode[_]
    input.Body.entity == STRING
    input.Body.facetSpecs[_].enableDynamicPosition == BOOLEAN
    input.Body.facetSpecs[_].excludedFilterKeys[_] == STRING
    input.Body.facetSpecs[_].facetKey.caseInsensitive == BOOLEAN
    input.Body.facetSpecs[_].facetKey.contains[_] == STRING
    input.Body.facetSpecs[_].facetKey.intervals[_].exclusiveMaximum == NUMBER
    input.Body.facetSpecs[_].facetKey.intervals[_].exclusiveMinimum == NUMBER
    input.Body.facetSpecs[_].facetKey.intervals[_].maximum == NUMBER
    input.Body.facetSpecs[_].facetKey.intervals[_].minimum == NUMBER
    input.Body.facetSpecs[_].facetKey.key == STRING
    input.Body.facetSpecs[_].facetKey.orderBy == STRING
    input.Body.facetSpecs[_].facetKey.prefixes[_] == STRING
    input.Body.facetSpecs[_].facetKey.query == STRING
    input.Body.facetSpecs[_].facetKey.restrictedValues[_] == STRING
    input.Body.facetSpecs[_].facetKey.returnMinMax == BOOLEAN
    input.Body.facetSpecs[_].limit == INTEGER
    input.Body.filter == STRING
    input.Body.labels.STRING == STRING
    input.Body.offset == INTEGER
    input.Body.orderBy == STRING
    input.Body.pageCategories[_] == STRING
    input.Body.pageSize == INTEGER
    input.Body.pageToken == STRING
    input.Body.personalizationSpec.mode == enum_GoogleCloudRetailV2SearchRequestPersonalizationSpecMode[_]
    input.Body.query == STRING
    input.Body.queryExpansionSpec.condition == enum_GoogleCloudRetailV2SearchRequestQueryExpansionSpecCondition[_]
    input.Body.queryExpansionSpec.pinUnexpandedResults == BOOLEAN
    input.Body.searchMode == enum_GoogleCloudRetailV2SearchRequestSearchMode[_]
    input.Body.spellCorrectionSpec.mode == enum_GoogleCloudRetailV2SearchRequestSpellCorrectionSpecMode[_]
    input.Body.userInfo.directUserRequest == BOOLEAN
    input.Body.userInfo.ipAddress == STRING
    input.Body.userInfo.userAgent == STRING
    input.Body.userInfo.userId == STRING
    input.Body.variantRollupKeys[_] == STRING
    input.Body.visitorId == STRING
    input.ReqMap.placement == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.setDefaultBranch

valid {
    input.Body.branchId == STRING
    input.Body.force == BOOLEAN
    input.Body.note == STRING
    input.ReqMap.catalog == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.updateAttributesConfig

enum_GoogleCloudRetailV2CatalogAttributeDynamicFacetableOption := [ "DYNAMIC_FACETABLE_OPTION_UNSPECIFIED", "DYNAMIC_FACETABLE_ENABLED", "DYNAMIC_FACETABLE_DISABLED" ]
enum_GoogleCloudRetailV2CatalogAttributeExactSearchableOption := [ "EXACT_SEARCHABLE_OPTION_UNSPECIFIED", "EXACT_SEARCHABLE_ENABLED", "EXACT_SEARCHABLE_DISABLED" ]
enum_GoogleCloudRetailV2CatalogAttributeIndexableOption := [ "INDEXABLE_OPTION_UNSPECIFIED", "INDEXABLE_ENABLED", "INDEXABLE_DISABLED" ]
enum_GoogleCloudRetailV2CatalogAttributeRetrievableOption := [ "RETRIEVABLE_OPTION_UNSPECIFIED", "RETRIEVABLE_ENABLED", "RETRIEVABLE_DISABLED" ]
enum_GoogleCloudRetailV2CatalogAttributeSearchableOption := [ "SEARCHABLE_OPTION_UNSPECIFIED", "SEARCHABLE_ENABLED", "SEARCHABLE_DISABLED" ]

valid {
    input.Body.catalogAttributes.STRING.dynamicFacetableOption == enum_GoogleCloudRetailV2CatalogAttributeDynamicFacetableOption[_]
    input.Body.catalogAttributes.STRING.exactSearchableOption == enum_GoogleCloudRetailV2CatalogAttributeExactSearchableOption[_]
    input.Body.catalogAttributes.STRING.facetConfig.facetIntervals[_].exclusiveMaximum == NUMBER
    input.Body.catalogAttributes.STRING.facetConfig.facetIntervals[_].exclusiveMinimum == NUMBER
    input.Body.catalogAttributes.STRING.facetConfig.facetIntervals[_].maximum == NUMBER
    input.Body.catalogAttributes.STRING.facetConfig.facetIntervals[_].minimum == NUMBER
    input.Body.catalogAttributes.STRING.facetConfig.ignoredFacetValues[_].endTime == STRING
    input.Body.catalogAttributes.STRING.facetConfig.ignoredFacetValues[_].startTime == STRING
    input.Body.catalogAttributes.STRING.facetConfig.ignoredFacetValues[_].values[_] == STRING
    input.Body.catalogAttributes.STRING.facetConfig.mergedFacet.mergedFacetKey == STRING
    input.Body.catalogAttributes.STRING.facetConfig.mergedFacet.mergedFacetValues[_].mergedValue == STRING
    input.Body.catalogAttributes.STRING.facetConfig.mergedFacet.mergedFacetValues[_].values[_] == STRING
    input.Body.catalogAttributes.STRING.facetConfig.mergedFacetValues[_].mergedValue == STRING
    input.Body.catalogAttributes.STRING.facetConfig.mergedFacetValues[_].values[_] == STRING
    input.Body.catalogAttributes.STRING.facetConfig.rerankConfig.facetValues[_] == STRING
    input.Body.catalogAttributes.STRING.facetConfig.rerankConfig.rerankFacet == BOOLEAN
    input.Body.catalogAttributes.STRING.indexableOption == enum_GoogleCloudRetailV2CatalogAttributeIndexableOption[_]
    input.Body.catalogAttributes.STRING.key == STRING
    input.Body.catalogAttributes.STRING.retrievableOption == enum_GoogleCloudRetailV2CatalogAttributeRetrievableOption[_]
    input.Body.catalogAttributes.STRING.searchableOption == enum_GoogleCloudRetailV2CatalogAttributeSearchableOption[_]
    input.Body.name == STRING
    input.ReqMap.name == STRING
    input.Qs.updateMask == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.updateCompletionConfig

valid {
    input.Body.autoLearning == BOOLEAN
    input.Body.matchingOrder == STRING
    input.Body.maxSuggestions == INTEGER
    input.Body.minPrefixLength == INTEGER
    input.Body.name == STRING
    input.ReqMap.name == STRING
    input.Qs.updateMask == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.userEvents.collect

valid {
    input.ReqMap.parent == STRING
    input.Qs.ets == STRING
    input.Qs.prebuiltRule == STRING
    input.Qs.rawJson == STRING
    input.Qs.uri == STRING
    input.Qs.userEvent == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.userEvents.import

enum_GoogleCloudRetailV2ProductAvailability := [ "AVAILABILITY_UNSPECIFIED", "IN_STOCK", "OUT_OF_STOCK", "PREORDER", "BACKORDER" ]
enum_GoogleCloudRetailV2ProductType := [ "TYPE_UNSPECIFIED", "PRIMARY", "VARIANT", "COLLECTION" ]

valid {
    input.Body.errorsConfig.gcsPrefix == STRING
    input.Body.inputConfig.bigQuerySource.dataSchema == STRING
    input.Body.inputConfig.bigQuerySource.datasetId == STRING
    input.Body.inputConfig.bigQuerySource.gcsStagingDir == STRING
    input.Body.inputConfig.bigQuerySource.partitionDate.day == INTEGER
    input.Body.inputConfig.bigQuerySource.partitionDate.month == INTEGER
    input.Body.inputConfig.bigQuerySource.partitionDate.year == INTEGER
    input.Body.inputConfig.bigQuerySource.projectId == STRING
    input.Body.inputConfig.bigQuerySource.tableId == STRING
    input.Body.inputConfig.gcsSource.dataSchema == STRING
    input.Body.inputConfig.gcsSource.inputUris[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].attributes.STRING.indexable == BOOLEAN
    input.Body.inputConfig.userEventInlineSource.userEvents[_].attributes.STRING.numbers[_] == NUMBER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].attributes.STRING.searchable == BOOLEAN
    input.Body.inputConfig.userEventInlineSource.userEvents[_].attributes.STRING.text[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].attributionToken == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].cartId == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].completionDetail.completionAttributionToken == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].completionDetail.selectedPosition == INTEGER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].completionDetail.selectedSuggestion == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].entity == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].eventTime == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].eventType == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].experimentIds[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].filter == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].offset == INTEGER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].orderBy == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].pageCategories[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].pageViewId == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.attributes.STRING.indexable == BOOLEAN
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.attributes.STRING.numbers[_] == NUMBER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.attributes.STRING.searchable == BOOLEAN
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.attributes.STRING.text[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.audience.ageGroups[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.audience.genders[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.availability == enum_GoogleCloudRetailV2ProductAvailability[_]
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.availableQuantity == INTEGER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.availableTime == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.brands[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.categories[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.collectionMemberIds[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.colorInfo.colorFamilies[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.colorInfo.colors[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.conditions[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.description == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.expireTime == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.fulfillmentInfo[_].placeIds[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.fulfillmentInfo[_].type == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.gtin == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.id == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.images[_].height == INTEGER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.images[_].uri == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.images[_].width == INTEGER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.languageCode == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.materials[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.name == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.patterns[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.priceInfo.cost == NUMBER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.priceInfo.currencyCode == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.priceInfo.originalPrice == NUMBER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.priceInfo.price == NUMBER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.priceInfo.priceEffectiveTime == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.priceInfo.priceExpireTime == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.primaryProductId == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.promotions[_].promotionId == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.publishTime == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.rating.averageRating == NUMBER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.rating.ratingCount == INTEGER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.rating.ratingHistogram[_] == INTEGER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.retrievableFields == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.sizes[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.tags[_] == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.title == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.ttl == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.type == enum_GoogleCloudRetailV2ProductType[_]
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].product.uri == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].productDetails[_].quantity == INTEGER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].purchaseTransaction.cost == NUMBER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].purchaseTransaction.currencyCode == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].purchaseTransaction.id == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].purchaseTransaction.revenue == NUMBER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].purchaseTransaction.tax == NUMBER
    input.Body.inputConfig.userEventInlineSource.userEvents[_].referrerUri == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].searchQuery == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].sessionId == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].uri == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].userInfo.directUserRequest == BOOLEAN
    input.Body.inputConfig.userEventInlineSource.userEvents[_].userInfo.ipAddress == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].userInfo.userAgent == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].userInfo.userId == STRING
    input.Body.inputConfig.userEventInlineSource.userEvents[_].visitorId == STRING
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.userEvents.purge

valid {
    input.Body.filter == STRING
    input.Body.force == BOOLEAN
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.userEvents.rejoin

enum_GoogleCloudRetailV2RejoinUserEventsRequestUserEventRejoinScope := [ "USER_EVENT_REJOIN_SCOPE_UNSPECIFIED", "JOINED_EVENTS", "UNJOINED_EVENTS" ]

valid {
    input.Body.userEventRejoinScope == enum_GoogleCloudRetailV2RejoinUserEventsRequestUserEventRejoinScope[_]
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.catalogs.userEvents.write

enum_GoogleCloudRetailV2ProductAvailability := [ "AVAILABILITY_UNSPECIFIED", "IN_STOCK", "OUT_OF_STOCK", "PREORDER", "BACKORDER" ]
enum_GoogleCloudRetailV2ProductType := [ "TYPE_UNSPECIFIED", "PRIMARY", "VARIANT", "COLLECTION" ]

valid {
    input.Body.attributes.STRING.indexable == BOOLEAN
    input.Body.attributes.STRING.numbers[_] == NUMBER
    input.Body.attributes.STRING.searchable == BOOLEAN
    input.Body.attributes.STRING.text[_] == STRING
    input.Body.attributionToken == STRING
    input.Body.cartId == STRING
    input.Body.completionDetail.completionAttributionToken == STRING
    input.Body.completionDetail.selectedPosition == INTEGER
    input.Body.completionDetail.selectedSuggestion == STRING
    input.Body.entity == STRING
    input.Body.eventTime == STRING
    input.Body.eventType == STRING
    input.Body.experimentIds[_] == STRING
    input.Body.filter == STRING
    input.Body.offset == INTEGER
    input.Body.orderBy == STRING
    input.Body.pageCategories[_] == STRING
    input.Body.pageViewId == STRING
    input.Body.productDetails[_].product.attributes.STRING.indexable == BOOLEAN
    input.Body.productDetails[_].product.attributes.STRING.numbers[_] == NUMBER
    input.Body.productDetails[_].product.attributes.STRING.searchable == BOOLEAN
    input.Body.productDetails[_].product.attributes.STRING.text[_] == STRING
    input.Body.productDetails[_].product.audience.ageGroups[_] == STRING
    input.Body.productDetails[_].product.audience.genders[_] == STRING
    input.Body.productDetails[_].product.availability == enum_GoogleCloudRetailV2ProductAvailability[_]
    input.Body.productDetails[_].product.availableQuantity == INTEGER
    input.Body.productDetails[_].product.availableTime == STRING
    input.Body.productDetails[_].product.brands[_] == STRING
    input.Body.productDetails[_].product.categories[_] == STRING
    input.Body.productDetails[_].product.collectionMemberIds[_] == STRING
    input.Body.productDetails[_].product.colorInfo.colorFamilies[_] == STRING
    input.Body.productDetails[_].product.colorInfo.colors[_] == STRING
    input.Body.productDetails[_].product.conditions[_] == STRING
    input.Body.productDetails[_].product.description == STRING
    input.Body.productDetails[_].product.expireTime == STRING
    input.Body.productDetails[_].product.fulfillmentInfo[_].placeIds[_] == STRING
    input.Body.productDetails[_].product.fulfillmentInfo[_].type == STRING
    input.Body.productDetails[_].product.gtin == STRING
    input.Body.productDetails[_].product.id == STRING
    input.Body.productDetails[_].product.images[_].height == INTEGER
    input.Body.productDetails[_].product.images[_].uri == STRING
    input.Body.productDetails[_].product.images[_].width == INTEGER
    input.Body.productDetails[_].product.languageCode == STRING
    input.Body.productDetails[_].product.materials[_] == STRING
    input.Body.productDetails[_].product.name == STRING
    input.Body.productDetails[_].product.patterns[_] == STRING
    input.Body.productDetails[_].product.priceInfo.cost == NUMBER
    input.Body.productDetails[_].product.priceInfo.currencyCode == STRING
    input.Body.productDetails[_].product.priceInfo.originalPrice == NUMBER
    input.Body.productDetails[_].product.priceInfo.price == NUMBER
    input.Body.productDetails[_].product.priceInfo.priceEffectiveTime == STRING
    input.Body.productDetails[_].product.priceInfo.priceExpireTime == STRING
    input.Body.productDetails[_].product.primaryProductId == STRING
    input.Body.productDetails[_].product.promotions[_].promotionId == STRING
    input.Body.productDetails[_].product.publishTime == STRING
    input.Body.productDetails[_].product.rating.averageRating == NUMBER
    input.Body.productDetails[_].product.rating.ratingCount == INTEGER
    input.Body.productDetails[_].product.rating.ratingHistogram[_] == INTEGER
    input.Body.productDetails[_].product.retrievableFields == STRING
    input.Body.productDetails[_].product.sizes[_] == STRING
    input.Body.productDetails[_].product.tags[_] == STRING
    input.Body.productDetails[_].product.title == STRING
    input.Body.productDetails[_].product.ttl == STRING
    input.Body.productDetails[_].product.type == enum_GoogleCloudRetailV2ProductType[_]
    input.Body.productDetails[_].product.uri == STRING
    input.Body.productDetails[_].quantity == INTEGER
    input.Body.purchaseTransaction.cost == NUMBER
    input.Body.purchaseTransaction.currencyCode == STRING
    input.Body.purchaseTransaction.id == STRING
    input.Body.purchaseTransaction.revenue == NUMBER
    input.Body.purchaseTransaction.tax == NUMBER
    input.Body.referrerUri == STRING
    input.Body.searchQuery == STRING
    input.Body.sessionId == STRING
    input.Body.uri == STRING
    input.Body.userInfo.directUserRequest == BOOLEAN
    input.Body.userInfo.ipAddress == STRING
    input.Body.userInfo.userAgent == STRING
    input.Body.userInfo.userId == STRING
    input.Body.visitorId == STRING
    input.ReqMap.parent == STRING
    input.Qs.writeAsync == BOOLEAN
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.operations.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.locations.operations.list

valid {
    input.ReqMap.name == STRING
    input.Qs.filter == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.operations.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.operations.list

valid {
    input.ReqMap.name == STRING
    input.Qs.filter == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.retailProject.acceptTerms

valid {
    input.Body.STRING == STRING
    input.ReqMap.ProjectID == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}

retail.projects.updateAlertConfig

enum_GoogleCloudRetailV2alphaAlertConfigAlertPolicyEnrollStatus := [ "ENROLL_STATUS_UNSPECIFIED", "ENROLLED", "DECLINED" ]

valid {
    input.Body.alertPolicies[_].alertGroup == STRING
    input.Body.alertPolicies[_].enrollStatus == enum_GoogleCloudRetailV2alphaAlertConfigAlertPolicyEnrollStatus[_]
    input.Body.alertPolicies[_].recipients[_].emailAddress == STRING
    input.Body.name == STRING
    input.ReqMap.name == STRING
    input.Qs.updateMask == STRING
    input.ProviderMetadata.Region == STRING
}

retail.projects.updateLoggingConfig

enum_GoogleCloudRetailV2alphaLoggingConfigLogGenerationRuleLoggingLevel := [ "LOGGING_LEVEL_UNSPECIFIED", "LOGGING_DISABLED", "LOG_ERRORS_AND_ABOVE", "LOG_WARNINGS_AND_ABOVE", "LOG_ALL" ]

valid {
    input.Body.defaultLogGenerationRule.infoLogSampleRate == NUMBER
    input.Body.defaultLogGenerationRule.loggingLevel == enum_GoogleCloudRetailV2alphaLoggingConfigLogGenerationRuleLoggingLevel[_]
    input.Body.name == STRING
    input.Body.serviceLogGenerationRules[_].logGenerationRule.infoLogSampleRate == NUMBER
    input.Body.serviceLogGenerationRules[_].logGenerationRule.loggingLevel == enum_GoogleCloudRetailV2alphaLoggingConfigLogGenerationRuleLoggingLevel[_]
    input.Body.serviceLogGenerationRules[_].serviceName == STRING
    input.ReqMap.name == STRING
    input.Qs.updateMask == STRING
    input.ProviderMetadata.Region == STRING
}