IOTFLEETWISE

AssociateVehicleFleet

valid {
    input.Body.vehicleName == STRING
    input.Body.fleetId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

BatchCreateVehicle

enum_TimeUnit := [ "MILLISECOND", "SECOND", "MINUTE", "HOUR" ]
enum_VehicleAssociationBehavior := [ "CreateIotThing", "ValidateIotThingExists" ]

valid {
    input.Body.vehicles[_].vehicleName == STRING
    input.Body.vehicles[_].modelManifestArn == STRING
    input.Body.vehicles[_].decoderManifestArn == STRING
    input.Body.vehicles[_].attributes.STRING == STRING
    input.Body.vehicles[_].associationBehavior == enum_VehicleAssociationBehavior[_]
    input.Body.vehicles[_].tags[_].Key == STRING
    input.Body.vehicles[_].tags[_].Value == STRING
    input.Body.vehicles[_].stateTemplates[_].identifier == STRING
    input.Body.vehicles[_].stateTemplates[_].stateTemplateUpdateStrategy.periodic.stateTemplateUpdateRate.unit == enum_TimeUnit[_]
    input.Body.vehicles[_].stateTemplates[_].stateTemplateUpdateStrategy.periodic.stateTemplateUpdateRate.value == INTEGER
    input.Body.vehicles[_].stateTemplates[_].stateTemplateUpdateStrategy.onChange == {}
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

BatchUpdateVehicle

enum_TimeUnit := [ "MILLISECOND", "SECOND", "MINUTE", "HOUR" ]
enum_UpdateMode := [ "Overwrite", "Merge" ]

valid {
    input.Body.vehicles[_].vehicleName == STRING
    input.Body.vehicles[_].modelManifestArn == STRING
    input.Body.vehicles[_].decoderManifestArn == STRING
    input.Body.vehicles[_].attributes.STRING == STRING
    input.Body.vehicles[_].attributeUpdateMode == enum_UpdateMode[_]
    input.Body.vehicles[_].stateTemplatesToAdd[_].identifier == STRING
    input.Body.vehicles[_].stateTemplatesToAdd[_].stateTemplateUpdateStrategy.periodic.stateTemplateUpdateRate.unit == enum_TimeUnit[_]
    input.Body.vehicles[_].stateTemplatesToAdd[_].stateTemplateUpdateStrategy.periodic.stateTemplateUpdateRate.value == INTEGER
    input.Body.vehicles[_].stateTemplatesToAdd[_].stateTemplateUpdateStrategy.onChange == {}
    input.Body.vehicles[_].stateTemplatesToRemove[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateCampaign

enum_Compression := [ "OFF", "SNAPPY" ]
enum_DataFormat := [ "JSON", "PARQUET" ]
enum_DiagnosticsMode := [ "OFF", "SEND_ACTIVE_DTCS" ]
enum_SpoolingMode := [ "OFF", "TO_DISK" ]
enum_StorageCompressionFormat := [ "NONE", "GZIP" ]
enum_StorageMaximumSizeUnit := [ "MB", "GB", "TB" ]
enum_StorageMinimumTimeToLiveUnit := [ "HOURS", "DAYS", "WEEKS" ]
enum_TriggerMode := [ "ALWAYS", "RISING_EDGE" ]

valid {
    input.Body.name == STRING
    input.Body.description == STRING
    input.Body.signalCatalogArn == STRING
    input.Body.targetArn == STRING
    input.Body.startTime == TIMESTAMP
    input.Body.expiryTime == TIMESTAMP
    input.Body.postTriggerCollectionDuration == LONG
    input.Body.diagnosticsMode == enum_DiagnosticsMode[_]
    input.Body.spoolingMode == enum_SpoolingMode[_]
    input.Body.compression == enum_Compression[_]
    input.Body.priority == INTEGER
    input.Body.signalsToCollect[_].name == STRING
    input.Body.signalsToCollect[_].maxSampleCount == LONG
    input.Body.signalsToCollect[_].minimumSamplingIntervalMs == LONG
    input.Body.signalsToCollect[_].dataPartitionId == STRING
    input.Body.collectionScheme.timeBasedCollectionScheme.periodMs == LONG
    input.Body.collectionScheme.conditionBasedCollectionScheme.expression == STRING
    input.Body.collectionScheme.conditionBasedCollectionScheme.minimumTriggerIntervalMs == LONG
    input.Body.collectionScheme.conditionBasedCollectionScheme.triggerMode == enum_TriggerMode[_]
    input.Body.collectionScheme.conditionBasedCollectionScheme.conditionLanguageVersion == INTEGER
    input.Body.dataExtraDimensions[_] == STRING
    input.Body.tags[_].Key == STRING
    input.Body.tags[_].Value == STRING
    input.Body.dataDestinationConfigs[_].s3Config.bucketArn == STRING
    input.Body.dataDestinationConfigs[_].s3Config.dataFormat == enum_DataFormat[_]
    input.Body.dataDestinationConfigs[_].s3Config.storageCompressionFormat == enum_StorageCompressionFormat[_]
    input.Body.dataDestinationConfigs[_].s3Config.prefix == STRING
    input.Body.dataDestinationConfigs[_].timestreamConfig.timestreamTableArn == STRING
    input.Body.dataDestinationConfigs[_].timestreamConfig.executionRoleArn == STRING
    input.Body.dataDestinationConfigs[_].mqttTopicConfig.mqttTopicArn == STRING
    input.Body.dataDestinationConfigs[_].mqttTopicConfig.executionRoleArn == STRING
    input.Body.dataPartitions[_].id == STRING
    input.Body.dataPartitions[_].storageOptions.maximumSize.unit == enum_StorageMaximumSizeUnit[_]
    input.Body.dataPartitions[_].storageOptions.maximumSize.value == INTEGER
    input.Body.dataPartitions[_].storageOptions.storageLocation == STRING
    input.Body.dataPartitions[_].storageOptions.minimumTimeToLive.unit == enum_StorageMinimumTimeToLiveUnit[_]
    input.Body.dataPartitions[_].storageOptions.minimumTimeToLive.value == INTEGER
    input.Body.dataPartitions[_].uploadOptions.expression == STRING
    input.Body.dataPartitions[_].uploadOptions.conditionLanguageVersion == INTEGER
    input.Body.signalsToFetch[_].fullyQualifiedName == STRING
    input.Body.signalsToFetch[_].signalFetchConfig.timeBased.executionFrequencyMs == LONG
    input.Body.signalsToFetch[_].signalFetchConfig.conditionBased.conditionExpression == STRING
    input.Body.signalsToFetch[_].signalFetchConfig.conditionBased.triggerMode == enum_TriggerMode[_]
    input.Body.signalsToFetch[_].conditionLanguageVersion == INTEGER
    input.Body.signalsToFetch[_].actions[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateDecoderManifest

enum_DefaultForUnmappedSignalsType := [ "CUSTOM_DECODING" ]
enum_NetworkInterfaceType := [ "CAN_INTERFACE", "OBD_INTERFACE", "VEHICLE_MIDDLEWARE", "CUSTOM_DECODING_INTERFACE" ]
enum_ROS2PrimitiveType := [ "BOOL", "BYTE", "CHAR", "FLOAT32", "FLOAT64", "INT8", "UINT8", "INT16", "UINT16", "INT32", "UINT32", "INT64", "UINT64", "STRING", "WSTRING" ]
enum_SignalDecoderType := [ "CAN_SIGNAL", "OBD_SIGNAL", "MESSAGE_SIGNAL", "CUSTOM_DECODING_SIGNAL" ]
enum_StructuredMessageListType := [ "FIXED_CAPACITY", "DYNAMIC_UNBOUNDED_CAPACITY", "DYNAMIC_BOUNDED_CAPACITY" ]
enum_VehicleMiddlewareProtocol := [ "ROS_2" ]

valid {
    input.Body.name == STRING
    input.Body.description == STRING
    input.Body.modelManifestArn == STRING
    input.Body.signalDecoders[_].fullyQualifiedName == STRING
    input.Body.signalDecoders[_].type == enum_SignalDecoderType[_]
    input.Body.signalDecoders[_].interfaceId == STRING
    input.Body.signalDecoders[_].canSignal.messageId == INTEGER
    input.Body.signalDecoders[_].canSignal.isBigEndian == BOOLEAN
    input.Body.signalDecoders[_].canSignal.isSigned == BOOLEAN
    input.Body.signalDecoders[_].canSignal.startBit == INTEGER
    input.Body.signalDecoders[_].canSignal.offset == DOUBLE
    input.Body.signalDecoders[_].canSignal.factor == DOUBLE
    input.Body.signalDecoders[_].canSignal.length == INTEGER
    input.Body.signalDecoders[_].canSignal.name == STRING
    input.Body.signalDecoders[_].obdSignal.pidResponseLength == INTEGER
    input.Body.signalDecoders[_].obdSignal.serviceMode == INTEGER
    input.Body.signalDecoders[_].obdSignal.pid == INTEGER
    input.Body.signalDecoders[_].obdSignal.scaling == DOUBLE
    input.Body.signalDecoders[_].obdSignal.offset == DOUBLE
    input.Body.signalDecoders[_].obdSignal.startByte == INTEGER
    input.Body.signalDecoders[_].obdSignal.byteLength == INTEGER
    input.Body.signalDecoders[_].obdSignal.bitRightShift == INTEGER
    input.Body.signalDecoders[_].obdSignal.bitMaskLength == INTEGER
    input.Body.signalDecoders[_].messageSignal.topicName == STRING
    input.Body.signalDecoders[_].messageSignal.structuredMessage.primitiveMessageDefinition.ros2PrimitiveMessageDefinition.primitiveType == enum_ROS2PrimitiveType[_]
    input.Body.signalDecoders[_].messageSignal.structuredMessage.primitiveMessageDefinition.ros2PrimitiveMessageDefinition.offset == DOUBLE
    input.Body.signalDecoders[_].messageSignal.structuredMessage.primitiveMessageDefinition.ros2PrimitiveMessageDefinition.scaling == DOUBLE
    input.Body.signalDecoders[_].messageSignal.structuredMessage.primitiveMessageDefinition.ros2PrimitiveMessageDefinition.upperBound == LONG
    input.Body.signalDecoders[_].messageSignal.structuredMessage.structuredMessageListDefinition.name == STRING
    input.Body.signalDecoders[_].messageSignal.structuredMessage.structuredMessageListDefinition.memberType == NESTED
    input.Body.signalDecoders[_].messageSignal.structuredMessage.structuredMessageListDefinition.listType == enum_StructuredMessageListType[_]
    input.Body.signalDecoders[_].messageSignal.structuredMessage.structuredMessageListDefinition.capacity == INTEGER
    input.Body.signalDecoders[_].messageSignal.structuredMessage.structuredMessageDefinition[_].fieldName == STRING
    input.Body.signalDecoders[_].messageSignal.structuredMessage.structuredMessageDefinition[_].dataType == NESTED
    input.Body.signalDecoders[_].customDecodingSignal.id == STRING
    input.Body.networkInterfaces[_].interfaceId == STRING
    input.Body.networkInterfaces[_].type == enum_NetworkInterfaceType[_]
    input.Body.networkInterfaces[_].canInterface.name == STRING
    input.Body.networkInterfaces[_].canInterface.protocolName == STRING
    input.Body.networkInterfaces[_].canInterface.protocolVersion == STRING
    input.Body.networkInterfaces[_].obdInterface.name == STRING
    input.Body.networkInterfaces[_].obdInterface.requestMessageId == INTEGER
    input.Body.networkInterfaces[_].obdInterface.obdStandard == STRING
    input.Body.networkInterfaces[_].obdInterface.pidRequestIntervalSeconds == INTEGER
    input.Body.networkInterfaces[_].obdInterface.dtcRequestIntervalSeconds == INTEGER
    input.Body.networkInterfaces[_].obdInterface.useExtendedIds == BOOLEAN
    input.Body.networkInterfaces[_].obdInterface.hasTransmissionEcu == BOOLEAN
    input.Body.networkInterfaces[_].vehicleMiddleware.name == STRING
    input.Body.networkInterfaces[_].vehicleMiddleware.protocolName == enum_VehicleMiddlewareProtocol[_]
    input.Body.networkInterfaces[_].customDecodingInterface.name == STRING
    input.Body.defaultForUnmappedSignals == enum_DefaultForUnmappedSignalsType[_]
    input.Body.tags[_].Key == STRING
    input.Body.tags[_].Value == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateFleet

valid {
    input.Body.fleetId == STRING
    input.Body.description == STRING
    input.Body.signalCatalogArn == STRING
    input.Body.tags[_].Key == STRING
    input.Body.tags[_].Value == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateModelManifest

valid {
    input.Body.name == STRING
    input.Body.description == STRING
    input.Body.nodes[_] == STRING
    input.Body.signalCatalogArn == STRING
    input.Body.tags[_].Key == STRING
    input.Body.tags[_].Value == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateSignalCatalog

enum_NodeDataEncoding := [ "BINARY", "TYPED" ]
enum_NodeDataType := [ "INT8", "UINT8", "INT16", "UINT16", "INT32", "UINT32", "INT64", "UINT64", "BOOLEAN", "FLOAT", "DOUBLE", "STRING", "UNIX_TIMESTAMP", "INT8_ARRAY", "UINT8_ARRAY", "INT16_ARRAY", "UINT16_ARRAY", "INT32_ARRAY", "UINT32_ARRAY", "INT64_ARRAY", "UINT64_ARRAY", "BOOLEAN_ARRAY", "FLOAT_ARRAY", "DOUBLE_ARRAY", "STRING_ARRAY", "UNIX_TIMESTAMP_ARRAY", "UNKNOWN", "STRUCT", "STRUCT_ARRAY" ]

valid {
    input.Body.name == STRING
    input.Body.description == STRING
    input.Body.nodes[_].branch.fullyQualifiedName == STRING
    input.Body.nodes[_].branch.description == STRING
    input.Body.nodes[_].branch.deprecationMessage == STRING
    input.Body.nodes[_].branch.comment == STRING
    input.Body.nodes[_].sensor.fullyQualifiedName == STRING
    input.Body.nodes[_].sensor.dataType == enum_NodeDataType[_]
    input.Body.nodes[_].sensor.description == STRING
    input.Body.nodes[_].sensor.unit == STRING
    input.Body.nodes[_].sensor.allowedValues[_] == STRING
    input.Body.nodes[_].sensor.min == DOUBLE
    input.Body.nodes[_].sensor.max == DOUBLE
    input.Body.nodes[_].sensor.deprecationMessage == STRING
    input.Body.nodes[_].sensor.comment == STRING
    input.Body.nodes[_].sensor.structFullyQualifiedName == STRING
    input.Body.nodes[_].actuator.fullyQualifiedName == STRING
    input.Body.nodes[_].actuator.dataType == enum_NodeDataType[_]
    input.Body.nodes[_].actuator.description == STRING
    input.Body.nodes[_].actuator.unit == STRING
    input.Body.nodes[_].actuator.allowedValues[_] == STRING
    input.Body.nodes[_].actuator.min == DOUBLE
    input.Body.nodes[_].actuator.max == DOUBLE
    input.Body.nodes[_].actuator.assignedValue == STRING
    input.Body.nodes[_].actuator.deprecationMessage == STRING
    input.Body.nodes[_].actuator.comment == STRING
    input.Body.nodes[_].actuator.structFullyQualifiedName == STRING
    input.Body.nodes[_].attribute.fullyQualifiedName == STRING
    input.Body.nodes[_].attribute.dataType == enum_NodeDataType[_]
    input.Body.nodes[_].attribute.description == STRING
    input.Body.nodes[_].attribute.unit == STRING
    input.Body.nodes[_].attribute.allowedValues[_] == STRING
    input.Body.nodes[_].attribute.min == DOUBLE
    input.Body.nodes[_].attribute.max == DOUBLE
    input.Body.nodes[_].attribute.assignedValue == STRING
    input.Body.nodes[_].attribute.defaultValue == STRING
    input.Body.nodes[_].attribute.deprecationMessage == STRING
    input.Body.nodes[_].attribute.comment == STRING
    input.Body.nodes[_].struct.fullyQualifiedName == STRING
    input.Body.nodes[_].struct.description == STRING
    input.Body.nodes[_].struct.deprecationMessage == STRING
    input.Body.nodes[_].struct.comment == STRING
    input.Body.nodes[_].property.fullyQualifiedName == STRING
    input.Body.nodes[_].property.dataType == enum_NodeDataType[_]
    input.Body.nodes[_].property.dataEncoding == enum_NodeDataEncoding[_]
    input.Body.nodes[_].property.description == STRING
    input.Body.nodes[_].property.deprecationMessage == STRING
    input.Body.nodes[_].property.comment == STRING
    input.Body.nodes[_].property.structFullyQualifiedName == STRING
    input.Body.tags[_].Key == STRING
    input.Body.tags[_].Value == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateStateTemplate

valid {
    input.Body.name == STRING
    input.Body.description == STRING
    input.Body.signalCatalogArn == STRING
    input.Body.stateTemplateProperties[_] == STRING
    input.Body.dataExtraDimensions[_] == STRING
    input.Body.metadataExtraDimensions[_] == STRING
    input.Body.tags[_].Key == STRING
    input.Body.tags[_].Value == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateVehicle

enum_TimeUnit := [ "MILLISECOND", "SECOND", "MINUTE", "HOUR" ]
enum_VehicleAssociationBehavior := [ "CreateIotThing", "ValidateIotThingExists" ]

valid {
    input.Body.vehicleName == STRING
    input.Body.modelManifestArn == STRING
    input.Body.decoderManifestArn == STRING
    input.Body.attributes.STRING == STRING
    input.Body.associationBehavior == enum_VehicleAssociationBehavior[_]
    input.Body.tags[_].Key == STRING
    input.Body.tags[_].Value == STRING
    input.Body.stateTemplates[_].identifier == STRING
    input.Body.stateTemplates[_].stateTemplateUpdateStrategy.periodic.stateTemplateUpdateRate.unit == enum_TimeUnit[_]
    input.Body.stateTemplates[_].stateTemplateUpdateStrategy.periodic.stateTemplateUpdateRate.value == INTEGER
    input.Body.stateTemplates[_].stateTemplateUpdateStrategy.onChange == {}
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteCampaign

valid {
    input.Body.name == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteDecoderManifest

valid {
    input.Body.name == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteFleet

valid {
    input.Body.fleetId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteModelManifest

valid {
    input.Body.name == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteSignalCatalog

valid {
    input.Body.name == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteStateTemplate

valid {
    input.Body.identifier == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteVehicle

valid {
    input.Body.vehicleName == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DisassociateVehicleFleet

valid {
    input.Body.vehicleName == STRING
    input.Body.fleetId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetCampaign

valid {
    input.Body.name == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetDecoderManifest

valid {
    input.Body.name == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetEncryptionConfiguration

valid {
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetFleet

valid {
    input.Body.fleetId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetLoggingOptions

valid {
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetModelManifest

valid {
    input.Body.name == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetRegisterAccountStatus

valid {
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetSignalCatalog

valid {
    input.Body.name == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetStateTemplate

valid {
    input.Body.identifier == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetVehicle

valid {
    input.Body.vehicleName == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetVehicleStatus

valid {
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.Body.vehicleName == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ImportDecoderManifest

valid {
    input.Body.name == STRING
    input.Body.networkFileDefinitions[_].canDbc.networkInterface == STRING
    input.Body.networkFileDefinitions[_].canDbc.canDbcFiles[_] == BLOB
    input.Body.networkFileDefinitions[_].canDbc.signalsMap.STRING == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ImportSignalCatalog

valid {
    input.Body.name == STRING
    input.Body.description == STRING
    input.Body.vss.vssJson == STRING
    input.Body.tags[_].Key == STRING
    input.Body.tags[_].Value == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListCampaigns

valid {
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.Body.status == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListDecoderManifestNetworkInterfaces

valid {
    input.Body.name == STRING
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListDecoderManifestSignals

valid {
    input.Body.name == STRING
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListDecoderManifests

valid {
    input.Body.modelManifestArn == STRING
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListFleets

valid {
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListFleetsForVehicle

valid {
    input.Body.vehicleName == STRING
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListModelManifestNodes

valid {
    input.Body.name == STRING
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListModelManifests

valid {
    input.Body.signalCatalogArn == STRING
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListSignalCatalogNodes

enum_SignalNodeType := [ "SENSOR", "ACTUATOR", "ATTRIBUTE", "BRANCH", "CUSTOM_STRUCT", "CUSTOM_PROPERTY" ]

valid {
    input.Body.name == STRING
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.Body.signalNodeType == enum_SignalNodeType[_]
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListSignalCatalogs

valid {
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListStateTemplates

valid {
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListTagsForResource

valid {
    input.Body.ResourceARN == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListVehicles

valid {
    input.Body.modelManifestArn == STRING
    input.Body.attributeNames[_] == STRING
    input.Body.attributeValues[_] == STRING
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListVehiclesInFleet

valid {
    input.Body.fleetId == STRING
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

PutEncryptionConfiguration

enum_EncryptionType := [ "KMS_BASED_ENCRYPTION", "FLEETWISE_DEFAULT_ENCRYPTION" ]

valid {
    input.Body.kmsKeyId == STRING
    input.Body.encryptionType == enum_EncryptionType[_]
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

PutLoggingOptions

enum_LogType := [ "OFF", "ERROR" ]

valid {
    input.Body.cloudWatchLogDelivery.logType == enum_LogType[_]
    input.Body.cloudWatchLogDelivery.logGroupName == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

RegisterAccount

valid {
    input.Body.timestreamResources.timestreamDatabaseName == STRING
    input.Body.timestreamResources.timestreamTableName == STRING
    input.Body.iamResources.roleArn == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

TagResource

valid {
    input.Body.ResourceARN == STRING
    input.Body.Tags[_].Key == STRING
    input.Body.Tags[_].Value == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UntagResource

valid {
    input.Body.ResourceARN == STRING
    input.Body.TagKeys[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateCampaign

enum_UpdateCampaignAction := [ "APPROVE", "SUSPEND", "RESUME", "UPDATE" ]

valid {
    input.Body.name == STRING
    input.Body.description == STRING
    input.Body.dataExtraDimensions[_] == STRING
    input.Body.action == enum_UpdateCampaignAction[_]
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateDecoderManifest

enum_DefaultForUnmappedSignalsType := [ "CUSTOM_DECODING" ]
enum_ManifestStatus := [ "ACTIVE", "DRAFT", "INVALID", "VALIDATING" ]
enum_NetworkInterfaceType := [ "CAN_INTERFACE", "OBD_INTERFACE", "VEHICLE_MIDDLEWARE", "CUSTOM_DECODING_INTERFACE" ]
enum_ROS2PrimitiveType := [ "BOOL", "BYTE", "CHAR", "FLOAT32", "FLOAT64", "INT8", "UINT8", "INT16", "UINT16", "INT32", "UINT32", "INT64", "UINT64", "STRING", "WSTRING" ]
enum_SignalDecoderType := [ "CAN_SIGNAL", "OBD_SIGNAL", "MESSAGE_SIGNAL", "CUSTOM_DECODING_SIGNAL" ]
enum_StructuredMessageListType := [ "FIXED_CAPACITY", "DYNAMIC_UNBOUNDED_CAPACITY", "DYNAMIC_BOUNDED_CAPACITY" ]
enum_VehicleMiddlewareProtocol := [ "ROS_2" ]

valid {
    input.Body.name == STRING
    input.Body.description == STRING
    input.Body.signalDecodersToAdd[_].fullyQualifiedName == STRING
    input.Body.signalDecodersToAdd[_].type == enum_SignalDecoderType[_]
    input.Body.signalDecodersToAdd[_].interfaceId == STRING
    input.Body.signalDecodersToAdd[_].canSignal.messageId == INTEGER
    input.Body.signalDecodersToAdd[_].canSignal.isBigEndian == BOOLEAN
    input.Body.signalDecodersToAdd[_].canSignal.isSigned == BOOLEAN
    input.Body.signalDecodersToAdd[_].canSignal.startBit == INTEGER
    input.Body.signalDecodersToAdd[_].canSignal.offset == DOUBLE
    input.Body.signalDecodersToAdd[_].canSignal.factor == DOUBLE
    input.Body.signalDecodersToAdd[_].canSignal.length == INTEGER
    input.Body.signalDecodersToAdd[_].canSignal.name == STRING
    input.Body.signalDecodersToAdd[_].obdSignal.pidResponseLength == INTEGER
    input.Body.signalDecodersToAdd[_].obdSignal.serviceMode == INTEGER
    input.Body.signalDecodersToAdd[_].obdSignal.pid == INTEGER
    input.Body.signalDecodersToAdd[_].obdSignal.scaling == DOUBLE
    input.Body.signalDecodersToAdd[_].obdSignal.offset == DOUBLE
    input.Body.signalDecodersToAdd[_].obdSignal.startByte == INTEGER
    input.Body.signalDecodersToAdd[_].obdSignal.byteLength == INTEGER
    input.Body.signalDecodersToAdd[_].obdSignal.bitRightShift == INTEGER
    input.Body.signalDecodersToAdd[_].obdSignal.bitMaskLength == INTEGER
    input.Body.signalDecodersToAdd[_].messageSignal.topicName == STRING
    input.Body.signalDecodersToAdd[_].messageSignal.structuredMessage.primitiveMessageDefinition.ros2PrimitiveMessageDefinition.primitiveType == enum_ROS2PrimitiveType[_]
    input.Body.signalDecodersToAdd[_].messageSignal.structuredMessage.primitiveMessageDefinition.ros2PrimitiveMessageDefinition.offset == DOUBLE
    input.Body.signalDecodersToAdd[_].messageSignal.structuredMessage.primitiveMessageDefinition.ros2PrimitiveMessageDefinition.scaling == DOUBLE
    input.Body.signalDecodersToAdd[_].messageSignal.structuredMessage.primitiveMessageDefinition.ros2PrimitiveMessageDefinition.upperBound == LONG
    input.Body.signalDecodersToAdd[_].messageSignal.structuredMessage.structuredMessageListDefinition.name == STRING
    input.Body.signalDecodersToAdd[_].messageSignal.structuredMessage.structuredMessageListDefinition.memberType == NESTED
    input.Body.signalDecodersToAdd[_].messageSignal.structuredMessage.structuredMessageListDefinition.listType == enum_StructuredMessageListType[_]
    input.Body.signalDecodersToAdd[_].messageSignal.structuredMessage.structuredMessageListDefinition.capacity == INTEGER
    input.Body.signalDecodersToAdd[_].messageSignal.structuredMessage.structuredMessageDefinition[_].fieldName == STRING
    input.Body.signalDecodersToAdd[_].messageSignal.structuredMessage.structuredMessageDefinition[_].dataType == NESTED
    input.Body.signalDecodersToAdd[_].customDecodingSignal.id == STRING
    input.Body.signalDecodersToUpdate[_].fullyQualifiedName == STRING
    input.Body.signalDecodersToUpdate[_].type == enum_SignalDecoderType[_]
    input.Body.signalDecodersToUpdate[_].interfaceId == STRING
    input.Body.signalDecodersToUpdate[_].canSignal.messageId == INTEGER
    input.Body.signalDecodersToUpdate[_].canSignal.isBigEndian == BOOLEAN
    input.Body.signalDecodersToUpdate[_].canSignal.isSigned == BOOLEAN
    input.Body.signalDecodersToUpdate[_].canSignal.startBit == INTEGER
    input.Body.signalDecodersToUpdate[_].canSignal.offset == DOUBLE
    input.Body.signalDecodersToUpdate[_].canSignal.factor == DOUBLE
    input.Body.signalDecodersToUpdate[_].canSignal.length == INTEGER
    input.Body.signalDecodersToUpdate[_].canSignal.name == STRING
    input.Body.signalDecodersToUpdate[_].obdSignal.pidResponseLength == INTEGER
    input.Body.signalDecodersToUpdate[_].obdSignal.serviceMode == INTEGER
    input.Body.signalDecodersToUpdate[_].obdSignal.pid == INTEGER
    input.Body.signalDecodersToUpdate[_].obdSignal.scaling == DOUBLE
    input.Body.signalDecodersToUpdate[_].obdSignal.offset == DOUBLE
    input.Body.signalDecodersToUpdate[_].obdSignal.startByte == INTEGER
    input.Body.signalDecodersToUpdate[_].obdSignal.byteLength == INTEGER
    input.Body.signalDecodersToUpdate[_].obdSignal.bitRightShift == INTEGER
    input.Body.signalDecodersToUpdate[_].obdSignal.bitMaskLength == INTEGER
    input.Body.signalDecodersToUpdate[_].messageSignal.topicName == STRING
    input.Body.signalDecodersToUpdate[_].messageSignal.structuredMessage.primitiveMessageDefinition.ros2PrimitiveMessageDefinition.primitiveType == enum_ROS2PrimitiveType[_]
    input.Body.signalDecodersToUpdate[_].messageSignal.structuredMessage.primitiveMessageDefinition.ros2PrimitiveMessageDefinition.offset == DOUBLE
    input.Body.signalDecodersToUpdate[_].messageSignal.structuredMessage.primitiveMessageDefinition.ros2PrimitiveMessageDefinition.scaling == DOUBLE
    input.Body.signalDecodersToUpdate[_].messageSignal.structuredMessage.primitiveMessageDefinition.ros2PrimitiveMessageDefinition.upperBound == LONG
    input.Body.signalDecodersToUpdate[_].messageSignal.structuredMessage.structuredMessageListDefinition.name == STRING
    input.Body.signalDecodersToUpdate[_].messageSignal.structuredMessage.structuredMessageListDefinition.memberType == NESTED
    input.Body.signalDecodersToUpdate[_].messageSignal.structuredMessage.structuredMessageListDefinition.listType == enum_StructuredMessageListType[_]
    input.Body.signalDecodersToUpdate[_].messageSignal.structuredMessage.structuredMessageListDefinition.capacity == INTEGER
    input.Body.signalDecodersToUpdate[_].messageSignal.structuredMessage.structuredMessageDefinition[_].fieldName == STRING
    input.Body.signalDecodersToUpdate[_].messageSignal.structuredMessage.structuredMessageDefinition[_].dataType == NESTED
    input.Body.signalDecodersToUpdate[_].customDecodingSignal.id == STRING
    input.Body.signalDecodersToRemove[_] == STRING
    input.Body.networkInterfacesToAdd[_].interfaceId == STRING
    input.Body.networkInterfacesToAdd[_].type == enum_NetworkInterfaceType[_]
    input.Body.networkInterfacesToAdd[_].canInterface.name == STRING
    input.Body.networkInterfacesToAdd[_].canInterface.protocolName == STRING
    input.Body.networkInterfacesToAdd[_].canInterface.protocolVersion == STRING
    input.Body.networkInterfacesToAdd[_].obdInterface.name == STRING
    input.Body.networkInterfacesToAdd[_].obdInterface.requestMessageId == INTEGER
    input.Body.networkInterfacesToAdd[_].obdInterface.obdStandard == STRING
    input.Body.networkInterfacesToAdd[_].obdInterface.pidRequestIntervalSeconds == INTEGER
    input.Body.networkInterfacesToAdd[_].obdInterface.dtcRequestIntervalSeconds == INTEGER
    input.Body.networkInterfacesToAdd[_].obdInterface.useExtendedIds == BOOLEAN
    input.Body.networkInterfacesToAdd[_].obdInterface.hasTransmissionEcu == BOOLEAN
    input.Body.networkInterfacesToAdd[_].vehicleMiddleware.name == STRING
    input.Body.networkInterfacesToAdd[_].vehicleMiddleware.protocolName == enum_VehicleMiddlewareProtocol[_]
    input.Body.networkInterfacesToAdd[_].customDecodingInterface.name == STRING
    input.Body.networkInterfacesToUpdate[_].interfaceId == STRING
    input.Body.networkInterfacesToUpdate[_].type == enum_NetworkInterfaceType[_]
    input.Body.networkInterfacesToUpdate[_].canInterface.name == STRING
    input.Body.networkInterfacesToUpdate[_].canInterface.protocolName == STRING
    input.Body.networkInterfacesToUpdate[_].canInterface.protocolVersion == STRING
    input.Body.networkInterfacesToUpdate[_].obdInterface.name == STRING
    input.Body.networkInterfacesToUpdate[_].obdInterface.requestMessageId == INTEGER
    input.Body.networkInterfacesToUpdate[_].obdInterface.obdStandard == STRING
    input.Body.networkInterfacesToUpdate[_].obdInterface.pidRequestIntervalSeconds == INTEGER
    input.Body.networkInterfacesToUpdate[_].obdInterface.dtcRequestIntervalSeconds == INTEGER
    input.Body.networkInterfacesToUpdate[_].obdInterface.useExtendedIds == BOOLEAN
    input.Body.networkInterfacesToUpdate[_].obdInterface.hasTransmissionEcu == BOOLEAN
    input.Body.networkInterfacesToUpdate[_].vehicleMiddleware.name == STRING
    input.Body.networkInterfacesToUpdate[_].vehicleMiddleware.protocolName == enum_VehicleMiddlewareProtocol[_]
    input.Body.networkInterfacesToUpdate[_].customDecodingInterface.name == STRING
    input.Body.networkInterfacesToRemove[_] == STRING
    input.Body.status == enum_ManifestStatus[_]
    input.Body.defaultForUnmappedSignals == enum_DefaultForUnmappedSignalsType[_]
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateFleet

valid {
    input.Body.fleetId == STRING
    input.Body.description == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateModelManifest

enum_ManifestStatus := [ "ACTIVE", "DRAFT", "INVALID", "VALIDATING" ]

valid {
    input.Body.name == STRING
    input.Body.description == STRING
    input.Body.nodesToAdd[_] == STRING
    input.Body.nodesToRemove[_] == STRING
    input.Body.status == enum_ManifestStatus[_]
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateSignalCatalog

enum_NodeDataEncoding := [ "BINARY", "TYPED" ]
enum_NodeDataType := [ "INT8", "UINT8", "INT16", "UINT16", "INT32", "UINT32", "INT64", "UINT64", "BOOLEAN", "FLOAT", "DOUBLE", "STRING", "UNIX_TIMESTAMP", "INT8_ARRAY", "UINT8_ARRAY", "INT16_ARRAY", "UINT16_ARRAY", "INT32_ARRAY", "UINT32_ARRAY", "INT64_ARRAY", "UINT64_ARRAY", "BOOLEAN_ARRAY", "FLOAT_ARRAY", "DOUBLE_ARRAY", "STRING_ARRAY", "UNIX_TIMESTAMP_ARRAY", "UNKNOWN", "STRUCT", "STRUCT_ARRAY" ]

valid {
    input.Body.name == STRING
    input.Body.description == STRING
    input.Body.nodesToAdd[_].branch.fullyQualifiedName == STRING
    input.Body.nodesToAdd[_].branch.description == STRING
    input.Body.nodesToAdd[_].branch.deprecationMessage == STRING
    input.Body.nodesToAdd[_].branch.comment == STRING
    input.Body.nodesToAdd[_].sensor.fullyQualifiedName == STRING
    input.Body.nodesToAdd[_].sensor.dataType == enum_NodeDataType[_]
    input.Body.nodesToAdd[_].sensor.description == STRING
    input.Body.nodesToAdd[_].sensor.unit == STRING
    input.Body.nodesToAdd[_].sensor.allowedValues[_] == STRING
    input.Body.nodesToAdd[_].sensor.min == DOUBLE
    input.Body.nodesToAdd[_].sensor.max == DOUBLE
    input.Body.nodesToAdd[_].sensor.deprecationMessage == STRING
    input.Body.nodesToAdd[_].sensor.comment == STRING
    input.Body.nodesToAdd[_].sensor.structFullyQualifiedName == STRING
    input.Body.nodesToAdd[_].actuator.fullyQualifiedName == STRING
    input.Body.nodesToAdd[_].actuator.dataType == enum_NodeDataType[_]
    input.Body.nodesToAdd[_].actuator.description == STRING
    input.Body.nodesToAdd[_].actuator.unit == STRING
    input.Body.nodesToAdd[_].actuator.allowedValues[_] == STRING
    input.Body.nodesToAdd[_].actuator.min == DOUBLE
    input.Body.nodesToAdd[_].actuator.max == DOUBLE
    input.Body.nodesToAdd[_].actuator.assignedValue == STRING
    input.Body.nodesToAdd[_].actuator.deprecationMessage == STRING
    input.Body.nodesToAdd[_].actuator.comment == STRING
    input.Body.nodesToAdd[_].actuator.structFullyQualifiedName == STRING
    input.Body.nodesToAdd[_].attribute.fullyQualifiedName == STRING
    input.Body.nodesToAdd[_].attribute.dataType == enum_NodeDataType[_]
    input.Body.nodesToAdd[_].attribute.description == STRING
    input.Body.nodesToAdd[_].attribute.unit == STRING
    input.Body.nodesToAdd[_].attribute.allowedValues[_] == STRING
    input.Body.nodesToAdd[_].attribute.min == DOUBLE
    input.Body.nodesToAdd[_].attribute.max == DOUBLE
    input.Body.nodesToAdd[_].attribute.assignedValue == STRING
    input.Body.nodesToAdd[_].attribute.defaultValue == STRING
    input.Body.nodesToAdd[_].attribute.deprecationMessage == STRING
    input.Body.nodesToAdd[_].attribute.comment == STRING
    input.Body.nodesToAdd[_].struct.fullyQualifiedName == STRING
    input.Body.nodesToAdd[_].struct.description == STRING
    input.Body.nodesToAdd[_].struct.deprecationMessage == STRING
    input.Body.nodesToAdd[_].struct.comment == STRING
    input.Body.nodesToAdd[_].property.fullyQualifiedName == STRING
    input.Body.nodesToAdd[_].property.dataType == enum_NodeDataType[_]
    input.Body.nodesToAdd[_].property.dataEncoding == enum_NodeDataEncoding[_]
    input.Body.nodesToAdd[_].property.description == STRING
    input.Body.nodesToAdd[_].property.deprecationMessage == STRING
    input.Body.nodesToAdd[_].property.comment == STRING
    input.Body.nodesToAdd[_].property.structFullyQualifiedName == STRING
    input.Body.nodesToUpdate[_].branch.fullyQualifiedName == STRING
    input.Body.nodesToUpdate[_].branch.description == STRING
    input.Body.nodesToUpdate[_].branch.deprecationMessage == STRING
    input.Body.nodesToUpdate[_].branch.comment == STRING
    input.Body.nodesToUpdate[_].sensor.fullyQualifiedName == STRING
    input.Body.nodesToUpdate[_].sensor.dataType == enum_NodeDataType[_]
    input.Body.nodesToUpdate[_].sensor.description == STRING
    input.Body.nodesToUpdate[_].sensor.unit == STRING
    input.Body.nodesToUpdate[_].sensor.allowedValues[_] == STRING
    input.Body.nodesToUpdate[_].sensor.min == DOUBLE
    input.Body.nodesToUpdate[_].sensor.max == DOUBLE
    input.Body.nodesToUpdate[_].sensor.deprecationMessage == STRING
    input.Body.nodesToUpdate[_].sensor.comment == STRING
    input.Body.nodesToUpdate[_].sensor.structFullyQualifiedName == STRING
    input.Body.nodesToUpdate[_].actuator.fullyQualifiedName == STRING
    input.Body.nodesToUpdate[_].actuator.dataType == enum_NodeDataType[_]
    input.Body.nodesToUpdate[_].actuator.description == STRING
    input.Body.nodesToUpdate[_].actuator.unit == STRING
    input.Body.nodesToUpdate[_].actuator.allowedValues[_] == STRING
    input.Body.nodesToUpdate[_].actuator.min == DOUBLE
    input.Body.nodesToUpdate[_].actuator.max == DOUBLE
    input.Body.nodesToUpdate[_].actuator.assignedValue == STRING
    input.Body.nodesToUpdate[_].actuator.deprecationMessage == STRING
    input.Body.nodesToUpdate[_].actuator.comment == STRING
    input.Body.nodesToUpdate[_].actuator.structFullyQualifiedName == STRING
    input.Body.nodesToUpdate[_].attribute.fullyQualifiedName == STRING
    input.Body.nodesToUpdate[_].attribute.dataType == enum_NodeDataType[_]
    input.Body.nodesToUpdate[_].attribute.description == STRING
    input.Body.nodesToUpdate[_].attribute.unit == STRING
    input.Body.nodesToUpdate[_].attribute.allowedValues[_] == STRING
    input.Body.nodesToUpdate[_].attribute.min == DOUBLE
    input.Body.nodesToUpdate[_].attribute.max == DOUBLE
    input.Body.nodesToUpdate[_].attribute.assignedValue == STRING
    input.Body.nodesToUpdate[_].attribute.defaultValue == STRING
    input.Body.nodesToUpdate[_].attribute.deprecationMessage == STRING
    input.Body.nodesToUpdate[_].attribute.comment == STRING
    input.Body.nodesToUpdate[_].struct.fullyQualifiedName == STRING
    input.Body.nodesToUpdate[_].struct.description == STRING
    input.Body.nodesToUpdate[_].struct.deprecationMessage == STRING
    input.Body.nodesToUpdate[_].struct.comment == STRING
    input.Body.nodesToUpdate[_].property.fullyQualifiedName == STRING
    input.Body.nodesToUpdate[_].property.dataType == enum_NodeDataType[_]
    input.Body.nodesToUpdate[_].property.dataEncoding == enum_NodeDataEncoding[_]
    input.Body.nodesToUpdate[_].property.description == STRING
    input.Body.nodesToUpdate[_].property.deprecationMessage == STRING
    input.Body.nodesToUpdate[_].property.comment == STRING
    input.Body.nodesToUpdate[_].property.structFullyQualifiedName == STRING
    input.Body.nodesToRemove[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateStateTemplate

valid {
    input.Body.identifier == STRING
    input.Body.description == STRING
    input.Body.stateTemplatePropertiesToAdd[_] == STRING
    input.Body.stateTemplatePropertiesToRemove[_] == STRING
    input.Body.dataExtraDimensions[_] == STRING
    input.Body.metadataExtraDimensions[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateVehicle

enum_TimeUnit := [ "MILLISECOND", "SECOND", "MINUTE", "HOUR" ]
enum_UpdateMode := [ "Overwrite", "Merge" ]

valid {
    input.Body.vehicleName == STRING
    input.Body.modelManifestArn == STRING
    input.Body.decoderManifestArn == STRING
    input.Body.attributes.STRING == STRING
    input.Body.attributeUpdateMode == enum_UpdateMode[_]
    input.Body.stateTemplatesToAdd[_].identifier == STRING
    input.Body.stateTemplatesToAdd[_].stateTemplateUpdateStrategy.periodic.stateTemplateUpdateRate.unit == enum_TimeUnit[_]
    input.Body.stateTemplatesToAdd[_].stateTemplateUpdateStrategy.periodic.stateTemplateUpdateRate.value == INTEGER
    input.Body.stateTemplatesToAdd[_].stateTemplateUpdateStrategy.onChange == {}
    input.Body.stateTemplatesToRemove[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}