Closed aajtodd closed 3 months ago
For every map type we hard code the key type to a kotlin.String but this doesn't take into account enums (which are just a specialization of string).
Real example from iam
map MyMap { key MyEnum, value Int } enum MyEnum { ... }
Should generate Map<MyEnum, Int>
Map<MyEnum, Int>
Always generates Map<String, Int> or more generically Map<String, VALUE_SHAPE_TYPE>
Map<String, Int>
Map<String, VALUE_SHAPE_TYPE>
smithy select --aut --selector 'map > member :test(> string [trait|enum])' *.json | rg "key" > /tmp/mapkeys.txt
All map shapes with a key member targeting an enum:
com.amazonaws.appconfig#ActionsMap$key com.amazonaws.appflow#ConnectorConfigurationsMap$key com.amazonaws.appflow#TaskPropertiesMap$key com.amazonaws.applicationinsights#DetectedWorkload$key com.amazonaws.applicationinsights#Feedback$key com.amazonaws.backup#BackupJobChildJobsInState$key com.amazonaws.backup#CopyJobChildJobsInState$key com.amazonaws.codeartifact#AssetHashes$key com.amazonaws.codedeploy#TargetFilters$key com.amazonaws.codeguruprofiler#AgentParameters$key com.amazonaws.codeguruprofiler#Metadata$key com.amazonaws.connect#ChannelToCountMap$key com.amazonaws.customerprofiles#TaskPropertiesMap$key com.amazonaws.datasync#ResourceFilters$key com.amazonaws.detective#DatasourcePackageIngestDetails$key com.amazonaws.detective#DatasourcePackageIngestHistory$key com.amazonaws.detective#DatasourcePackageIngestStates$key com.amazonaws.detective#LastIngestStateChangeDates$key com.amazonaws.detective#VolumeUsageByDatasourcePackage$key com.amazonaws.devicefarm#PurchasedDevicesMap$key com.amazonaws.devicefarm#UniqueProblemsByExecutionResultMap$key com.amazonaws.ecr#FindingSeverityCounts$key com.amazonaws.elasticsearchservice#LogPublishingOptions$key com.amazonaws.fms#CustomerPolicyScopeMap$key com.amazonaws.fms#IssueInfoMap$key com.amazonaws.glue#ConnectionProperties$key com.amazonaws.glue#DQAdditionalOptions$key com.amazonaws.glue#JDBCDataTypeMapping$key com.amazonaws.guardduty#CountByCoverageStatus$key com.amazonaws.guardduty#CountByResourceType$key com.amazonaws.guardduty#ScanCriterion$key com.amazonaws.health#entityStatuses$key com.amazonaws.iam#summaryMapType$key com.amazonaws.inspector#AssessmentRunFindingCounts$key com.amazonaws.iot#AlertTargets$key com.amazonaws.iot#AuditNotificationTargetConfigurations$key com.amazonaws.iot#EventConfigurations$key com.amazonaws.kinesisvideo#FormatConfig$key com.amazonaws.kinesisvideoarchivedmedia#FormatConfig$key com.amazonaws.lakeformation#StorageOptimizerConfigMap$key com.amazonaws.lambda#Endpoints$key com.amazonaws.lexmodelsv2#PromptAttemptsSpecificationMap$key com.amazonaws.lexmodelsv2#TestResultMatchStatusCountMap$key com.amazonaws.lightsail#LoadBalancerConfigurationOptions$key com.amazonaws.machinelearning#DetailsMap$key com.amazonaws.marketplaceentitlementservice#GetEntitlementFilters$key com.amazonaws.omics#FormatToHeader$key com.amazonaws.opensearch#LogPublishingOptions$key com.amazonaws.opsworks#AppAttributes$key com.amazonaws.opsworks#LayerAttributes$key com.amazonaws.opsworks#StackAttributes$key com.amazonaws.outposts#LineItemStatusCounts$key com.amazonaws.pinpoint#MapOfListOfOpenHoursRules$key com.amazonaws.pinpointsmsvoicev2#DestinationCountryParameters$key com.amazonaws.privatenetworks#DeviceIdentifierFilters$key com.amazonaws.privatenetworks#NetworkFilters$key com.amazonaws.privatenetworks#NetworkResourceFilters$key com.amazonaws.privatenetworks#NetworkSiteFilters$key com.amazonaws.privatenetworks#OrderFilters$key com.amazonaws.resiliencehub#AssessmentCompliance$key com.amazonaws.resiliencehub#DisruptionPolicy$key com.amazonaws.resiliencehub#DisruptionResiliencyScore$key com.amazonaws.resiliencehub#RecommendationCompliance$key com.amazonaws.resiliencehub#ScoringComponentResiliencyScores$key com.amazonaws.sagemaker#AutoMLInferenceContainerDefinitions$key com.amazonaws.sagemaker#FillingTransformationMap$key com.amazonaws.servicecatalog#ProductViewFilters$key com.amazonaws.servicecatalog#ProvisionedProductFilters$key com.amazonaws.servicecatalog#ProvisionedProductProperties$key com.amazonaws.servicecatalog#ServiceActionDefinitionMap$key com.amazonaws.servicecatalog#SourceProvisioningArtifactPropertiesMap$key com.amazonaws.servicediscovery#OperationTargetsMap$key com.amazonaws.sesv2#Dimensions$key com.amazonaws.sesv2#ExportDimensions$key com.amazonaws.sesv2#ListRecommendationsFilter$key com.amazonaws.sqs#MessageBodySystemAttributeMap$key com.amazonaws.sqs#MessageSystemAttributeMap$key com.amazonaws.sqs#QueueAttributeMap$key com.amazonaws.ssmcontacts#ShiftCoveragesMap$key com.amazonaws.transcribe#LanguageIdSettingsMap$key com.amazonaws.wafv2#RequestBody$key com.amazonaws.wellarchitected#AccountSummary$key com.amazonaws.wellarchitected#QuestionCounts$key com.amazonaws.wellarchitected#RiskCounts$key com.amazonaws.workdocs#DocumentSourceUrlMap$key com.amazonaws.workdocs#DocumentThumbnailUrlMap$key
Fixing this would almost certainly be a breaking change.
Resolved by merging https://github.com/smithy-lang/smithy-kotlin/pull/1054
Describe the bug
For every map type we hard code the key type to a kotlin.String but this doesn't take into account enums (which are just a specialization of string).
Real example from iam
Expected Behavior
Should generate
Map<MyEnum, Int>
Current Behavior
Always generates
Map<String, Int>
or more genericallyMap<String, VALUE_SHAPE_TYPE>
Affected AWS APIs
All map shapes with a key member targeting an enum:
Backwards Compatability
Fixing this would almost certainly be a breaking change.