From 432af66e9de0cc59f8510b74d46fa921ed042f5a Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Wed, 2 Oct 2024 14:08:10 -0700 Subject: [PATCH 01/12] Caches QuickSight ARN schemas --- .../service/quicksight/schema/analysis.go | 7 +---- .../service/quicksight/schema/dashboard.go | 7 +---- .../service/quicksight/schema/data_set.go | 25 +++------------- .../service/quicksight/schema/data_source.go | 6 +--- internal/service/quicksight/schema/dataset.go | 9 ++---- .../service/quicksight/schema/template.go | 29 ++++++++++++------- 6 files changed, 28 insertions(+), 55 deletions(-) diff --git a/internal/service/quicksight/schema/analysis.go b/internal/service/quicksight/schema/analysis.go index 23c9ed79993b..72e8ca058051 100644 --- a/internal/service/quicksight/schema/analysis.go +++ b/internal/service/quicksight/schema/analysis.go @@ -10,7 +10,6 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/sdkv2" - "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -134,11 +133,7 @@ func AnalysisSourceEntitySchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrARN: { - Type: schema.TypeString, - Required: true, - ValidateFunc: verify.ValidARN, - }, + names.AttrARN: arnStringRequiredSchema(), "data_set_references": dataSetReferencesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataSetReference.html }, }, diff --git a/internal/service/quicksight/schema/dashboard.go b/internal/service/quicksight/schema/dashboard.go index 4ee2515a9fb1..a6cdcf37d342 100644 --- a/internal/service/quicksight/schema/dashboard.go +++ b/internal/service/quicksight/schema/dashboard.go @@ -9,7 +9,6 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/enum" - "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -284,11 +283,7 @@ func DashboardSourceEntitySchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrARN: { - Type: schema.TypeString, - Required: true, - ValidateFunc: verify.ValidARN, - }, + names.AttrARN: arnStringRequiredSchema(), "data_set_references": dataSetReferencesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataSetReference.html }, }, diff --git a/internal/service/quicksight/schema/data_set.go b/internal/service/quicksight/schema/data_set.go index ea2bfa2817ac..ed499f6c4fb9 100644 --- a/internal/service/quicksight/schema/data_set.go +++ b/internal/service/quicksight/schema/data_set.go @@ -11,7 +11,6 @@ import ( "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/internal/sdkv2" - "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -505,11 +504,7 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { }, }, }, - "data_source_arn": { - Type: schema.TypeString, - Required: true, - ValidateFunc: verify.ValidARN, - }, + "data_source_arn": arnStringRequiredSchema(), names.AttrName: { Type: schema.TypeString, Required: true, @@ -538,11 +533,7 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { Optional: true, ValidateFunc: validation.StringLenBetween(0, 256), }, - "data_source_arn": { - Type: schema.TypeString, - Required: true, - ValidateFunc: verify.ValidARN, - }, + "data_source_arn": arnStringRequiredSchema(), "input_columns": { Type: schema.TypeList, Required: true, @@ -582,11 +573,7 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_source_arn": { - Type: schema.TypeString, - Required: true, - ValidateFunc: verify.ValidARN, - }, + "data_source_arn": arnStringRequiredSchema(), "input_columns": { Type: schema.TypeList, Required: true, @@ -671,11 +658,7 @@ func DataSetRowLevelPermissionDataSetSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrARN: { - Type: schema.TypeString, - Required: true, - ValidateFunc: verify.ValidARN, - }, + names.AttrARN: arnStringRequiredSchema(), "format_version": { Type: schema.TypeString, Optional: true, diff --git a/internal/service/quicksight/schema/data_source.go b/internal/service/quicksight/schema/data_source.go index 7548ea32cff5..faeef6e1e5fe 100644 --- a/internal/service/quicksight/schema/data_source.go +++ b/internal/service/quicksight/schema/data_source.go @@ -591,11 +591,7 @@ func VPCConnectionPropertiesSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "vpc_connection_arn": { - Type: schema.TypeString, - Required: true, - ValidateFunc: verify.ValidARN, - }, + "vpc_connection_arn": arnStringRequiredSchema(), }, }, } diff --git a/internal/service/quicksight/schema/dataset.go b/internal/service/quicksight/schema/dataset.go index dfa31758a948..2b4d10bcfdb0 100644 --- a/internal/service/quicksight/schema/dataset.go +++ b/internal/service/quicksight/schema/dataset.go @@ -8,7 +8,6 @@ import ( awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -20,7 +19,7 @@ func dataSetIdentifierDeclarationsSchema() *schema.Schema { Required: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_set_arn": stringSchema(false, verify.ValidARN), + "data_set_arn": arnStringOptionalSchema(), names.AttrIdentifier: stringSchema(false, validation.StringLenBetween(1, 2048)), }, }, @@ -34,11 +33,7 @@ func dataSetReferencesSchema() *schema.Schema { MinItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_set_arn": { - Type: schema.TypeString, - Required: true, - ValidateFunc: verify.ValidARN, - }, + "data_set_arn": arnStringRequiredSchema(), "data_set_placeholder": { Type: schema.TypeString, Required: true, diff --git a/internal/service/quicksight/schema/template.go b/internal/service/quicksight/schema/template.go index 156718a5cb33..957359cc62da 100644 --- a/internal/service/quicksight/schema/template.go +++ b/internal/service/quicksight/schema/template.go @@ -5,6 +5,7 @@ package schema import ( "fmt" + "sync" "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" @@ -149,6 +150,22 @@ func stringSchema(required bool, validateFunc any) *schema.Schema { } } +var arnStringOptionalSchema = sync.OnceValue(func() *schema.Schema { + return &schema.Schema{ + Type: schema.TypeString, + Optional: true, + ValidateFunc: verify.ValidARN, + } +}) + +var arnStringRequiredSchema = sync.OnceValue(func() *schema.Schema { + return &schema.Schema{ + Type: schema.TypeString, + Required: true, + ValidateFunc: verify.ValidARN, + } +}) + func intSchema(required bool, validateFunc any) *schema.Schema { switch v := validateFunc.(type) { case schema.SchemaValidateDiagFunc: @@ -384,11 +401,7 @@ func TemplateSourceEntitySchema() *schema.Schema { ExactlyOneOf: []string{"source_entity.0.source_analysis", "source_entity.0.source_template"}, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrARN: { - Type: schema.TypeString, - Required: true, - ValidateFunc: verify.ValidARN, - }, + names.AttrARN: arnStringRequiredSchema(), "data_set_references": dataSetReferencesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataSetReference.html }, }, @@ -400,11 +413,7 @@ func TemplateSourceEntitySchema() *schema.Schema { ExactlyOneOf: []string{"source_entity.0.source_analysis", "source_entity.0.source_template"}, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrARN: { - Type: schema.TypeString, - Required: true, - ValidateFunc: verify.ValidARN, - }, + names.AttrARN: arnStringRequiredSchema(), }, }, }, From 45a5532b93df86063888f6c9037858b35ebcdb62 Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Wed, 2 Oct 2024 16:01:24 -0700 Subject: [PATCH 02/12] Caches StringLenBetween schemas --- .ci/semgrep/pluginsdk/quicksight/schema.yml | 34 ++++ .../service/quicksight/schema/analysis.go | 9 +- .../service/quicksight/schema/dashboard.go | 9 +- .../service/quicksight/schema/data_set.go | 156 +++--------------- internal/service/quicksight/schema/dataset.go | 13 +- .../service/quicksight/schema/parameters.go | 18 +- .../service/quicksight/schema/permissions.go | 7 +- .../service/quicksight/schema/template.go | 74 +++++++-- .../quicksight/schema/template_control.go | 21 ++- .../quicksight/schema/template_filter.go | 6 +- .../quicksight/schema/template_format.go | 16 +- .../quicksight/schema/template_parameter.go | 14 +- .../quicksight/schema/template_sheet.go | 2 +- internal/service/quicksight/schema/visual.go | 50 ++---- .../quicksight/schema/visual_actions.go | 6 +- .../schema/visual_chart_configuration.go | 8 +- .../schema/visual_conditional_formatting.go | 8 +- .../schema/visual_custom_content.go | 5 +- .../service/quicksight/schema/visual_empty.go | 3 +- .../quicksight/schema/visual_fields.go | 23 ++- .../quicksight/schema/visual_filled_map.go | 3 +- .../quicksight/schema/visual_insight.go | 4 +- .../quicksight/schema/visual_line_chart.go | 4 +- .../quicksight/schema/visual_pivot_table.go | 14 +- .../service/quicksight/schema/visual_sort.go | 3 +- .../service/quicksight/schema/visual_table.go | 10 +- 26 files changed, 239 insertions(+), 281 deletions(-) create mode 100644 .ci/semgrep/pluginsdk/quicksight/schema.yml diff --git a/.ci/semgrep/pluginsdk/quicksight/schema.yml b/.ci/semgrep/pluginsdk/quicksight/schema.yml new file mode 100644 index 000000000000..31284ac14546 --- /dev/null +++ b/.ci/semgrep/pluginsdk/quicksight/schema.yml @@ -0,0 +1,34 @@ +rules: + - id: quicksight-schema-string-len-between-required + languages: [go] + message: String attributes with length validation should use stringLenBetweenSchema + paths: + include: + - internal/service/quicksight/schema + patterns: + - pattern-inside: "Schema: map[string]*schema.Schema{ ... }" + - pattern: | + { + Type: schema.TypeString, + Required: true, + ValidateFunc: validation.StringLenBetween($MIN, $MAX), + } + fix: stringLenBetweenSchema(true, $MIN, $MAX) + severity: WARNING + + - id: quicksight-schema-string-len-between-optional + languages: [go] + message: String attributes with length validation should use stringLenBetweenSchema + paths: + include: + - internal/service/quicksight/schema + patterns: + - pattern-inside: "Schema: map[string]*schema.Schema{ ... }" + - pattern: | + { + Type: schema.TypeString, + Optional: true, + ValidateFunc: validation.StringLenBetween($MIN, $MAX), + } + fix: stringLenBetweenSchema(false, $MIN, $MAX) + severity: WARNING diff --git a/internal/service/quicksight/schema/analysis.go b/internal/service/quicksight/schema/analysis.go index 72e8ca058051..aa7940eae54a 100644 --- a/internal/service/quicksight/schema/analysis.go +++ b/internal/service/quicksight/schema/analysis.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/sdkv2" "github.com/hashicorp/terraform-provider-aws/names" @@ -84,10 +83,10 @@ func AnalysisDefinitionSchema() *schema.Schema { Computed: true, ValidateDiagFunc: enum.Validate[awstypes.SheetContentType](), }, - names.AttrDescription: stringSchema(false, validation.StringLenBetween(1, 1024)), + names.AttrDescription: stringLenBetweenSchema(false, 1, 1024), "filter_controls": filterControlsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterControl.html "layouts": layoutSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Layout.html - names.AttrName: stringSchema(false, validation.StringLenBetween(1, 2048)), + names.AttrName: stringLenBetweenSchema(false, 1, 2048), "parameter_controls": parameterControlsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ParameterControl.html "sheet_control_layouts": sheetControlLayoutsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SheetControlLayout.html "text_boxes": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SheetTextBox.html @@ -98,11 +97,11 @@ func AnalysisDefinitionSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "sheet_text_box_id": idSchema(), - names.AttrContent: stringSchema(false, validation.StringLenBetween(1, 150000)), + names.AttrContent: stringLenBetweenSchema(false, 1, 150000), }, }, }, - "title": stringSchema(false, validation.StringLenBetween(1, 1024)), + "title": stringLenBetweenSchema(false, 1, 1024), "visuals": visualsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Visual.html }, }, diff --git a/internal/service/quicksight/schema/dashboard.go b/internal/service/quicksight/schema/dashboard.go index a6cdcf37d342..8c941c1a0876 100644 --- a/internal/service/quicksight/schema/dashboard.go +++ b/internal/service/quicksight/schema/dashboard.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -83,10 +82,10 @@ func DashboardDefinitionSchema() *schema.Schema { Computed: true, ValidateDiagFunc: enum.Validate[awstypes.SheetContentType](), }, - names.AttrDescription: stringSchema(false, validation.StringLenBetween(1, 1024)), + names.AttrDescription: stringLenBetweenSchema(false, 1, 1024), "filter_controls": filterControlsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterControl.html "layouts": layoutSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Layout.html - names.AttrName: stringSchema(false, validation.StringLenBetween(1, 2048)), + names.AttrName: stringLenBetweenSchema(false, 1, 2048), "parameter_controls": parameterControlsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ParameterControl.html "sheet_control_layouts": sheetControlLayoutsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SheetControlLayout.html "text_boxes": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SheetTextBox.html @@ -97,11 +96,11 @@ func DashboardDefinitionSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "sheet_text_box_id": idSchema(), - names.AttrContent: stringSchema(false, validation.StringLenBetween(1, 150000)), + names.AttrContent: stringLenBetweenSchema(false, 1, 150000), }, }, }, - "title": stringSchema(false, validation.StringLenBetween(1, 1024)), + "title": stringLenBetweenSchema(false, 1, 1024), "visuals": visualsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Visual.html }, }, diff --git a/internal/service/quicksight/schema/data_set.go b/internal/service/quicksight/schema/data_set.go index ed499f6c4fb9..c8b9f206c490 100644 --- a/internal/service/quicksight/schema/data_set.go +++ b/internal/service/quicksight/schema/data_set.go @@ -43,11 +43,7 @@ func DataSetColumnGroupsSchema() *schema.Schema { Required: true, ValidateDiagFunc: enum.Validate[awstypes.GeoSpatialCountryCode](), }, - names.AttrName: { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 64), - }, + names.AttrName: stringLenBetweenSchema(true, 1, 64), }, }, }, @@ -133,11 +129,7 @@ func DataSetFieldFoldersSchema() *schema.Schema { MaxItems: 5000, Elem: &schema.Schema{Type: schema.TypeString}, }, - names.AttrDescription: { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringLenBetween(0, 500), - }, + names.AttrDescription: stringLenBetweenSchema(false, 0, 500), }, }, } @@ -151,11 +143,7 @@ func DataSetLogicalTableMapSchema() *schema.Schema { logicalTableMapSchema := func() *schema.Resource { return &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrAlias: { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 64), - }, + names.AttrAlias: stringLenBetweenSchema(true, 1, 64), "data_transforms": { Type: schema.TypeList, Computed: true, @@ -171,11 +159,7 @@ func DataSetLogicalTableMapSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "column_name": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 128), - }, + "column_name": stringLenBetweenSchema(true, 1, 128), names.AttrFormat: { Type: schema.TypeString, Computed: true, @@ -204,21 +188,9 @@ func DataSetLogicalTableMapSchema() *schema.Schema { MaxItems: 128, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "column_id": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 64), - }, - "column_name": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 128), - }, - names.AttrExpression: { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 4096), - }, + "column_id": stringLenBetweenSchema(true, 1, 64), + "column_name": stringLenBetweenSchema(true, 1, 128), + names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), }, }, }, @@ -232,11 +204,7 @@ func DataSetLogicalTableMapSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "condition_expression": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 4096), - }, + "condition_expression": stringLenBetweenSchema(true, 1, 4096), }, }, }, @@ -264,16 +232,8 @@ func DataSetLogicalTableMapSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "column_name": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 128), - }, - "new_column_name": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 128), - }, + "column_name": stringLenBetweenSchema(true, 1, 128), + "new_column_name": stringLenBetweenSchema(true, 1, 128), }, }, }, @@ -284,11 +244,7 @@ func DataSetLogicalTableMapSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "column_name": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 128), - }, + "column_name": stringLenBetweenSchema(true, 1, 128), names.AttrTags: { Type: schema.TypeList, Required: true, @@ -331,11 +287,7 @@ func DataSetLogicalTableMapSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "column_name": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 128), - }, + "column_name": stringLenBetweenSchema(true, 1, 128), "tag_names": { Type: schema.TypeList, Required: true, @@ -387,16 +339,8 @@ func DataSetLogicalTableMapSchema() *schema.Schema { }, }, }, - "left_operand": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 64), - }, - "on_clause": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 512), - }, + "left_operand": stringLenBetweenSchema(true, 1, 64), + "on_clause": stringLenBetweenSchema(true, 1, 512), "right_join_key_properties": { Type: schema.TypeList, Computed: true, @@ -412,11 +356,7 @@ func DataSetLogicalTableMapSchema() *schema.Schema { }, }, }, - "right_operand": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 64), - }, + "right_operand": stringLenBetweenSchema(true, 1, 64), names.AttrType: { Type: schema.TypeString, Required: true, @@ -491,11 +431,7 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { MaxItems: 2048, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrName: { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 128), - }, + names.AttrName: stringLenBetweenSchema(true, 1, 128), names.AttrType: { Type: schema.TypeString, Required: true, @@ -505,16 +441,8 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { }, }, "data_source_arn": arnStringRequiredSchema(), - names.AttrName: { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 64), - }, - "sql_query": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 65536), - }, + names.AttrName: stringLenBetweenSchema(true, 1, 64), + "sql_query": stringLenBetweenSchema(true, 1, 65536), }, }, }, @@ -528,11 +456,7 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "catalog": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringLenBetween(0, 256), - }, + "catalog": stringLenBetweenSchema(false, 0, 256), "data_source_arn": arnStringRequiredSchema(), "input_columns": { Type: schema.TypeList, @@ -541,11 +465,7 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { MaxItems: 2048, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrName: { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 128), - }, + names.AttrName: stringLenBetweenSchema(true, 1, 128), names.AttrType: { Type: schema.TypeString, Required: true, @@ -554,11 +474,7 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { }, }, }, - names.AttrName: { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 64), - }, + names.AttrName: stringLenBetweenSchema(true, 1, 64), names.AttrSchema: { Type: schema.TypeString, Optional: true, @@ -581,11 +497,7 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { MaxItems: 2048, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrName: { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 128), - }, + names.AttrName: stringLenBetweenSchema(true, 1, 128), names.AttrType: { Type: schema.TypeString, Required: true, @@ -664,11 +576,7 @@ func DataSetRowLevelPermissionDataSetSchema() *schema.Schema { Optional: true, ValidateDiagFunc: enum.Validate[awstypes.RowLevelPermissionFormatVersion](), }, - names.AttrNamespace: { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringLenBetween(0, 64), - }, + names.AttrNamespace: stringLenBetweenSchema(false, 0, 64), "permission_policy": { Type: schema.TypeString, Required: true, @@ -712,21 +620,9 @@ func DataSetRowLevelPermissionTagConfigurationSchema() *schema.Schema { Required: true, ValidateFunc: validation.NoZeroValues, }, - "match_all_value": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringLenBetween(1, 256), - }, - "tag_key": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 128), - }, - "tag_multi_value_delimiter": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringLenBetween(1, 10), - }, + "match_all_value": stringLenBetweenSchema(false, 1, 256), + "tag_key": stringLenBetweenSchema(true, 1, 128), + "tag_multi_value_delimiter": stringLenBetweenSchema(false, 1, 10), }, }, }, diff --git a/internal/service/quicksight/schema/dataset.go b/internal/service/quicksight/schema/dataset.go index 2b4d10bcfdb0..f9f6ab25792c 100644 --- a/internal/service/quicksight/schema/dataset.go +++ b/internal/service/quicksight/schema/dataset.go @@ -4,14 +4,15 @@ package schema import ( + "sync" + "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/names" ) -func dataSetIdentifierDeclarationsSchema() *schema.Schema { +var dataSetIdentifierDeclarationsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataSetIdentifierDeclaration.html Type: schema.TypeList, MinItems: 1, @@ -20,13 +21,13 @@ func dataSetIdentifierDeclarationsSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "data_set_arn": arnStringOptionalSchema(), - names.AttrIdentifier: stringSchema(false, validation.StringLenBetween(1, 2048)), + names.AttrIdentifier: stringLenBetweenSchema(false, 1, 2048), }, }, } -} +}) -func dataSetReferencesSchema() *schema.Schema { +var dataSetReferencesSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataSetReference.html Type: schema.TypeList, Required: true, @@ -41,7 +42,7 @@ func dataSetReferencesSchema() *schema.Schema { }, }, } -} +}) func expandDataSetIdentifierDeclarations(tfList []interface{}) []awstypes.DataSetIdentifierDeclaration { if len(tfList) == 0 { diff --git a/internal/service/quicksight/schema/parameters.go b/internal/service/quicksight/schema/parameters.go index 29659bcfadec..ba3061242fc5 100644 --- a/internal/service/quicksight/schema/parameters.go +++ b/internal/service/quicksight/schema/parameters.go @@ -4,9 +4,9 @@ package schema import ( + "sync" "time" - "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -31,7 +31,7 @@ func ParametersSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrName: stringSchema(true, validation.StringMatch(regexache.MustCompile(`.*\S.*`), "")), + names.AttrName: stringNonEmptyRequiredSchema(), names.AttrValues: { Type: schema.TypeList, MinItems: 1, @@ -51,7 +51,7 @@ func ParametersSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrName: stringSchema(true, validation.StringMatch(regexache.MustCompile(`.*\S.*`), "")), + names.AttrName: stringNonEmptyRequiredSchema(), names.AttrValues: { Type: schema.TypeList, MinItems: 1, @@ -70,7 +70,7 @@ func ParametersSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrName: stringSchema(true, validation.StringMatch(regexache.MustCompile(`.*\S.*`), "")), + names.AttrName: stringNonEmptyRequiredSchema(), names.AttrValues: { Type: schema.TypeList, MinItems: 1, @@ -89,7 +89,7 @@ func ParametersSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrName: stringSchema(true, validation.StringMatch(regexache.MustCompile(`.*\S.*`), "")), + names.AttrName: stringNonEmptyRequiredSchema(), names.AttrValues: { Type: schema.TypeList, MinItems: 1, @@ -106,6 +106,14 @@ func ParametersSchema() *schema.Schema { } } +var stringNonEmptyRequiredSchema = sync.OnceValue(func() *schema.Schema { + return &schema.Schema{ + Type: schema.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotWhiteSpace, + } +}) + func ExpandParameters(tfList []interface{}) *awstypes.Parameters { if len(tfList) == 0 || tfList[0] == nil { return nil diff --git a/internal/service/quicksight/schema/permissions.go b/internal/service/quicksight/schema/permissions.go index 39f1ecfcf1d8..36c06720b1d3 100644 --- a/internal/service/quicksight/schema/permissions.go +++ b/internal/service/quicksight/schema/permissions.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -27,11 +26,7 @@ func PermissionsSchema() *schema.Schema { MaxItems: 20, Elem: &schema.Schema{Type: schema.TypeString}, }, - names.AttrPrincipal: { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringLenBetween(1, 256), - }, + names.AttrPrincipal: stringLenBetweenSchema(true, 1, 256), }, }, } diff --git a/internal/service/quicksight/schema/template.go b/internal/service/quicksight/schema/template.go index 957359cc62da..2a5208fe55d6 100644 --- a/internal/service/quicksight/schema/template.go +++ b/internal/service/quicksight/schema/template.go @@ -88,10 +88,10 @@ func TemplateDefinitionSchema() *schema.Schema { Computed: true, ValidateDiagFunc: enum.Validate[awstypes.SheetContentType](), }, - names.AttrDescription: stringSchema(false, validation.StringLenBetween(1, 1024)), + names.AttrDescription: stringLenBetweenSchema(false, 1, 1024), "filter_controls": filterControlsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterControl.html "layouts": layoutSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Layout.html - names.AttrName: stringSchema(false, validation.StringLenBetween(1, 2048)), + names.AttrName: stringLenBetweenSchema(false, 1, 2048), "parameter_controls": parameterControlsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ParameterControl.html "sheet_control_layouts": sheetControlLayoutsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SheetControlLayout.html "text_boxes": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SheetTextBox.html @@ -102,11 +102,11 @@ func TemplateDefinitionSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "sheet_text_box_id": idSchema(), - names.AttrContent: stringSchema(false, validation.StringLenBetween(1, 150000)), + names.AttrContent: stringLenBetweenSchema(false, 1, 150000), }, }, }, - "title": stringSchema(false, validation.StringLenBetween(1, 1024)), + "title": stringLenBetweenSchema(false, 1, 1024), "visuals": visualsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Visual.html }, }, @@ -166,6 +166,58 @@ var arnStringRequiredSchema = sync.OnceValue(func() *schema.Schema { } }) +type stringLenBetweenIdentity struct { + required bool + min, max int +} + +var stringLenBetweenSchemaCache syncMap[stringLenBetweenIdentity, *schema.Schema] + +func stringLenBetweenSchema(required bool, min, max int) *schema.Schema { + id := stringLenBetweenIdentity{ + required: required, + min: min, + max: max, + } + + s, ok := stringLenBetweenSchemaCache.Load(id) + if ok { + return s + } + + // Use a separate `LoadOrStore` to avoid allocation if item is already in the cache + // Use `LoadOrStore` instead of `Store` in case there is a race + s, _ = stringLenBetweenSchemaCache.LoadOrStore( + id, + &schema.Schema{ + Type: schema.TypeString, + Required: required, + Optional: !required, + ValidateFunc: validation.StringLenBetween(min, max), + }, + ) + return s +} + +// syncMap is a type-safe wrapper around `sync.Map` +type syncMap[K comparable, V any] struct { + m sync.Map +} + +func (m *syncMap[K, V]) Load(k K) (V, bool) { + if a, b := m.m.Load(k); b { + return a.(V), true + } else { + var zero V + return zero, false + } +} + +func (m *syncMap[K, V]) LoadOrStore(k K, v V) (V, bool) { + a, b := m.m.LoadOrStore(k, v) + return a.(V), b +} + func intSchema(required bool, validateFunc any) *schema.Schema { switch v := validateFunc.(type) { case schema.SchemaValidateDiagFunc: @@ -227,9 +279,9 @@ func calculatedFieldsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_set_identifier": stringSchema(true, validation.StringLenBetween(1, 2048)), - names.AttrExpression: stringSchema(true, validation.StringLenBetween(1, 32000)), - names.AttrName: stringSchema(true, validation.StringLenBetween(1, 128)), + "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), + names.AttrExpression: stringLenBetweenSchema(true, 1, 32000), + names.AttrName: stringLenBetweenSchema(true, 1, 128), }, }, } @@ -285,8 +337,8 @@ func columnSchema(required bool) *schema.Schema { Optional: !required, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "column_name": stringSchema(true, validation.StringLenBetween(1, 128)), - "data_set_identifier": stringSchema(true, validation.StringLenBetween(1, 2048)), + "column_name": stringLenBetweenSchema(true, 1, 128), + "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), }, }, } @@ -376,8 +428,8 @@ func rollingDateConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_set_identifier": stringSchema(false, validation.StringLenBetween(1, 2048)), - names.AttrExpression: stringSchema(true, validation.StringLenBetween(1, 4096)), + "data_set_identifier": stringLenBetweenSchema(false, 1, 2048), + names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), }, }, } diff --git a/internal/service/quicksight/schema/template_control.go b/internal/service/quicksight/schema/template_control.go index 611fe24be52a..ad7565dee329 100644 --- a/internal/service/quicksight/schema/template_control.go +++ b/internal/service/quicksight/schema/template_control.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/names" @@ -30,7 +29,7 @@ func filterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "filter_control_id": idSchema(), "source_filter_id": idSchema(), - "title": stringSchema(true, validation.StringLenBetween(1, 2048)), + "title": stringLenBetweenSchema(true, 1, 2048), "display_options": dateTimePickerControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimePickerControlDisplayOptions.html names.AttrType: stringSchema(false, enum.Validate[awstypes.SheetControlDateTimePickerType]()), }, @@ -45,7 +44,7 @@ func filterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "filter_control_id": idSchema(), "source_filter_id": idSchema(), - "title": stringSchema(true, validation.StringLenBetween(1, 2048)), + "title": stringLenBetweenSchema(true, 1, 2048), "cascading_control_configuration": cascadingControlConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CascadingControlConfiguration.html "display_options": dropDownControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DropDownControlDisplayOptions.html "selectable_values": filterSelectableValuesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterSelectableValues.html @@ -62,7 +61,7 @@ func filterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "filter_control_id": idSchema(), "source_filter_id": idSchema(), - "title": stringSchema(true, validation.StringLenBetween(1, 2048)), + "title": stringLenBetweenSchema(true, 1, 2048), "cascading_control_configuration": cascadingControlConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CascadingControlConfiguration.html "display_options": listControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ListControlDisplayOptions.html "selectable_values": filterSelectableValuesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterSelectableValues.html @@ -79,7 +78,7 @@ func filterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "filter_control_id": idSchema(), "source_filter_id": idSchema(), - "title": stringSchema(true, validation.StringLenBetween(1, 2048)), + "title": stringLenBetweenSchema(true, 1, 2048), "display_options": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RelativeDateTimeControlDisplayOptions.html Type: schema.TypeList, Optional: true, @@ -87,7 +86,7 @@ func filterControlsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "date_time_format": stringSchema(false, validation.StringLenBetween(1, 128)), + "date_time_format": stringLenBetweenSchema(false, 1, 128), "title_options": labelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LabelOptions.html }, }, @@ -104,7 +103,7 @@ func filterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "filter_control_id": idSchema(), "source_filter_id": idSchema(), - "title": stringSchema(true, validation.StringLenBetween(1, 2048)), + "title": stringLenBetweenSchema(true, 1, 2048), "maximum_value": { Type: schema.TypeFloat, Required: true, @@ -131,8 +130,8 @@ func filterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "filter_control_id": idSchema(), "source_filter_id": idSchema(), - "title": stringSchema(true, validation.StringLenBetween(1, 2048)), - "delimiter": stringSchema(false, validation.StringLenBetween(1, 2048)), + "title": stringLenBetweenSchema(true, 1, 2048), + "delimiter": stringLenBetweenSchema(false, 1, 2048), "display_options": textAreaControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TextAreaControlDisplayOptions.html }, }, @@ -146,7 +145,7 @@ func filterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "filter_control_id": idSchema(), "source_filter_id": idSchema(), - "title": stringSchema(true, validation.StringLenBetween(1, 2048)), + "title": stringLenBetweenSchema(true, 1, 2048), "display_options": textFieldControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TextFieldControlDisplayOptions.html }, }, @@ -208,7 +207,7 @@ func dateTimePickerControlDisplayOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "date_time_format": stringSchema(false, validation.StringLenBetween(1, 128)), + "date_time_format": stringLenBetweenSchema(false, 1, 128), "title_options": labelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LabelOptions.html }, }, diff --git a/internal/service/quicksight/schema/template_filter.go b/internal/service/quicksight/schema/template_filter.go index 24917a78d581..30c217850a4c 100644 --- a/internal/service/quicksight/schema/template_filter.go +++ b/internal/service/quicksight/schema/template_filter.go @@ -62,11 +62,7 @@ func categoryFilterSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "match_operator": stringSchema(true, enum.Validate[awstypes.CategoryFilterMatchOperator]()), "null_option": stringSchema(true, enum.Validate[awstypes.FilterNullOption]()), - "category_value": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringLenBetween(1, 512), - }, + "category_value": stringLenBetweenSchema(false, 1, 512), "parameter_name": { Type: schema.TypeString, Optional: true, diff --git a/internal/service/quicksight/schema/template_format.go b/internal/service/quicksight/schema/template_format.go index 6bc1c002a57e..2eab0ea08f60 100644 --- a/internal/service/quicksight/schema/template_format.go +++ b/internal/service/quicksight/schema/template_format.go @@ -32,9 +32,9 @@ func numericFormatConfigurationSchema() *schema.Schema { "negative_value_configuration": negativeValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NegativeValueConfiguration.html "null_value_format_configuration": nullValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NullValueFormatConfiguration.html "number_scale": stringSchema(false, enum.Validate[awstypes.NumberScale]()), - names.AttrPrefix: stringSchema(false, validation.StringLenBetween(1, 128)), + names.AttrPrefix: stringLenBetweenSchema(false, 1, 128), "separator_configuration": separatorConfigurationSchema(), - "suffix": stringSchema(false, validation.StringLenBetween(1, 128)), + "suffix": stringLenBetweenSchema(false, 1, 128), "symbol": stringSchema(false, validation.StringMatch(regexache.MustCompile(`[A-Z]{3}`), "must be a 3 character currency symbol")), }, }, @@ -54,7 +54,7 @@ func dateTimeFormatConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "date_time_format": stringSchema(false, validation.StringLenBetween(1, 128)), + "date_time_format": stringLenBetweenSchema(false, 1, 128), "null_value_format_configuration": nullValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NullValueFormatConfiguration.html "numeric_format_configuration": numericFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericFormatConfiguration.html }, @@ -74,9 +74,9 @@ func numberDisplayFormatConfigurationSchema() *schema.Schema { "negative_value_configuration": negativeValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NegativeValueConfiguration.html "null_value_format_configuration": nullValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NullValueFormatConfiguration.html "number_scale": stringSchema(false, enum.Validate[awstypes.NumberScale]()), - names.AttrPrefix: stringSchema(false, validation.StringLenBetween(1, 128)), + names.AttrPrefix: stringLenBetweenSchema(false, 1, 128), "separator_configuration": separatorConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericSeparatorConfiguration.html - "suffix": stringSchema(false, validation.StringLenBetween(1, 128)), + "suffix": stringLenBetweenSchema(false, 1, 128), }, }, } @@ -93,9 +93,9 @@ func percentageDisplayFormatConfigurationSchema() *schema.Schema { "decimal_places_configuration": decimalPlacesConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DecimalPlacesConfiguration.html "negative_value_configuration": negativeValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NegativeValueConfiguration.html "null_value_format_configuration": nullValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NullValueFormatConfiguration.html - names.AttrPrefix: stringSchema(false, validation.StringLenBetween(1, 128)), + names.AttrPrefix: stringLenBetweenSchema(false, 1, 128), "separator_configuration": separatorConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericSeparatorConfiguration.html - "suffix": stringSchema(false, validation.StringLenBetween(1, 128)), + "suffix": stringLenBetweenSchema(false, 1, 128), }, }, } @@ -170,7 +170,7 @@ func nullValueConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "null_string": stringSchema(true, validation.StringLenBetween(1, 128)), + "null_string": stringLenBetweenSchema(true, 1, 128), }, }, } diff --git a/internal/service/quicksight/schema/template_parameter.go b/internal/service/quicksight/schema/template_parameter.go index f6756580f37b..859ea4243e35 100644 --- a/internal/service/quicksight/schema/template_parameter.go +++ b/internal/service/quicksight/schema/template_parameter.go @@ -281,7 +281,7 @@ func parameterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "parameter_control_id": idSchema(), "source_parameter_name": parameterNameSchema(true), - "title": stringSchema(true, validation.StringLenBetween(1, 2048)), + "title": stringLenBetweenSchema(true, 1, 2048), "display_options": dateTimePickerControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimePickerControlDisplayOptions.html }, }, @@ -295,7 +295,7 @@ func parameterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "parameter_control_id": idSchema(), "source_parameter_name": parameterNameSchema(true), - "title": stringSchema(true, validation.StringLenBetween(1, 2048)), + "title": stringLenBetweenSchema(true, 1, 2048), "cascading_control_configuration": cascadingControlConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CascadingControlConfiguration.html "display_options": dropDownControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DropDownControlDisplayOptions.html "selectable_values": parameterSelectableValuesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ParameterSelectableValues.html @@ -312,7 +312,7 @@ func parameterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "parameter_control_id": idSchema(), "source_parameter_name": parameterNameSchema(true), - "title": stringSchema(true, validation.StringLenBetween(1, 2048)), + "title": stringLenBetweenSchema(true, 1, 2048), "cascading_control_configuration": cascadingControlConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CascadingControlConfiguration.html "display_options": listControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ListControlDisplayOptions.html "selectable_values": parameterSelectableValuesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ParameterSelectableValues.html @@ -329,7 +329,7 @@ func parameterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "parameter_control_id": idSchema(), "source_parameter_name": parameterNameSchema(true), - "title": stringSchema(true, validation.StringLenBetween(1, 2048)), + "title": stringLenBetweenSchema(true, 1, 2048), "display_options": sliderControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SliderControlDisplayOptions.html "maximum_value": { Type: schema.TypeFloat, @@ -355,9 +355,9 @@ func parameterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "parameter_control_id": idSchema(), "source_parameter_name": parameterNameSchema(true), - "title": stringSchema(true, validation.StringLenBetween(1, 2048)), + "title": stringLenBetweenSchema(true, 1, 2048), "display_options": textAreaControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TextAreaControlDisplayOptions.html - "delimiter": stringSchema(false, validation.StringLenBetween(1, 2048)), + "delimiter": stringLenBetweenSchema(false, 1, 2048), }, }, }, @@ -370,7 +370,7 @@ func parameterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "parameter_control_id": idSchema(), "source_parameter_name": parameterNameSchema(true), - "title": stringSchema(true, validation.StringLenBetween(1, 2048)), + "title": stringLenBetweenSchema(true, 1, 2048), "display_options": textFieldControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TextFieldControlDisplayOptions.html }, }, diff --git a/internal/service/quicksight/schema/template_sheet.go b/internal/service/quicksight/schema/template_sheet.go index 6491c4c3a1df..1e4419eec0af 100644 --- a/internal/service/quicksight/schema/template_sheet.go +++ b/internal/service/quicksight/schema/template_sheet.go @@ -508,7 +508,7 @@ func freeFormLayoutElementsSchema() *schema.Schema { }, }, }, - names.AttrExpression: stringSchema(true, validation.StringLenBetween(1, 4096)), + names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), }, }, }, diff --git a/internal/service/quicksight/schema/visual.go b/internal/service/quicksight/schema/visual.go index 4b60fbb60123..629a4079e9a7 100644 --- a/internal/service/quicksight/schema/visual.go +++ b/internal/service/quicksight/schema/visual.go @@ -126,7 +126,7 @@ func tooltipOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), "label": { Type: schema.TypeString, Optional: true, @@ -184,8 +184,8 @@ func dataPathValueSchema(maxItems int) *schema.Schema { MaxItems: maxItems, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), - "field_value": stringSchema(true, validation.StringLenBetween(1, 2048)), + "field_id": stringLenBetweenSchema(true, 1, 512), + "field_value": stringLenBetweenSchema(true, 1, 2048), }, }, } @@ -206,7 +206,7 @@ func columnHierarchiesSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "hierarchy_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "hierarchy_id": stringLenBetweenSchema(true, 1, 512), "drill_down_filters": drillDownFilterSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DrillDownFilter.html }, }, @@ -225,12 +225,12 @@ func columnHierarchiesSchema() *schema.Schema { MaxItems: 10, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "column_name": stringSchema(true, validation.StringLenBetween(1, 128)), - "data_set_identifier": stringSchema(true, validation.StringLenBetween(1, 2048)), + "column_name": stringLenBetweenSchema(true, 1, 128), + "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), }, }, }, - "hierarchy_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "hierarchy_id": stringLenBetweenSchema(true, 1, 512), "drill_down_filters": drillDownFilterSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DrillDownFilter.html }, }, @@ -249,12 +249,12 @@ func columnHierarchiesSchema() *schema.Schema { MaxItems: 10, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "column_name": stringSchema(true, validation.StringLenBetween(1, 128)), - "data_set_identifier": stringSchema(true, validation.StringLenBetween(1, 2048)), + "column_name": stringLenBetweenSchema(true, 1, 128), + "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), }, }, }, - "hierarchy_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "hierarchy_id": stringLenBetweenSchema(true, 1, 512), "drill_down_filters": drillDownFilterSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DrillDownFilter.html }, }, @@ -288,16 +288,8 @@ func longFormatTextSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "plain_text": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringLenBetween(1, 1024), - }, - "rich_text": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringLenBetween(1, 2048), - }, + "plain_text": stringLenBetweenSchema(false, 1, 1024), + "rich_text": stringLenBetweenSchema(false, 1, 2048), }, }, } @@ -311,16 +303,8 @@ func shortFormatTextSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "plain_text": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringLenBetween(1, 512), - }, - "rich_text": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringLenBetween(1, 1024), - }, + "plain_text": stringLenBetweenSchema(false, 1, 512), + "rich_text": stringLenBetweenSchema(false, 1, 1024), }, }, } @@ -435,8 +419,8 @@ func dataLabelOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringSchema(false, validation.StringLenBetween(1, 512)), - "field_value": stringSchema(false, validation.StringLenBetween(1, 2048)), + "field_id": stringLenBetweenSchema(false, 1, 512), + "field_value": stringLenBetweenSchema(false, 1, 2048), "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), }, }, @@ -448,7 +432,7 @@ func dataLabelOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringSchema(false, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(false, 1, 512), "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), }, }, diff --git a/internal/service/quicksight/schema/visual_actions.go b/internal/service/quicksight/schema/visual_actions.go index d7cb50170302..f5333d3cc32f 100644 --- a/internal/service/quicksight/schema/visual_actions.go +++ b/internal/service/quicksight/schema/visual_actions.go @@ -195,7 +195,7 @@ func visualCustomActionsSchema(maxItems int) *schema.Schema { }, }, "select_all_value_options": stringSchema(false, enum.Validate[awstypes.SelectAllValueOptions]()), - "source_field": stringSchema(false, validation.StringLenBetween(1, 2048)), + "source_field": stringLenBetweenSchema(false, 1, 2048), "source_parameter_name": { Type: schema.TypeString, Optional: true, @@ -217,7 +217,7 @@ func visualCustomActionsSchema(maxItems int) *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "url_target": stringSchema(true, enum.Validate[awstypes.URLTargetConfiguration]()), - "url_template": stringSchema(true, validation.StringLenBetween(1, 2048)), + "url_template": stringLenBetweenSchema(true, 1, 2048), }, }, }, @@ -225,7 +225,7 @@ func visualCustomActionsSchema(maxItems int) *schema.Schema { }, }, "custom_action_id": idSchema(), - names.AttrName: stringSchema(true, validation.StringLenBetween(1, 256)), + names.AttrName: stringLenBetweenSchema(true, 1, 256), "trigger": stringSchema(true, enum.Validate[awstypes.VisualCustomActionTrigger]()), names.AttrStatus: stringSchema(true, enum.Validate[awstypes.Status]()), }, diff --git a/internal/service/quicksight/schema/visual_chart_configuration.go b/internal/service/quicksight/schema/visual_chart_configuration.go index 889f391297fa..93e18a810a63 100644 --- a/internal/service/quicksight/schema/visual_chart_configuration.go +++ b/internal/service/quicksight/schema/visual_chart_configuration.go @@ -213,7 +213,7 @@ func chartAxisLabelOptionsSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), }, }, }, @@ -265,12 +265,12 @@ func contributionAnalysisDefaultsSchema() *schema.Schema { Required: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "column_name": stringSchema(true, validation.StringLenBetween(1, 128)), - "data_set_identifier": stringSchema(true, validation.StringLenBetween(1, 2048)), + "column_name": stringLenBetweenSchema(true, 1, 128), + "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), }, }, }, - "measure_field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "measure_field_id": stringLenBetweenSchema(true, 1, 512), }, }, } diff --git a/internal/service/quicksight/schema/visual_conditional_formatting.go b/internal/service/quicksight/schema/visual_conditional_formatting.go index fdb1a9c9fa1a..aac7b83ec053 100644 --- a/internal/service/quicksight/schema/visual_conditional_formatting.go +++ b/internal/service/quicksight/schema/visual_conditional_formatting.go @@ -57,7 +57,7 @@ func conditionalFormattingColorSchema() *schema.Schema { }, }, }, - names.AttrExpression: stringSchema(true, validation.StringLenBetween(1, 4096)), + names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), }, }, }, @@ -69,7 +69,7 @@ func conditionalFormattingColorSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), - names.AttrExpression: stringSchema(true, validation.StringLenBetween(1, 4096)), + names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), }, }, }, @@ -94,7 +94,7 @@ func conditionalFormattingIconSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), - names.AttrExpression: stringSchema(true, validation.StringLenBetween(1, 4096)), + names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), "icon_options": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ConditionalFormattingCustomIconOptions.html Type: schema.TypeList, Required: true, @@ -127,7 +127,7 @@ func conditionalFormattingIconSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrExpression: stringSchema(true, validation.StringLenBetween(1, 4096)), + names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), "icon_set_type": stringSchema(false, enum.Validate[awstypes.ConditionalFormattingIconSetType]()), }, }, diff --git a/internal/service/quicksight/schema/visual_custom_content.go b/internal/service/quicksight/schema/visual_custom_content.go index c101ab896fa4..795895f3c611 100644 --- a/internal/service/quicksight/schema/visual_custom_content.go +++ b/internal/service/quicksight/schema/visual_custom_content.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" @@ -21,7 +20,7 @@ func customContentVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_set_identifier": stringSchema(true, validation.StringLenBetween(1, 2048)), + "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), "visual_id": idSchema(), names.AttrActions: visualCustomActionsSchema(customActionsMaxItems), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisualCustomAction.html "chart_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CustomContentConfiguration.html @@ -33,7 +32,7 @@ func customContentVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ names.AttrContentType: stringSchema(false, enum.Validate[awstypes.CustomContentType]()), - "content_url": stringSchema(false, validation.StringLenBetween(1, 2048)), + "content_url": stringLenBetweenSchema(false, 1, 2048), "image_scaling": stringSchema(false, enum.Validate[awstypes.CustomContentImageScalingConfiguration]()), }, }, diff --git a/internal/service/quicksight/schema/visual_empty.go b/internal/service/quicksight/schema/visual_empty.go index c8347b3830d6..0ce2ee3d7637 100644 --- a/internal/service/quicksight/schema/visual_empty.go +++ b/internal/service/quicksight/schema/visual_empty.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -19,7 +18,7 @@ func emptyVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_set_identifier": stringSchema(true, validation.StringLenBetween(1, 2048)), + "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), "visual_id": idSchema(), names.AttrActions: visualCustomActionsSchema(customActionsMaxItems), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisualCustomAction.html }, diff --git a/internal/service/quicksight/schema/visual_fields.go b/internal/service/quicksight/schema/visual_fields.go index f1d7a6a69b32..71fffbb2f3b5 100644 --- a/internal/service/quicksight/schema/visual_fields.go +++ b/internal/service/quicksight/schema/visual_fields.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -36,9 +35,9 @@ func dimensionFieldSchema(maxItems int) *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), "format_configuration": stringFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_StringFormatConfiguration.html - "hierarchy_id": stringSchema(false, validation.StringLenBetween(1, 512)), + "hierarchy_id": stringLenBetweenSchema(false, 1, 512), }, }, }, @@ -50,10 +49,10 @@ func dimensionFieldSchema(maxItems int) *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), "date_granularity": stringSchema(false, enum.Validate[awstypes.TimeGranularity]()), "format_configuration": dateTimeFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimeFormatConfiguration.html - "hierarchy_id": stringSchema(false, validation.StringLenBetween(1, 512)), + "hierarchy_id": stringLenBetweenSchema(false, 1, 512), }, }, }, @@ -65,9 +64,9 @@ func dimensionFieldSchema(maxItems int) *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), "format_configuration": numberFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumberFormatConfiguration.html - "hierarchy_id": stringSchema(false, validation.StringLenBetween(1, 512)), + "hierarchy_id": stringLenBetweenSchema(false, 1, 512), }, }, }, @@ -91,8 +90,8 @@ func measureFieldSchema(maxItems int) *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrExpression: stringSchema(true, validation.StringLenBetween(1, 4096)), - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), + "field_id": stringLenBetweenSchema(true, 1, 512), }, }, }, @@ -104,7 +103,7 @@ func measureFieldSchema(maxItems int) *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), "aggregation_function": stringSchema(false, enum.Validate[awstypes.CategoricalAggregationFunction]()), "format_configuration": stringFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_StringFormatConfiguration.html }, @@ -118,7 +117,7 @@ func measureFieldSchema(maxItems int) *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), "aggregation_function": stringSchema(false, enum.Validate[awstypes.DateAggregationFunction]()), "format_configuration": dateTimeFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimeFormatConfiguration.html }, @@ -132,7 +131,7 @@ func measureFieldSchema(maxItems int) *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), "aggregation_function": numericalAggregationFunctionSchema(false), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericalAggregationFunction.html "format_configuration": numberFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumberFormatConfiguration.html }, diff --git a/internal/service/quicksight/schema/visual_filled_map.go b/internal/service/quicksight/schema/visual_filled_map.go index d86ac2d6dba0..ea9b7931bdb3 100644 --- a/internal/service/quicksight/schema/visual_filled_map.go +++ b/internal/service/quicksight/schema/visual_filled_map.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -92,7 +91,7 @@ func filledMapVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), names.AttrFormat: { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ShapeConditionalFormat.html Type: schema.TypeList, Optional: true, diff --git a/internal/service/quicksight/schema/visual_insight.go b/internal/service/quicksight/schema/visual_insight.go index 5c8cba89c156..33833a363f3a 100644 --- a/internal/service/quicksight/schema/visual_insight.go +++ b/internal/service/quicksight/schema/visual_insight.go @@ -20,7 +20,7 @@ func insightVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_set_identifier": stringSchema(true, validation.StringLenBetween(1, 2048)), + "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), "visual_id": idSchema(), names.AttrActions: visualCustomActionsSchema(customActionsMaxItems), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisualCustomAction.html "insight_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_InsightConfiguration.html @@ -238,7 +238,7 @@ func insightVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "narrative": stringSchema(true, validation.StringLenBetween(1, 150000)), + "narrative": stringLenBetweenSchema(true, 1, 150000), }, }, }, diff --git a/internal/service/quicksight/schema/visual_line_chart.go b/internal/service/quicksight/schema/visual_line_chart.go index a7e80f9758a5..3d4840506d8a 100644 --- a/internal/service/quicksight/schema/visual_line_chart.go +++ b/internal/service/quicksight/schema/visual_line_chart.go @@ -208,7 +208,7 @@ func lineChartVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "axis_binding": stringSchema(true, enum.Validate[awstypes.AxisBinding]()), - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), "field_value": { Type: schema.TypeString, Optional: true, @@ -236,7 +236,7 @@ func lineChartVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "axis_binding": stringSchema(true, enum.Validate[awstypes.AxisBinding]()), - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), "settings": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LineChartSeriesSettings.html Type: schema.TypeList, Optional: true, diff --git a/internal/service/quicksight/schema/visual_pivot_table.go b/internal/service/quicksight/schema/visual_pivot_table.go index a257cf5893fe..1dba33926c98 100644 --- a/internal/service/quicksight/schema/visual_pivot_table.go +++ b/internal/service/quicksight/schema/visual_pivot_table.go @@ -53,8 +53,8 @@ func pivotTableVisualSchema() *schema.Schema { MaxItems: 20, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), - "field_value": stringSchema(true, validation.StringLenBetween(1, 2048)), + "field_id": stringLenBetweenSchema(true, 1, 512), + "field_value": stringLenBetweenSchema(true, 1, 2048), }, }, }, @@ -72,8 +72,8 @@ func pivotTableVisualSchema() *schema.Schema { MaxItems: 100, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), - "custom_label": stringSchema(false, validation.StringLenBetween(1, 2048)), + "field_id": stringLenBetweenSchema(true, 1, 512), + "custom_label": stringLenBetweenSchema(false, 1, 2048), "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), }, }, @@ -131,7 +131,7 @@ func pivotTableVisualSchema() *schema.Schema { MaxItems: 200, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), "sort_by": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PivotTableSortBy.html Type: schema.TypeList, Required: true, @@ -220,7 +220,7 @@ func pivotTableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), names.AttrScope: { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PivotTableConditionalFormattingScope.html Type: schema.TypeList, Optional: true, @@ -332,7 +332,7 @@ func subtotalOptionsSchema() *schema.Schema { MaxItems: 100, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringSchema(false, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(false, 1, 512), }, }, }, diff --git a/internal/service/quicksight/schema/visual_sort.go b/internal/service/quicksight/schema/visual_sort.go index 2c48915c8cb5..c7cf2325fa7d 100644 --- a/internal/service/quicksight/schema/visual_sort.go +++ b/internal/service/quicksight/schema/visual_sort.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/enum" ) @@ -53,7 +52,7 @@ func fieldSortSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "direction": stringSchema(true, enum.Validate[awstypes.SortDirection]()), - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), }, }, } diff --git a/internal/service/quicksight/schema/visual_table.go b/internal/service/quicksight/schema/visual_table.go index 177e74eb8d07..8a45999ecfe6 100644 --- a/internal/service/quicksight/schema/visual_table.go +++ b/internal/service/quicksight/schema/visual_table.go @@ -53,8 +53,8 @@ func tableVisualSchema() *schema.Schema { MaxItems: 100, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), - "custom_label": stringSchema(false, validation.StringLenBetween(1, 2048)), + "field_id": stringLenBetweenSchema(true, 1, 512), + "custom_label": stringLenBetweenSchema(false, 1, 2048), "url_styling": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableFieldURLConfiguration.html Type: schema.TypeList, Optional: true, @@ -178,7 +178,7 @@ func tableVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), "format_configuration": formatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FormatConfiguration.html }, }, @@ -242,7 +242,7 @@ func tableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), "negative_color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), "positive_color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), }, @@ -307,7 +307,7 @@ func tableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringSchema(true, validation.StringLenBetween(1, 512)), + "field_id": stringLenBetweenSchema(true, 1, 512), "text_format": textConditionalFormatSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TextConditionalFormat.html }, }, From 1a255f487cdcad6f74ebf4e7e44fcc93e1ed5db1 Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Wed, 2 Oct 2024 17:50:36 -0700 Subject: [PATCH 03/12] Caches enum validation and regex validation --- .ci/semgrep/pluginsdk/quicksight/schema.yml | 31 +++++++- .../service/quicksight/schema/analysis.go | 6 +- .../service/quicksight/schema/dashboard.go | 6 +- .../service/quicksight/schema/data_set.go | 68 +++------------- .../service/quicksight/schema/template.go | 78 +++++++++++++++++-- .../quicksight/schema/template_control.go | 15 ++-- .../quicksight/schema/template_filter.go | 55 +++++++------ .../quicksight/schema/template_format.go | 28 ++++--- .../quicksight/schema/template_parameter.go | 21 +++-- .../quicksight/schema/template_sheet.go | 36 ++++----- internal/service/quicksight/schema/visual.go | 56 +++++++------ .../quicksight/schema/visual_actions.go | 13 ++-- .../quicksight/schema/visual_box_plot.go | 7 +- .../schema/visual_chart_configuration.go | 50 ++++++------ .../quicksight/schema/visual_combo_chart.go | 3 +- .../schema/visual_conditional_formatting.go | 17 ++-- .../schema/visual_custom_content.go | 5 +- .../quicksight/schema/visual_fields.go | 7 +- .../quicksight/schema/visual_funnel_chart.go | 15 ++-- .../quicksight/schema/visual_gauge_chart.go | 5 +- .../schema/visual_geospatial_map.go | 7 +- .../quicksight/schema/visual_histogram.go | 3 +- .../quicksight/schema/visual_insight.go | 13 ++-- .../service/quicksight/schema/visual_kpi.go | 21 +++-- .../quicksight/schema/visual_line_chart.go | 23 +++--- .../service/quicksight/schema/visual_map.go | 5 +- .../quicksight/schema/visual_pie_chart.go | 5 +- .../quicksight/schema/visual_pivot_table.go | 47 ++++++----- .../quicksight/schema/visual_radar_chart.go | 12 ++- .../service/quicksight/schema/visual_sort.go | 5 +- .../service/quicksight/schema/visual_table.go | 26 +++---- .../quicksight/schema/visual_word_cloud.go | 11 ++- 32 files changed, 352 insertions(+), 348 deletions(-) diff --git a/.ci/semgrep/pluginsdk/quicksight/schema.yml b/.ci/semgrep/pluginsdk/quicksight/schema.yml index 31284ac14546..b357b9226771 100644 --- a/.ci/semgrep/pluginsdk/quicksight/schema.yml +++ b/.ci/semgrep/pluginsdk/quicksight/schema.yml @@ -9,8 +9,8 @@ rules: - pattern-inside: "Schema: map[string]*schema.Schema{ ... }" - pattern: | { - Type: schema.TypeString, - Required: true, + Type: schema.TypeString, + Required: true, ValidateFunc: validation.StringLenBetween($MIN, $MAX), } fix: stringLenBetweenSchema(true, $MIN, $MAX) @@ -26,9 +26,32 @@ rules: - pattern-inside: "Schema: map[string]*schema.Schema{ ... }" - pattern: | { - Type: schema.TypeString, - Optional: true, + Type: schema.TypeString, + Optional: true, ValidateFunc: validation.StringLenBetween($MIN, $MAX), } fix: stringLenBetweenSchema(false, $MIN, $MAX) severity: WARNING + + - id: quicksight-schema-string-enum + languages: [go] + message: String attributes with enum validation should use stringEnumSchema[]() + paths: + include: + - internal/service/quicksight/schema + patterns: + - pattern-inside: "Schema: map[string]*schema.Schema{ ... }" + - pattern: | + { + Type: schema.TypeString, + $REQOPT: true, + ValidateDiagFunc: $FUNC(), + } + - metavariable-regex: + metavariable: $FUNC + regex: enum\.Validate # Semgrep doesn't seem to recognize the type specification + - metavariable-regex: + metavariable: $REQOPT + regex: 'Required|Optional' + # Cannot be auto-fixed + severity: WARNING diff --git a/internal/service/quicksight/schema/analysis.go b/internal/service/quicksight/schema/analysis.go index aa7940eae54a..6ce3ba232b38 100644 --- a/internal/service/quicksight/schema/analysis.go +++ b/internal/service/quicksight/schema/analysis.go @@ -36,7 +36,7 @@ func AnalysisDefinitionSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "format_configuration": formatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FormatConfiguration.html - names.AttrRole: stringSchema(false, enum.Validate[awstypes.ColumnRole]()), + names.AttrRole: stringEnumSchema[awstypes.ColumnRole](false), }, }, }, @@ -47,11 +47,11 @@ func AnalysisDefinitionSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "cross_dataset": stringSchema(true, enum.Validate[awstypes.CrossDatasetTypes]()), + "cross_dataset": stringEnumSchema[awstypes.CrossDatasetTypes](true), "filter_group_id": idSchema(), "filters": filtersSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Filter.html "scope_configuration": filterScopeConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterScopeConfiguration.html - names.AttrStatus: stringSchema(false, enum.Validate[awstypes.Status]()), + names.AttrStatus: stringEnumSchema[awstypes.Status](false), }, }, }, diff --git a/internal/service/quicksight/schema/dashboard.go b/internal/service/quicksight/schema/dashboard.go index 8c941c1a0876..bbbae1bb481c 100644 --- a/internal/service/quicksight/schema/dashboard.go +++ b/internal/service/quicksight/schema/dashboard.go @@ -35,7 +35,7 @@ func DashboardDefinitionSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "format_configuration": formatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FormatConfiguration.html - names.AttrRole: stringSchema(false, enum.Validate[awstypes.ColumnRole]()), + names.AttrRole: stringEnumSchema[awstypes.ColumnRole](false), }, }, }, @@ -46,11 +46,11 @@ func DashboardDefinitionSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "cross_dataset": stringSchema(true, enum.Validate[awstypes.CrossDatasetTypes]()), + "cross_dataset": stringEnumSchema[awstypes.CrossDatasetTypes](true), "filter_group_id": idSchema(), "filters": filtersSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Filter.html "scope_configuration": filterScopeConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterScopeConfiguration.html - names.AttrStatus: stringSchema(false, enum.Validate[awstypes.Status]()), + names.AttrStatus: stringEnumSchema[awstypes.Status](false), }, }, }, diff --git a/internal/service/quicksight/schema/data_set.go b/internal/service/quicksight/schema/data_set.go index c8b9f206c490..188aee4d702c 100644 --- a/internal/service/quicksight/schema/data_set.go +++ b/internal/service/quicksight/schema/data_set.go @@ -38,11 +38,7 @@ func DataSetColumnGroupsSchema() *schema.Schema { ValidateFunc: validation.StringLenBetween(1, 128), }, }, - "country_code": { - Type: schema.TypeString, - Required: true, - ValidateDiagFunc: enum.Validate[awstypes.GeoSpatialCountryCode](), - }, + "country_code": stringEnumSchema[awstypes.GeoSpatialCountryCode](true), names.AttrName: stringLenBetweenSchema(true, 1, 64), }, }, @@ -166,11 +162,7 @@ func DataSetLogicalTableMapSchema() *schema.Schema { Optional: true, ValidateFunc: validation.StringLenBetween(0, 32), }, - "new_column_type": { - Type: schema.TypeString, - Required: true, - ValidateDiagFunc: enum.Validate[awstypes.ColumnDataType](), - }, + "new_column_type": stringEnumSchema[awstypes.ColumnDataType](true), }, }, }, @@ -357,11 +349,7 @@ func DataSetLogicalTableMapSchema() *schema.Schema { }, }, "right_operand": stringLenBetweenSchema(true, 1, 64), - names.AttrType: { - Type: schema.TypeString, - Required: true, - ValidateDiagFunc: enum.Validate[awstypes.JoinType](), - }, + names.AttrType: stringEnumSchema[awstypes.JoinType](true), }, }, }, @@ -432,11 +420,7 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ names.AttrName: stringLenBetweenSchema(true, 1, 128), - names.AttrType: { - Type: schema.TypeString, - Required: true, - ValidateDiagFunc: enum.Validate[awstypes.InputColumnDataType](), - }, + names.AttrType: stringEnumSchema[awstypes.InputColumnDataType](true), }, }, }, @@ -466,11 +450,7 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ names.AttrName: stringLenBetweenSchema(true, 1, 128), - names.AttrType: { - Type: schema.TypeString, - Required: true, - ValidateDiagFunc: enum.Validate[awstypes.InputColumnDataType](), - }, + names.AttrType: stringEnumSchema[awstypes.InputColumnDataType](true), }, }, }, @@ -498,11 +478,7 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ names.AttrName: stringLenBetweenSchema(true, 1, 128), - names.AttrType: { - Type: schema.TypeString, - Required: true, - ValidateDiagFunc: enum.Validate[awstypes.InputColumnDataType](), - }, + names.AttrType: stringEnumSchema[awstypes.InputColumnDataType](true), }, }, }, @@ -570,23 +546,11 @@ func DataSetRowLevelPermissionDataSetSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrARN: arnStringRequiredSchema(), - "format_version": { - Type: schema.TypeString, - Optional: true, - ValidateDiagFunc: enum.Validate[awstypes.RowLevelPermissionFormatVersion](), - }, + names.AttrARN: arnStringRequiredSchema(), + "format_version": stringEnumSchema[awstypes.RowLevelPermissionFormatVersion](false), names.AttrNamespace: stringLenBetweenSchema(false, 0, 64), - "permission_policy": { - Type: schema.TypeString, - Required: true, - ValidateDiagFunc: enum.Validate[awstypes.RowLevelPermissionPolicy](), - }, - names.AttrStatus: { - Type: schema.TypeString, - Optional: true, - ValidateDiagFunc: enum.Validate[awstypes.Status](), - }, + "permission_policy": stringEnumSchema[awstypes.RowLevelPermissionPolicy](true), + names.AttrStatus: stringEnumSchema[awstypes.Status](false), }, }, } @@ -603,11 +567,7 @@ func DataSetRowLevelPermissionTagConfigurationSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrStatus: { - Type: schema.TypeString, - Optional: true, - ValidateDiagFunc: enum.Validate[awstypes.Status](), - }, + names.AttrStatus: stringEnumSchema[awstypes.Status](false), "tag_rules": { Type: schema.TypeList, Required: true, @@ -668,11 +628,7 @@ func DataSetRefreshPropertiesSchema() *schema.Schema { Type: schema.TypeInt, Required: true, }, - "size_unit": { - Type: schema.TypeString, - Required: true, - ValidateDiagFunc: enum.Validate[awstypes.LookbackWindowSizeUnit](), - }, + "size_unit": stringEnumSchema[awstypes.LookbackWindowSizeUnit](true), }, }, }, diff --git a/internal/service/quicksight/schema/template.go b/internal/service/quicksight/schema/template.go index 2a5208fe55d6..b5f7d7a12b62 100644 --- a/internal/service/quicksight/schema/template.go +++ b/internal/service/quicksight/schema/template.go @@ -5,6 +5,7 @@ package schema import ( "fmt" + "reflect" "sync" "github.com/YakDriver/regexache" @@ -41,7 +42,7 @@ func TemplateDefinitionSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "format_configuration": formatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FormatConfiguration.html - names.AttrRole: stringSchema(false, enum.Validate[awstypes.ColumnRole]()), + names.AttrRole: stringEnumSchema[awstypes.ColumnRole](false), }, }, }, @@ -52,11 +53,11 @@ func TemplateDefinitionSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "cross_dataset": stringSchema(true, enum.Validate[awstypes.CrossDatasetTypes]()), + "cross_dataset": stringEnumSchema[awstypes.CrossDatasetTypes](true), "filter_group_id": idSchema(), "filters": filtersSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Filter.html "scope_configuration": filterScopeConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterScopeConfiguration.html - names.AttrStatus: stringSchema(false, enum.Validate[awstypes.Status]()), + names.AttrStatus: stringEnumSchema[awstypes.Status](false), }, }, }, @@ -199,6 +200,71 @@ func stringLenBetweenSchema(required bool, min, max int) *schema.Schema { return s } +type stringMatchIdentity struct { + required bool + re, message string +} + +var stringMatchSchemaCache syncMap[stringMatchIdentity, *schema.Schema] + +func stringMatchSchema(required bool, re, message string) *schema.Schema { + id := stringMatchIdentity{ + required: required, + re: re, + message: message, + } + + s, ok := stringMatchSchemaCache.Load(id) + if ok { + return s + } + + // Use a separate `LoadOrStore` to avoid allocation if item is already in the cache + // Use `LoadOrStore` instead of `Store` in case there is a race + s, _ = stringMatchSchemaCache.LoadOrStore( + id, + &schema.Schema{ + Type: schema.TypeString, + Required: required, + Optional: !required, + ValidateFunc: validation.StringMatch(regexache.MustCompile(re), message), + }, + ) + return s +} + +type stringEnumIdentity struct { + required bool + typ reflect.Type +} + +var stringEnumSchemaCache syncMap[stringEnumIdentity, *schema.Schema] + +func stringEnumSchema[T enum.Valueser[T]](required bool) *schema.Schema { + id := stringEnumIdentity{ + required: required, + typ: reflect.TypeFor[T](), + } + + s, ok := stringEnumSchemaCache.Load(id) + if ok { + return s + } + + // Use a separate `LoadOrStore` to avoid allocation if item is already in the cache + // Use `LoadOrStore` instead of `Store` in case there is a race + s, _ = stringEnumSchemaCache.LoadOrStore( + id, + &schema.Schema{ + Type: schema.TypeString, + Required: required, + Optional: !required, + ValidateDiagFunc: enum.Validate[T](), + }, + ) + return s +} + // syncMap is a type-safe wrapper around `sync.Map` type syncMap[K comparable, V any] struct { m sync.Map @@ -263,8 +329,8 @@ func aggregationFunctionSchema(required bool) *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "categorical_aggregation_function": stringSchema(false, enum.Validate[awstypes.CategoricalAggregationFunction]()), - "date_aggregation_function": stringSchema(false, enum.Validate[awstypes.DateAggregationFunction]()), + "categorical_aggregation_function": stringEnumSchema[awstypes.CategoricalAggregationFunction](false), + "date_aggregation_function": stringEnumSchema[awstypes.DateAggregationFunction](false), "numerical_aggregation_function": numericalAggregationFunctionSchema(false), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericalAggregationFunction.html }, }, @@ -311,7 +377,7 @@ func numericalAggregationFunctionSchema(required bool) *schema.Schema { }, }, }, - "simple_numerical_aggregation": stringSchema(false, enum.Validate[awstypes.SimpleNumericalAggregationFunction]()), + "simple_numerical_aggregation": stringEnumSchema[awstypes.SimpleNumericalAggregationFunction](false), }, }, } diff --git a/internal/service/quicksight/schema/template_control.go b/internal/service/quicksight/schema/template_control.go index ad7565dee329..36e665c62745 100644 --- a/internal/service/quicksight/schema/template_control.go +++ b/internal/service/quicksight/schema/template_control.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -31,7 +30,7 @@ func filterControlsSchema() *schema.Schema { "source_filter_id": idSchema(), "title": stringLenBetweenSchema(true, 1, 2048), "display_options": dateTimePickerControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimePickerControlDisplayOptions.html - names.AttrType: stringSchema(false, enum.Validate[awstypes.SheetControlDateTimePickerType]()), + names.AttrType: stringEnumSchema[awstypes.SheetControlDateTimePickerType](false), }, }, }, @@ -48,7 +47,7 @@ func filterControlsSchema() *schema.Schema { "cascading_control_configuration": cascadingControlConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CascadingControlConfiguration.html "display_options": dropDownControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DropDownControlDisplayOptions.html "selectable_values": filterSelectableValuesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterSelectableValues.html - names.AttrType: stringSchema(false, enum.Validate[awstypes.SheetControlListType]()), + names.AttrType: stringEnumSchema[awstypes.SheetControlListType](false), }, }, }, @@ -65,7 +64,7 @@ func filterControlsSchema() *schema.Schema { "cascading_control_configuration": cascadingControlConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CascadingControlConfiguration.html "display_options": listControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ListControlDisplayOptions.html "selectable_values": filterSelectableValuesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterSelectableValues.html - names.AttrType: stringSchema(false, enum.Validate[awstypes.SheetControlListType]()), + names.AttrType: stringEnumSchema[awstypes.SheetControlListType](false), }, }, }, @@ -117,7 +116,7 @@ func filterControlsSchema() *schema.Schema { Required: true, }, "display_options": sliderControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SliderControlDisplayOptions.html - names.AttrType: stringSchema(false, enum.Validate[awstypes.SheetControlSliderType]()), + names.AttrType: stringEnumSchema[awstypes.SheetControlSliderType](false), }, }, }, @@ -229,7 +228,7 @@ func listControlDisplayOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -276,7 +275,7 @@ func selectAllOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, } @@ -305,7 +304,7 @@ func placeholderOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, } diff --git a/internal/service/quicksight/schema/template_filter.go b/internal/service/quicksight/schema/template_filter.go index 30c217850a4c..23d0dde3fa11 100644 --- a/internal/service/quicksight/schema/template_filter.go +++ b/internal/service/quicksight/schema/template_filter.go @@ -11,7 +11,6 @@ import ( awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" @@ -60,8 +59,8 @@ func categoryFilterSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "match_operator": stringSchema(true, enum.Validate[awstypes.CategoryFilterMatchOperator]()), - "null_option": stringSchema(true, enum.Validate[awstypes.FilterNullOption]()), + "match_operator": stringEnumSchema[awstypes.CategoryFilterMatchOperator](true), + "null_option": stringEnumSchema[awstypes.FilterNullOption](true), "category_value": stringLenBetweenSchema(false, 1, 512), "parameter_name": { Type: schema.TypeString, @@ -71,7 +70,7 @@ func categoryFilterSchema() *schema.Schema { validation.StringMatch(regexache.MustCompile(`^[0-9A-Za-z]+`), ""), ), }, - "select_all_options": stringSchema(false, enum.Validate[awstypes.CategoryFilterSelectAllOptions]()), + "select_all_options": stringEnumSchema[awstypes.CategoryFilterSelectAllOptions](false), }, }, }, @@ -82,8 +81,8 @@ func categoryFilterSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "match_operator": stringSchema(true, enum.Validate[awstypes.CategoryFilterMatchOperator]()), - "null_option": stringSchema(true, enum.Validate[awstypes.FilterNullOption]()), + "match_operator": stringEnumSchema[awstypes.CategoryFilterMatchOperator](true), + "null_option": stringEnumSchema[awstypes.FilterNullOption](true), "category_values": { Type: schema.TypeList, Optional: true, @@ -94,7 +93,7 @@ func categoryFilterSchema() *schema.Schema { ValidateFunc: validation.StringLenBetween(1, 512), }, }, - "select_all_options": stringSchema(false, enum.Validate[awstypes.CategoryFilterSelectAllOptions]()), + "select_all_options": stringEnumSchema[awstypes.CategoryFilterSelectAllOptions](false), }, }, }, @@ -105,7 +104,7 @@ func categoryFilterSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "match_operator": stringSchema(true, enum.Validate[awstypes.CategoryFilterMatchOperator]()), + "match_operator": stringEnumSchema[awstypes.CategoryFilterMatchOperator](true), "category_values": { Type: schema.TypeList, Optional: true, @@ -116,7 +115,7 @@ func categoryFilterSchema() *schema.Schema { ValidateFunc: validation.StringLenBetween(1, 512), }, }, - "select_all_options": stringSchema(false, enum.Validate[awstypes.CategoryFilterSelectAllOptions]()), + "select_all_options": stringEnumSchema[awstypes.CategoryFilterSelectAllOptions](false), }, }, }, @@ -139,11 +138,11 @@ func numericEqualityFilterSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "filter_id": idSchema(), - "match_operator": stringSchema(true, enum.Validate[awstypes.CategoryFilterMatchOperator]()), - "null_option": stringSchema(true, enum.Validate[awstypes.FilterNullOption]()), + "match_operator": stringEnumSchema[awstypes.CategoryFilterMatchOperator](true), + "null_option": stringEnumSchema[awstypes.FilterNullOption](true), "aggregation_function": aggregationFunctionSchema(false), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AggregationFunction.html "parameter_name": parameterNameSchema(false), - "select_all_options": stringSchema(false, enum.Validate[awstypes.NumericFilterSelectAllOptions]()), + "select_all_options": stringEnumSchema[awstypes.NumericFilterSelectAllOptions](false), names.AttrValue: { Type: schema.TypeFloat, Optional: true, @@ -163,7 +162,7 @@ func numericRangeFilterSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "filter_id": idSchema(), - "null_option": stringSchema(true, enum.Validate[awstypes.FilterNullOption]()), + "null_option": stringEnumSchema[awstypes.FilterNullOption](true), "aggregation_function": aggregationFunctionSchema(false), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AggregationFunction.html "include_maximum": { Type: schema.TypeBool, @@ -175,7 +174,7 @@ func numericRangeFilterSchema() *schema.Schema { }, "range_maximum": numericRangeFilterValueSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericRangeFilterValue.html "range_minimum": numericRangeFilterValueSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericRangeFilterValue.html - "select_all_options": stringSchema(false, enum.Validate[awstypes.NumericFilterSelectAllOptions]()), + "select_all_options": stringEnumSchema[awstypes.NumericFilterSelectAllOptions](false), }, }, } @@ -196,18 +195,18 @@ func relativeDatesFilterSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "anchor_option": stringSchema(false, enum.Validate[awstypes.AnchorOption]()), + "anchor_option": stringEnumSchema[awstypes.AnchorOption](false), "parameter_name": parameterNameSchema(false), }, }, }, "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "filter_id": idSchema(), - "null_option": stringSchema(true, enum.Validate[awstypes.FilterNullOption]()), - "relative_date_type": stringSchema(true, enum.Validate[awstypes.RelativeDateType]()), - "time_granularity": stringSchema(true, enum.Validate[awstypes.TimeGranularity]()), + "null_option": stringEnumSchema[awstypes.FilterNullOption](true), + "relative_date_type": stringEnumSchema[awstypes.RelativeDateType](true), + "time_granularity": stringEnumSchema[awstypes.TimeGranularity](true), "exclude_period_configuration": excludePeriodConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ExcludePeriodConfiguration.html - "minimum_granularity": stringSchema(true, enum.Validate[awstypes.TimeGranularity]()), + "minimum_granularity": stringEnumSchema[awstypes.TimeGranularity](true), "parameter_name": parameterNameSchema(false), "relative_date_value": { Type: schema.TypeInt, @@ -228,7 +227,7 @@ func timeEqualityFilterSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "filter_id": idSchema(), - "time_granularity": stringSchema(true, enum.Validate[awstypes.TimeGranularity]()), + "time_granularity": stringEnumSchema[awstypes.TimeGranularity](true), "parameter_name": parameterNameSchema(false), names.AttrValue: { Type: schema.TypeString, @@ -250,7 +249,7 @@ func timeRangeFilterSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "filter_id": idSchema(), - "null_option": stringSchema(true, enum.Validate[awstypes.FilterNullOption]()), + "null_option": stringEnumSchema[awstypes.FilterNullOption](true), "exclude_period_configuration": excludePeriodConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ExcludePeriodConfiguration.html "include_maximum": { Type: schema.TypeBool, @@ -262,7 +261,7 @@ func timeRangeFilterSchema() *schema.Schema { }, "range_maximum_value": timeRangeFilterValueSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TimeRangeFilterValue.html "range_minimum_value": timeRangeFilterValueSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TimeRangeFilterValue.html - "time_granularity": stringSchema(true, enum.Validate[awstypes.TimeGranularity]()), + "time_granularity": stringEnumSchema[awstypes.TimeGranularity](true), }, }, } @@ -285,7 +284,7 @@ func topBottomFilterSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "aggregation_function": aggregationFunctionSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AggregationFunction.html "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "sort_direction": stringSchema(true, enum.Validate[awstypes.SortDirection]()), + "sort_direction": stringEnumSchema[awstypes.SortDirection](true), }, }, }, @@ -296,7 +295,7 @@ func topBottomFilterSchema() *schema.Schema { Optional: true, }, "parameter_name": parameterNameSchema(false), - "time_granularity": stringSchema(true, enum.Validate[awstypes.TimeGranularity]()), + "time_granularity": stringEnumSchema[awstypes.TimeGranularity](true), }, }, } @@ -314,8 +313,8 @@ func excludePeriodConfigurationSchema() *schema.Schema { Type: schema.TypeInt, Required: true, }, - "granularity": stringSchema(true, enum.Validate[awstypes.TimeGranularity]()), - names.AttrStatus: stringSchema(false, enum.Validate[awstypes.Status]()), + "granularity": stringEnumSchema[awstypes.TimeGranularity](true), + names.AttrStatus: stringEnumSchema[awstypes.Status](false), }, }, } @@ -423,7 +422,7 @@ func drillDownFilterSchema() *schema.Schema { "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "range_maximum": stringSchema(true, verify.ValidUTCTimestamp), "range_minimum": stringSchema(true, verify.ValidUTCTimestamp), - "time_granularity": stringSchema(true, enum.Validate[awstypes.TimeGranularity]()), + "time_granularity": stringEnumSchema[awstypes.TimeGranularity](true), }, }, }, @@ -476,7 +475,7 @@ func filterScopeConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrScope: stringSchema(true, enum.Validate[awstypes.FilterVisualScope]()), + names.AttrScope: stringEnumSchema[awstypes.FilterVisualScope](true), "sheet_id": idSchema(), "visual_ids": { Type: schema.TypeSet, diff --git a/internal/service/quicksight/schema/template_format.go b/internal/service/quicksight/schema/template_format.go index 2eab0ea08f60..285cfbf18813 100644 --- a/internal/service/quicksight/schema/template_format.go +++ b/internal/service/quicksight/schema/template_format.go @@ -4,12 +4,10 @@ package schema import ( - "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -31,11 +29,11 @@ func numericFormatConfigurationSchema() *schema.Schema { "decimal_places_configuration": decimalPlacesConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DecimalPlacesConfiguration.html "negative_value_configuration": negativeValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NegativeValueConfiguration.html "null_value_format_configuration": nullValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NullValueFormatConfiguration.html - "number_scale": stringSchema(false, enum.Validate[awstypes.NumberScale]()), + "number_scale": stringEnumSchema[awstypes.NumberScale](false), names.AttrPrefix: stringLenBetweenSchema(false, 1, 128), "separator_configuration": separatorConfigurationSchema(), "suffix": stringLenBetweenSchema(false, 1, 128), - "symbol": stringSchema(false, validation.StringMatch(regexache.MustCompile(`[A-Z]{3}`), "must be a 3 character currency symbol")), + "symbol": stringMatchSchema(false, `[A-Z]{3}`, "must be a 3 character currency symbol"), }, }, }, @@ -73,7 +71,7 @@ func numberDisplayFormatConfigurationSchema() *schema.Schema { "decimal_places_configuration": decimalPlacesConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DecimalPlacesConfiguration.html "negative_value_configuration": negativeValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NegativeValueConfiguration.html "null_value_format_configuration": nullValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NullValueFormatConfiguration.html - "number_scale": stringSchema(false, enum.Validate[awstypes.NumberScale]()), + "number_scale": stringEnumSchema[awstypes.NumberScale](false), names.AttrPrefix: stringLenBetweenSchema(false, 1, 128), "separator_configuration": separatorConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericSeparatorConfiguration.html "suffix": stringLenBetweenSchema(false, 1, 128), @@ -156,7 +154,7 @@ func negativeValueConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "display_mode": stringSchema(true, enum.Validate[awstypes.NegativeValueDisplayMode]()), + "display_mode": stringEnumSchema[awstypes.NegativeValueDisplayMode](true), }, }, } @@ -184,7 +182,7 @@ func separatorConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "decimal_separator": stringSchema(false, enum.Validate[awstypes.NumericSeparatorSymbol]()), + "decimal_separator": stringEnumSchema[awstypes.NumericSeparatorSymbol](false), "thousands_separator": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ThousandSeparatorOptions.html Type: schema.TypeList, MinItems: 1, @@ -192,8 +190,8 @@ func separatorConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "symbol": stringSchema(false, enum.Validate[awstypes.NumericSeparatorSymbol]()), - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "symbol": stringEnumSchema[awstypes.NumericSeparatorSymbol](false), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -215,7 +213,7 @@ func labelOptionsSchema() *schema.Schema { Optional: true, }, "font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, } @@ -229,26 +227,26 @@ func fontConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "font_color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), - "font_decoration": stringSchema(false, enum.Validate[awstypes.FontDecoration]()), + "font_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "font_decoration": stringEnumSchema[awstypes.FontDecoration](false), "font_size": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontSize.html Type: schema.TypeList, MaxItems: 1, Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "relative": stringSchema(false, enum.Validate[awstypes.RelativeFontSize]()), + "relative": stringEnumSchema[awstypes.RelativeFontSize](false), }, }, }, - "font_style": stringSchema(false, enum.Validate[awstypes.FontStyle]()), + "font_style": stringEnumSchema[awstypes.FontStyle](false), "font_weight": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontWeight.html Type: schema.TypeList, MaxItems: 1, Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrName: stringSchema(false, enum.Validate[awstypes.FontWeightName]()), + names.AttrName: stringEnumSchema[awstypes.FontWeightName](false), }, }, }, diff --git a/internal/service/quicksight/schema/template_parameter.go b/internal/service/quicksight/schema/template_parameter.go index 859ea4243e35..aaf21d6019c8 100644 --- a/internal/service/quicksight/schema/template_parameter.go +++ b/internal/service/quicksight/schema/template_parameter.go @@ -11,7 +11,6 @@ import ( awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" @@ -55,7 +54,7 @@ func dateTimeParameterDeclarationSchema() *schema.Schema { }, }, }, - "time_granularity": stringSchema(false, enum.Validate[awstypes.TimeGranularity]()), + "time_granularity": stringEnumSchema[awstypes.TimeGranularity](false), "values_when_unset": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimeValueWhenUnsetConfiguration.html Type: schema.TypeList, MinItems: 1, @@ -68,7 +67,7 @@ func dateTimeParameterDeclarationSchema() *schema.Schema { Optional: true, ValidateFunc: verify.ValidUTCTimestamp, }, - "value_when_unset_option": stringSchema(false, enum.Validate[awstypes.ValueWhenUnsetOption]()), + "value_when_unset_option": stringEnumSchema[awstypes.ValueWhenUnsetOption](false), }, }, }, @@ -93,7 +92,7 @@ func decimalParameterDeclarationSchema() *schema.Schema { validation.StringMatch(regexache.MustCompile(`^[0-9A-Za-z]+$`), ""), ), }, - "parameter_value_type": stringSchema(true, enum.Validate[awstypes.ParameterValueType]()), + "parameter_value_type": stringEnumSchema[awstypes.ParameterValueType](true), "default_values": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DecimalDefaultValues.html Type: schema.TypeList, MinItems: 1, @@ -125,7 +124,7 @@ func decimalParameterDeclarationSchema() *schema.Schema { Type: schema.TypeFloat, Optional: true, }, - "value_when_unset_option": stringSchema(false, enum.Validate[awstypes.ValueWhenUnsetOption]()), + "value_when_unset_option": stringEnumSchema[awstypes.ValueWhenUnsetOption](false), }, }, }, @@ -150,7 +149,7 @@ func integerParameterDeclarationSchema() *schema.Schema { validation.StringMatch(regexache.MustCompile(`^[0-9A-Za-z]+$`), ""), ), }, - "parameter_value_type": stringSchema(true, enum.Validate[awstypes.ParameterValueType]()), + "parameter_value_type": stringEnumSchema[awstypes.ParameterValueType](true), "default_values": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_IntegerDefaultValues.html Type: schema.TypeList, MinItems: 1, @@ -182,7 +181,7 @@ func integerParameterDeclarationSchema() *schema.Schema { Type: schema.TypeInt, Optional: true, }, - "value_when_unset_option": stringSchema(false, enum.Validate[awstypes.ValueWhenUnsetOption]()), + "value_when_unset_option": stringEnumSchema[awstypes.ValueWhenUnsetOption](false), }, }, }, @@ -207,7 +206,7 @@ func stringParameterDeclarationSchema() *schema.Schema { validation.StringMatch(regexache.MustCompile(`^[0-9A-Za-z]+$`), ""), ), }, - "parameter_value_type": stringSchema(true, enum.Validate[awstypes.ParameterValueType]()), + "parameter_value_type": stringEnumSchema[awstypes.ParameterValueType](true), "default_values": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_StringDefaultValues.html Type: schema.TypeList, MinItems: 1, @@ -239,7 +238,7 @@ func stringParameterDeclarationSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "value_when_unset_option": stringSchema(false, enum.Validate[awstypes.ValueWhenUnsetOption]()), + "value_when_unset_option": stringEnumSchema[awstypes.ValueWhenUnsetOption](false), }, }, }, @@ -299,7 +298,7 @@ func parameterControlsSchema() *schema.Schema { "cascading_control_configuration": cascadingControlConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CascadingControlConfiguration.html "display_options": dropDownControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DropDownControlDisplayOptions.html "selectable_values": parameterSelectableValuesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ParameterSelectableValues.html - names.AttrType: stringSchema(false, enum.Validate[awstypes.SheetControlListType]()), + names.AttrType: stringEnumSchema[awstypes.SheetControlListType](false), }, }, }, @@ -316,7 +315,7 @@ func parameterControlsSchema() *schema.Schema { "cascading_control_configuration": cascadingControlConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CascadingControlConfiguration.html "display_options": listControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ListControlDisplayOptions.html "selectable_values": parameterSelectableValuesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ParameterSelectableValues.html - names.AttrType: stringSchema(false, enum.Validate[awstypes.SheetControlListType]()), + names.AttrType: stringEnumSchema[awstypes.SheetControlListType](false), }, }, }, diff --git a/internal/service/quicksight/schema/template_sheet.go b/internal/service/quicksight/schema/template_sheet.go index 1e4419eec0af..31dd1b0c6f57 100644 --- a/internal/service/quicksight/schema/template_sheet.go +++ b/internal/service/quicksight/schema/template_sheet.go @@ -4,12 +4,10 @@ package schema import ( - "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/internal/sdkv2/types/nullable" "github.com/hashicorp/terraform-provider-aws/names" @@ -31,7 +29,7 @@ func analysisDefaultSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "interactive_layout_configuration": interactiveLayoutConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DefaultInteractiveLayoutConfiguration.html "paginated_layout_configuration": paginatedLayoutConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DefaultPaginatedLayoutConfiguration.html, - "sheet_content_type": stringSchema(false, enum.Validate[awstypes.SheetContentType]()), + "sheet_content_type": stringEnumSchema[awstypes.SheetContentType](false), }, }, }, @@ -107,7 +105,7 @@ func interactiveLayoutConfigurationSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "resize_option": stringSchema(true, enum.Validate[awstypes.ResizeOption]()), + "resize_option": stringEnumSchema[awstypes.ResizeOption](true), }, }, }, @@ -165,8 +163,8 @@ func paperCanvasSizeOptionsSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "paper_margin": spacingSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Spacing.html - "paper_orientation": stringSchema(false, enum.Validate[awstypes.PaperOrientation]()), - "paper_size": stringSchema(false, enum.Validate[awstypes.PaperSize]()), + "paper_orientation": stringEnumSchema[awstypes.PaperOrientation](false), + "paper_size": stringEnumSchema[awstypes.PaperSize](false), }, }, } @@ -288,7 +286,7 @@ func layoutSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrStatus: stringSchema(false, enum.Validate[awstypes.Status]()), + names.AttrStatus: stringEnumSchema[awstypes.Status](false), }, }, }, @@ -346,7 +344,7 @@ func gridLayoutConfigurationSchema() *schema.Schema { ValidateFunc: validation.IntBetween(1, 36), }, "element_id": idSchema(), - "element_type": stringSchema(true, enum.Validate[awstypes.LayoutElementType]()), + "element_type": stringEnumSchema[awstypes.LayoutElementType](true), "row_span": { Type: schema.TypeInt, Required: true, @@ -383,7 +381,7 @@ func gridLayoutConfigurationSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "resize_option": stringSchema(true, enum.Validate[awstypes.ResizeOption]()), + "resize_option": stringEnumSchema[awstypes.ResizeOption](true), }, }, }, @@ -438,7 +436,7 @@ func freeFormLayoutElementsSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "element_id": idSchema(), - "element_type": stringSchema(true, enum.Validate[awstypes.LayoutElementType]()), + "element_type": stringEnumSchema[awstypes.LayoutElementType](true), "height": { Type: schema.TypeString, Required: true, @@ -462,8 +460,8 @@ func freeFormLayoutElementsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`), "")), - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "color": stringMatchSchema(false, `^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`, ""), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -474,8 +472,8 @@ func freeFormLayoutElementsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`), "")), - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "color": stringMatchSchema(false, `^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`, ""), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -486,7 +484,7 @@ func freeFormLayoutElementsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -504,7 +502,7 @@ func freeFormLayoutElementsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -519,12 +517,12 @@ func freeFormLayoutElementsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`), "")), - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "color": stringMatchSchema(false, `^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`, ""), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, } diff --git a/internal/service/quicksight/schema/visual.go b/internal/service/quicksight/schema/visual.go index 629a4079e9a7..f9a6e408b309 100644 --- a/internal/service/quicksight/schema/visual.go +++ b/internal/service/quicksight/schema/visual.go @@ -6,11 +6,9 @@ package schema import ( "time" - "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -67,9 +65,9 @@ func legendOptionsSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "position": stringSchema(false, enum.Validate[awstypes.LegendPosition]()), + "position": stringEnumSchema[awstypes.LegendPosition](false), "title": labelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LabelOptions.html - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), "width": { Type: schema.TypeString, Optional: true, @@ -94,7 +92,7 @@ func tooltipOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "aggregation_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "aggregation_visibility": stringEnumSchema[awstypes.Visibility](false), "tooltip_fields": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TooltipItem.html Type: schema.TypeList, Optional: true, @@ -115,7 +113,7 @@ func tooltipOptionsSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -131,19 +129,19 @@ func tooltipOptionsSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, }, }, }, - "tooltip_title_type": stringSchema(false, enum.Validate[awstypes.TooltipTitleType]()), + "tooltip_title_type": stringEnumSchema[awstypes.TooltipTitleType](false), }, }, }, - "selected_tooltip_type": stringSchema(false, enum.Validate[awstypes.SelectedTooltipType]()), - "tooltip_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "selected_tooltip_type": stringEnumSchema[awstypes.SelectedTooltipType](false), + "tooltip_visibility": stringEnumSchema[awstypes.Visibility](false), }, }, } @@ -157,7 +155,7 @@ func visualPaletteSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "chart_color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), + "chart_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), "color_map": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataPathColor.html Type: schema.TypeList, Optional: true, @@ -165,9 +163,9 @@ func visualPaletteSchema() *schema.Schema { MaxItems: 5000, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringSchema(true, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), + "color": stringMatchSchema(true, `^#[0-9A-F]{6}$`, ""), "element": dataPathValueSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataPathValue.html - "time_granularity": stringSchema(false, enum.Validate[awstypes.TimeGranularity]()), + "time_granularity": stringEnumSchema[awstypes.TimeGranularity](false), }, }, }, @@ -346,7 +344,7 @@ func comparisonConfigurationSchema() *schema.Schema { }, }, }, - "comparison_method": stringSchema(false, enum.Validate[awstypes.ComparisonMethod]()), + "comparison_method": stringEnumSchema[awstypes.ComparisonMethod](false), }, }, } @@ -360,7 +358,7 @@ func colorScaleSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color_fill_type": stringSchema(true, enum.Validate[awstypes.ColorFillType]()), + "color_fill_type": stringEnumSchema[awstypes.ColorFillType](true), "colors": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataColor.html Type: schema.TypeList, Required: true, @@ -368,7 +366,7 @@ func colorScaleSchema() *schema.Schema { MaxItems: 3, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), + "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), "data_value": { Type: schema.TypeFloat, Optional: true, @@ -383,7 +381,7 @@ func colorScaleSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), + "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), "data_value": { Type: schema.TypeFloat, Optional: true, @@ -404,7 +402,7 @@ func dataLabelOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "category_label_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "category_label_visibility": stringEnumSchema[awstypes.Visibility](false), "data_label_types": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataLabelType.html Type: schema.TypeList, MinItems: 1, @@ -421,7 +419,7 @@ func dataLabelOptionsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "field_id": stringLenBetweenSchema(false, 1, 512), "field_value": stringLenBetweenSchema(false, 1, 2048), - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -433,7 +431,7 @@ func dataLabelOptionsSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "field_id": stringLenBetweenSchema(false, 1, 512), - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -444,7 +442,7 @@ func dataLabelOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -455,7 +453,7 @@ func dataLabelOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -466,20 +464,20 @@ func dataLabelOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, }, }, }, - "label_color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), - "label_content": stringSchema(false, enum.Validate[awstypes.DataLabelContent]()), + "label_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "label_content": stringEnumSchema[awstypes.DataLabelContent](false), "label_font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html - "measure_label_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), - "overlap": stringSchema(false, enum.Validate[awstypes.DataLabelOverlap]()), - "position": stringSchema(false, enum.Validate[awstypes.DataLabelPosition]()), - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "measure_label_visibility": stringEnumSchema[awstypes.Visibility](false), + "overlap": stringEnumSchema[awstypes.DataLabelOverlap](false), + "position": stringEnumSchema[awstypes.DataLabelPosition](false), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, } diff --git a/internal/service/quicksight/schema/visual_actions.go b/internal/service/quicksight/schema/visual_actions.go index f5333d3cc32f..be76bcfc3e00 100644 --- a/internal/service/quicksight/schema/visual_actions.go +++ b/internal/service/quicksight/schema/visual_actions.go @@ -10,7 +10,6 @@ import ( awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" @@ -45,7 +44,7 @@ func visualCustomActionsSchema(maxItems int) *schema.Schema { Required: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "selected_field_option": stringSchema(false, enum.Validate[awstypes.SelectedFieldOptions]()), + "selected_field_option": stringEnumSchema[awstypes.SelectedFieldOptions](false), "selected_fields": { Type: schema.TypeList, Optional: true, @@ -73,7 +72,7 @@ func visualCustomActionsSchema(maxItems int) *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "target_visual_option": stringSchema(false, enum.Validate[awstypes.TargetVisualOptions]()), + "target_visual_option": stringEnumSchema[awstypes.TargetVisualOptions](false), "target_visuals": { Type: schema.TypeSet, Optional: true, @@ -194,7 +193,7 @@ func visualCustomActionsSchema(maxItems int) *schema.Schema { }, }, }, - "select_all_value_options": stringSchema(false, enum.Validate[awstypes.SelectAllValueOptions]()), + "select_all_value_options": stringEnumSchema[awstypes.SelectAllValueOptions](false), "source_field": stringLenBetweenSchema(false, 1, 2048), "source_parameter_name": { Type: schema.TypeString, @@ -216,7 +215,7 @@ func visualCustomActionsSchema(maxItems int) *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "url_target": stringSchema(true, enum.Validate[awstypes.URLTargetConfiguration]()), + "url_target": stringEnumSchema[awstypes.URLTargetConfiguration](true), "url_template": stringLenBetweenSchema(true, 1, 2048), }, }, @@ -226,8 +225,8 @@ func visualCustomActionsSchema(maxItems int) *schema.Schema { }, "custom_action_id": idSchema(), names.AttrName: stringLenBetweenSchema(true, 1, 256), - "trigger": stringSchema(true, enum.Validate[awstypes.VisualCustomActionTrigger]()), - names.AttrStatus: stringSchema(true, enum.Validate[awstypes.Status]()), + "trigger": stringEnumSchema[awstypes.VisualCustomActionTrigger](true), + names.AttrStatus: stringEnumSchema[awstypes.Status](true), }, }, } diff --git a/internal/service/quicksight/schema/visual_box_plot.go b/internal/service/quicksight/schema/visual_box_plot.go index 5d0d38e304e4..ec7cc212052e 100644 --- a/internal/service/quicksight/schema/visual_box_plot.go +++ b/internal/service/quicksight/schema/visual_box_plot.go @@ -8,7 +8,6 @@ import ( awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -37,8 +36,8 @@ func boxPlotVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "all_data_points_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), - "outlier_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "all_data_points_visibility": stringEnumSchema[awstypes.Visibility](false), + "outlier_visibility": stringEnumSchema[awstypes.Visibility](false), "style_options": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_BoxPlotStyleOptions.html Type: schema.TypeList, Optional: true, @@ -46,7 +45,7 @@ func boxPlotVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "fill_style": stringSchema(false, enum.Validate[awstypes.BoxPlotFillStyle]()), + "fill_style": stringEnumSchema[awstypes.BoxPlotFillStyle](false), }, }, }, diff --git a/internal/service/quicksight/schema/visual_chart_configuration.go b/internal/service/quicksight/schema/visual_chart_configuration.go index 93e18a810a63..13fcdc8290c4 100644 --- a/internal/service/quicksight/schema/visual_chart_configuration.go +++ b/internal/service/quicksight/schema/visual_chart_configuration.go @@ -4,12 +4,10 @@ package schema import ( - "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -21,7 +19,7 @@ func axisDisplayOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "axis_line_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "axis_line_visibility": stringEnumSchema[awstypes.Visibility](false), "axis_offset": { Type: schema.TypeString, Optional: true, @@ -40,7 +38,7 @@ func axisDisplayOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "missing_date_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "missing_date_visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -136,7 +134,7 @@ func axisDisplayOptionsSchema() *schema.Schema { }, }, }, - "grid_line_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "grid_line_visibility": stringEnumSchema[awstypes.Visibility](false), "scrollbar_options": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ScrollBarOptions.html Type: schema.TypeList, MinItems: 1, @@ -144,7 +142,7 @@ func axisDisplayOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), "visible_range": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisibleRangeOptions.html Type: schema.TypeList, MinItems: 1, @@ -225,8 +223,8 @@ func chartAxisLabelOptionsSchema() *schema.Schema { }, }, }, - "sort_icon_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "sort_icon_visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, } @@ -244,7 +242,7 @@ func itemsLimitConfigurationSchema() *schema.Schema { Type: schema.TypeInt, Optional: true, }, - "other_categories": stringSchema(true, enum.Validate[awstypes.OtherCategories]()), + "other_categories": stringEnumSchema[awstypes.OtherCategories](true), }, }, } @@ -291,7 +289,7 @@ func referenceLineSchema(maxItems int) *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "axis_binding": stringSchema(false, enum.Validate[awstypes.AxisBinding]()), + "axis_binding": stringEnumSchema[awstypes.AxisBinding](false), "dynamic_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLineDynamicDataConfiguration.html Type: schema.TypeList, Optional: true, @@ -336,13 +334,13 @@ func referenceLineSchema(maxItems int) *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "custom_label": stringSchema(true, validation.StringMatch(regexache.MustCompile(`.*\S.*`), "")), + "custom_label": stringMatchSchema(true, `.*\S.*`, ""), }, }, }, - "font_color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), + "font_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), "font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html - "horizontal_position": stringSchema(false, enum.Validate[awstypes.ReferenceLineLabelHorizontalPosition]()), + "horizontal_position": stringEnumSchema[awstypes.ReferenceLineLabelHorizontalPosition](false), "value_label_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLineValueLabelConfiguration.html Type: schema.TypeList, Optional: true, @@ -351,15 +349,15 @@ func referenceLineSchema(maxItems int) *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "format_configuration": numericFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericFormatConfiguration.html - "relative_position": stringSchema(false, enum.Validate[awstypes.ReferenceLineValueLabelRelativePosition]()), + "relative_position": stringEnumSchema[awstypes.ReferenceLineValueLabelRelativePosition](false), }, }, }, - "vertical_position": stringSchema(false, enum.Validate[awstypes.ReferenceLineLabelVerticalPosition]()), + "vertical_position": stringEnumSchema[awstypes.ReferenceLineLabelVerticalPosition](false), }, }, }, - names.AttrStatus: stringSchema(false, enum.Validate[awstypes.Status]()), + names.AttrStatus: stringEnumSchema[awstypes.Status](false), "style_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLineStyleConfiguration.html Type: schema.TypeList, Optional: true, @@ -367,8 +365,8 @@ func referenceLineSchema(maxItems int) *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), - "pattern": stringSchema(false, enum.Validate[awstypes.ReferenceLinePatternType]()), + "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "pattern": stringEnumSchema[awstypes.ReferenceLinePatternType](false), }, }, }, @@ -402,20 +400,20 @@ func smallMultiplesOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "background_color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`), "")), - "background_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), - "border_color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`), "")), - "border_style": stringSchema(false, enum.Validate[awstypes.PanelBorderStyle]()), + "background_color": stringMatchSchema(false, `^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`, ""), + "background_visibility": stringEnumSchema[awstypes.Visibility](false), + "border_color": stringMatchSchema(false, `^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`, ""), + "border_style": stringEnumSchema[awstypes.PanelBorderStyle](false), "border_thickness": { Type: schema.TypeString, Optional: true, }, - "border_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "border_visibility": stringEnumSchema[awstypes.Visibility](false), "gutter_spacing": { Type: schema.TypeString, Optional: true, }, - "gutter_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "gutter_visibility": stringEnumSchema[awstypes.Visibility](false), "title": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PanelTitleOptions.html Type: schema.TypeList, Optional: true, @@ -424,8 +422,8 @@ func smallMultiplesOptionsSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html - "horizontal_text_alignment": stringSchema(false, enum.Validate[awstypes.HorizontalTextAlignment]()), - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "horizontal_text_alignment": stringEnumSchema[awstypes.HorizontalTextAlignment](false), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, diff --git a/internal/service/quicksight/schema/visual_combo_chart.go b/internal/service/quicksight/schema/visual_combo_chart.go index 7db6b16e6b87..244f72121fdc 100644 --- a/internal/service/quicksight/schema/visual_combo_chart.go +++ b/internal/service/quicksight/schema/visual_combo_chart.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -30,7 +29,7 @@ func comboChartVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "bar_data_labels": dataLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataLabelOptions.html - "bars_arrangement": stringSchema(false, enum.Validate[awstypes.BarsArrangement]()), + "bars_arrangement": stringEnumSchema[awstypes.BarsArrangement](false), "category_axis": axisDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AxisDisplayOptions.html "category_label_options": chartAxisLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html "color_label_options": chartAxisLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html diff --git a/internal/service/quicksight/schema/visual_conditional_formatting.go b/internal/service/quicksight/schema/visual_conditional_formatting.go index aac7b83ec053..134146797e01 100644 --- a/internal/service/quicksight/schema/visual_conditional_formatting.go +++ b/internal/service/quicksight/schema/visual_conditional_formatting.go @@ -4,12 +4,9 @@ package schema import ( - "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -46,7 +43,7 @@ func conditionalFormattingColorSchema() *schema.Schema { Type: schema.TypeFloat, Required: true, }, - "color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), + "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), "data_value": { Type: schema.TypeFloat, Optional: true, @@ -68,7 +65,7 @@ func conditionalFormattingColorSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), + "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), }, }, @@ -93,7 +90,7 @@ func conditionalFormattingIconSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), + "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), "icon_options": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ConditionalFormattingCustomIconOptions.html Type: schema.TypeList, @@ -102,8 +99,8 @@ func conditionalFormattingIconSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "icon": stringSchema(false, enum.Validate[awstypes.Icon]()), - "unicode_icon": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^[^\\u0000-\\u00FF]$`), "")), + "icon": stringEnumSchema[awstypes.Icon](false), + "unicode_icon": stringMatchSchema(false, `^[^\\u0000-\\u00FF]$`, ""), }, }, }, @@ -114,7 +111,7 @@ func conditionalFormattingIconSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "icon_display_option": stringSchema(false, enum.Validate[awstypes.ConditionalFormattingIconDisplayOption]())}, + "icon_display_option": stringEnumSchema[awstypes.ConditionalFormattingIconDisplayOption](false)}, }, }, }, @@ -128,7 +125,7 @@ func conditionalFormattingIconSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), - "icon_set_type": stringSchema(false, enum.Validate[awstypes.ConditionalFormattingIconSetType]()), + "icon_set_type": stringEnumSchema[awstypes.ConditionalFormattingIconSetType](false), }, }, }, diff --git a/internal/service/quicksight/schema/visual_custom_content.go b/internal/service/quicksight/schema/visual_custom_content.go index 795895f3c611..36a165c96c4d 100644 --- a/internal/service/quicksight/schema/visual_custom_content.go +++ b/internal/service/quicksight/schema/visual_custom_content.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -31,9 +30,9 @@ func customContentVisualSchema() *schema.Schema { DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrContentType: stringSchema(false, enum.Validate[awstypes.CustomContentType]()), + names.AttrContentType: stringEnumSchema[awstypes.CustomContentType](false), "content_url": stringLenBetweenSchema(false, 1, 2048), - "image_scaling": stringSchema(false, enum.Validate[awstypes.CustomContentImageScalingConfiguration]()), + "image_scaling": stringEnumSchema[awstypes.CustomContentImageScalingConfiguration](false), }, }, }, diff --git a/internal/service/quicksight/schema/visual_fields.go b/internal/service/quicksight/schema/visual_fields.go index 71fffbb2f3b5..235c4053e641 100644 --- a/internal/service/quicksight/schema/visual_fields.go +++ b/internal/service/quicksight/schema/visual_fields.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -50,7 +49,7 @@ func dimensionFieldSchema(maxItems int) *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "field_id": stringLenBetweenSchema(true, 1, 512), - "date_granularity": stringSchema(false, enum.Validate[awstypes.TimeGranularity]()), + "date_granularity": stringEnumSchema[awstypes.TimeGranularity](false), "format_configuration": dateTimeFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimeFormatConfiguration.html "hierarchy_id": stringLenBetweenSchema(false, 1, 512), }, @@ -104,7 +103,7 @@ func measureFieldSchema(maxItems int) *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "field_id": stringLenBetweenSchema(true, 1, 512), - "aggregation_function": stringSchema(false, enum.Validate[awstypes.CategoricalAggregationFunction]()), + "aggregation_function": stringEnumSchema[awstypes.CategoricalAggregationFunction](false), "format_configuration": stringFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_StringFormatConfiguration.html }, }, @@ -118,7 +117,7 @@ func measureFieldSchema(maxItems int) *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "field_id": stringLenBetweenSchema(true, 1, 512), - "aggregation_function": stringSchema(false, enum.Validate[awstypes.DateAggregationFunction]()), + "aggregation_function": stringEnumSchema[awstypes.DateAggregationFunction](false), "format_configuration": dateTimeFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimeFormatConfiguration.html }, }, diff --git a/internal/service/quicksight/schema/visual_funnel_chart.go b/internal/service/quicksight/schema/visual_funnel_chart.go index 6ccd640b08b5..011be050fc5b 100644 --- a/internal/service/quicksight/schema/visual_funnel_chart.go +++ b/internal/service/quicksight/schema/visual_funnel_chart.go @@ -4,12 +4,9 @@ package schema import ( - "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -39,13 +36,13 @@ func funnelChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "category_label_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), - "label_color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), + "category_label_visibility": stringEnumSchema[awstypes.Visibility](false), + "label_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), "label_font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html - "measure_data_label_style": stringSchema(false, enum.Validate[awstypes.FunnelChartMeasureDataLabelStyle]()), - "measure_label_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), - "position": stringSchema(false, enum.Validate[awstypes.DataLabelPosition]()), - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "measure_data_label_style": stringEnumSchema[awstypes.FunnelChartMeasureDataLabelStyle](false), + "measure_label_visibility": stringEnumSchema[awstypes.Visibility](false), + "position": stringEnumSchema[awstypes.DataLabelPosition](false), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, diff --git a/internal/service/quicksight/schema/visual_gauge_chart.go b/internal/service/quicksight/schema/visual_gauge_chart.go index 6f64fb29c4ae..1af562edc968 100644 --- a/internal/service/quicksight/schema/visual_gauge_chart.go +++ b/internal/service/quicksight/schema/visual_gauge_chart.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -59,7 +58,7 @@ func gaugeChartVisualSchema() *schema.Schema { Type: schema.TypeFloat, Optional: true, }, - "arc_thickness": stringSchema(false, enum.Validate[awstypes.ArcThicknessOptions]()), + "arc_thickness": stringEnumSchema[awstypes.ArcThicknessOptions](false), }, }, }, @@ -96,7 +95,7 @@ func gaugeChartVisualSchema() *schema.Schema { }, }, "comparison": comparisonConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ComparisonConfiguration.html - "primary_value_display_type": stringSchema(false, enum.Validate[awstypes.PrimaryValueDisplayType]()), + "primary_value_display_type": stringEnumSchema[awstypes.PrimaryValueDisplayType](false), "primary_value_font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html }, }, diff --git a/internal/service/quicksight/schema/visual_geospatial_map.go b/internal/service/quicksight/schema/visual_geospatial_map.go index e418e895c2b1..318d32715f08 100644 --- a/internal/service/quicksight/schema/visual_geospatial_map.go +++ b/internal/service/quicksight/schema/visual_geospatial_map.go @@ -4,12 +4,9 @@ package schema import ( - "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -83,7 +80,7 @@ func geospatialMapVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), + "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), }, }, }, @@ -93,7 +90,7 @@ func geospatialMapVisualSchema() *schema.Schema { }, }, }, - "selected_point_style": stringSchema(false, enum.Validate[awstypes.GeospatialSelectedPointStyle]()), + "selected_point_style": stringEnumSchema[awstypes.GeospatialSelectedPointStyle](false), }, }, }, diff --git a/internal/service/quicksight/schema/visual_histogram.go b/internal/service/quicksight/schema/visual_histogram.go index 44ed962b3f3a..0767f024d497 100644 --- a/internal/service/quicksight/schema/visual_histogram.go +++ b/internal/service/quicksight/schema/visual_histogram.go @@ -8,7 +8,6 @@ import ( awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -71,7 +70,7 @@ func histogramVisualSchema() *schema.Schema { }, }, }, - "selected_bin_type": stringSchema(false, enum.Validate[awstypes.HistogramBinType]()), + "selected_bin_type": stringEnumSchema[awstypes.HistogramBinType](false), "start_value": { Type: schema.TypeFloat, Optional: true, diff --git a/internal/service/quicksight/schema/visual_insight.go b/internal/service/quicksight/schema/visual_insight.go index 33833a363f3a..95cc0dbec101 100644 --- a/internal/service/quicksight/schema/visual_insight.go +++ b/internal/service/quicksight/schema/visual_insight.go @@ -8,7 +8,6 @@ import ( awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -58,7 +57,7 @@ func insightVisualSchema() *schema.Schema { "periods_backward": intSchema(false, validation.IntBetween(0, 1000)), "periods_forward": intSchema(false, validation.IntBetween(1, 1000)), "prediction_interval": intSchema(false, validation.IntBetween(50, 95)), - "seasonality": stringSchema(true, enum.Validate[awstypes.ForecastComputationSeasonality]()), + "seasonality": stringEnumSchema[awstypes.ForecastComputationSeasonality](true), "upper_boundary": { Type: schema.TypeFloat, Optional: true, @@ -94,7 +93,7 @@ func insightVisualSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "computation_id": idSchema(), "time": dimensionFieldSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DimensionField.html - names.AttrType: stringSchema(true, enum.Validate[awstypes.MaximumMinimumComputationType]()), + names.AttrType: stringEnumSchema[awstypes.MaximumMinimumComputationType](true), names.AttrName: { Type: schema.TypeString, Optional: true, @@ -151,7 +150,7 @@ func insightVisualSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "period_time_granularity": stringSchema(true, enum.Validate[awstypes.TimeGranularity]()), + "period_time_granularity": stringEnumSchema[awstypes.TimeGranularity](true), names.AttrValue: measureFieldSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_MeasureField.html }, }, @@ -166,9 +165,9 @@ func insightVisualSchema() *schema.Schema { "computation_id": idSchema(), "category": dimensionFieldSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DimensionField.html "time": dimensionFieldSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DimensionField.html - names.AttrType: stringSchema(true, enum.Validate[awstypes.TopBottomComputationType]()), + names.AttrType: stringEnumSchema[awstypes.TopBottomComputationType](true), "mover_size": intSchema(false, validation.IntBetween(1, 20)), - "sort_order": stringSchema(true, enum.Validate[awstypes.TopBottomSortOrder]()), + "sort_order": stringEnumSchema[awstypes.TopBottomSortOrder](true), names.AttrName: { Type: schema.TypeString, Optional: true, @@ -191,7 +190,7 @@ func insightVisualSchema() *schema.Schema { Optional: true, }, "result_size": intSchema(false, validation.IntBetween(1, 20)), - names.AttrType: stringSchema(true, enum.Validate[awstypes.TopBottomComputationType]()), + names.AttrType: stringEnumSchema[awstypes.TopBottomComputationType](true), names.AttrValue: measureFieldSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_MeasureField.html }, }, diff --git a/internal/service/quicksight/schema/visual_kpi.go b/internal/service/quicksight/schema/visual_kpi.go index 3471c8aa5338..6b4a5fd90908 100644 --- a/internal/service/quicksight/schema/visual_kpi.go +++ b/internal/service/quicksight/schema/visual_kpi.go @@ -4,12 +4,9 @@ package schema import ( - "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -52,7 +49,7 @@ func kpiVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "comparison": comparisonConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ComparisonConfiguration.html - "primary_value_display_type": stringSchema(false, enum.Validate[awstypes.PrimaryValueDisplayType]()), + "primary_value_display_type": stringEnumSchema[awstypes.PrimaryValueDisplayType](false), "primary_value_font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html "progress_bar": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ProgressBarOptions.html Type: schema.TypeList, @@ -61,7 +58,7 @@ func kpiVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -72,7 +69,7 @@ func kpiVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -84,10 +81,10 @@ func kpiVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), - "tooltip_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), - names.AttrType: stringSchema(true, enum.Validate[awstypes.KPISparklineType]()), - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "tooltip_visibility": stringEnumSchema[awstypes.Visibility](false), + names.AttrType: stringEnumSchema[awstypes.KPISparklineType](true), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -98,7 +95,7 @@ func kpiVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -116,7 +113,7 @@ func kpiVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrType: stringSchema(true, enum.Validate[awstypes.KPIVisualStandardLayoutType]()), + names.AttrType: stringEnumSchema[awstypes.KPIVisualStandardLayoutType](true), }, }, }, diff --git a/internal/service/quicksight/schema/visual_line_chart.go b/internal/service/quicksight/schema/visual_line_chart.go index 3d4840506d8a..05462cf9ac7c 100644 --- a/internal/service/quicksight/schema/visual_line_chart.go +++ b/internal/service/quicksight/schema/visual_line_chart.go @@ -6,7 +6,6 @@ package schema import ( "time" - "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -42,7 +41,7 @@ func lineChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "axis_binding": stringSchema(false, enum.Validate[awstypes.AxisBinding]()), + "axis_binding": stringEnumSchema[awstypes.AxisBinding](false), "line_style_settings": lineChartLineStyleSettingsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LineChartLineStyleSettings.html "marker_style_settings": lineChartMarkerStyleSettingsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LineChartMarkerStyleSettings.html }, @@ -161,7 +160,7 @@ func lineChartVisualSchema() *schema.Schema { MaxItems: 100, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "treatment_option": stringSchema(false, enum.Validate[awstypes.MissingDataTreatmentOption]()), + "treatment_option": stringEnumSchema[awstypes.MissingDataTreatmentOption](false), }, }, }, @@ -185,7 +184,7 @@ func lineChartVisualSchema() *schema.Schema { MaxItems: 100, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "treatment_option": stringSchema(false, enum.Validate[awstypes.MissingDataTreatmentOption]()), + "treatment_option": stringEnumSchema[awstypes.MissingDataTreatmentOption](false), }, }, }, @@ -207,7 +206,7 @@ func lineChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "axis_binding": stringSchema(true, enum.Validate[awstypes.AxisBinding]()), + "axis_binding": stringEnumSchema[awstypes.AxisBinding](true), "field_id": stringLenBetweenSchema(true, 1, 512), "field_value": { Type: schema.TypeString, @@ -235,7 +234,7 @@ func lineChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "axis_binding": stringSchema(true, enum.Validate[awstypes.AxisBinding]()), + "axis_binding": stringEnumSchema[awstypes.AxisBinding](true), "field_id": stringLenBetweenSchema(true, 1, 512), "settings": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LineChartSeriesSettings.html Type: schema.TypeList, @@ -296,9 +295,9 @@ func lineChartLineStyleSettingsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "line_interpolation": stringSchema(false, enum.Validate[awstypes.LineInterpolation]()), - "line_style": stringSchema(false, enum.Validate[awstypes.LineChartLineStyle]()), - "line_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "line_interpolation": stringEnumSchema[awstypes.LineInterpolation](false), + "line_style": stringEnumSchema[awstypes.LineChartLineStyle](false), + "line_visibility": stringEnumSchema[awstypes.Visibility](false), "line_width": { Type: schema.TypeString, Optional: true, @@ -316,13 +315,13 @@ func lineChartMarkerStyleSettingsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "marker_color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), - "marker_shape": stringSchema(false, enum.Validate[awstypes.LineChartMarkerShape]()), + "marker_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "marker_shape": stringEnumSchema[awstypes.LineChartMarkerShape](false), "marker_size": { Type: schema.TypeString, Optional: true, }, - "marker_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "marker_visibility": stringEnumSchema[awstypes.Visibility](false), }, }, } diff --git a/internal/service/quicksight/schema/visual_map.go b/internal/service/quicksight/schema/visual_map.go index b98dd2559c17..ef7b942a2167 100644 --- a/internal/service/quicksight/schema/visual_map.go +++ b/internal/service/quicksight/schema/visual_map.go @@ -8,7 +8,6 @@ import ( awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" ) func geospatialMapStyleOptionsSchema() *schema.Schema { @@ -19,7 +18,7 @@ func geospatialMapStyleOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "base_map_style": stringSchema(false, enum.Validate[awstypes.BaseMapStyleType]()), + "base_map_style": stringEnumSchema[awstypes.BaseMapStyleType](false), }, }, } @@ -63,7 +62,7 @@ func geospatialWindowOptionsSchema() *schema.Schema { }, }, }, - "map_zoom_mode": stringSchema(false, enum.Validate[awstypes.MapZoomMode]()), + "map_zoom_mode": stringEnumSchema[awstypes.MapZoomMode](false), }, }, } diff --git a/internal/service/quicksight/schema/visual_pie_chart.go b/internal/service/quicksight/schema/visual_pie_chart.go index e857c53bc2ac..c83ee550bcf1 100644 --- a/internal/service/quicksight/schema/visual_pie_chart.go +++ b/internal/service/quicksight/schema/visual_pie_chart.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -46,7 +45,7 @@ func pieChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "arc_thickness": stringSchema(false, enum.Validate[awstypes.ArcThicknessOptions]()), + "arc_thickness": stringEnumSchema[awstypes.ArcThicknessOptions](false), }, }, }, @@ -57,7 +56,7 @@ func pieChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "label_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "label_visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, diff --git a/internal/service/quicksight/schema/visual_pivot_table.go b/internal/service/quicksight/schema/visual_pivot_table.go index 1dba33926c98..40e9cff0220f 100644 --- a/internal/service/quicksight/schema/visual_pivot_table.go +++ b/internal/service/quicksight/schema/visual_pivot_table.go @@ -9,7 +9,6 @@ import ( awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" @@ -74,7 +73,7 @@ func pivotTableVisualSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "field_id": stringLenBetweenSchema(true, 1, 512), "custom_label": stringLenBetweenSchema(false, 1, 2048), - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -111,8 +110,8 @@ func pivotTableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "overflow_column_header_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), - "vertical_overflow_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "overflow_column_header_visibility": stringEnumSchema[awstypes.Visibility](false), + "vertical_overflow_visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -147,7 +146,7 @@ func pivotTableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "direction": stringSchema(true, enum.Validate[awstypes.SortDirection]()), + "direction": stringEnumSchema[awstypes.SortDirection](true), "sort_paths": dataPathValueSchema(dataPathValueMaxItems), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataPathValue.html }, }, @@ -170,15 +169,15 @@ func pivotTableVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "collapsed_row_dimensions_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "collapsed_row_dimensions_visibility": stringEnumSchema[awstypes.Visibility](false), "column_header_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "column_names_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), - "metric_placement": stringSchema(false, enum.Validate[awstypes.PivotTableMetricPlacement]()), + "column_names_visibility": stringEnumSchema[awstypes.Visibility](false), + "metric_placement": stringEnumSchema[awstypes.PivotTableMetricPlacement](false), "row_alternate_color_options": rowAlternateColorOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RowAlternateColorOptions.html "row_field_names_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html "row_header_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "single_metric_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), - "toggle_buttons_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "single_metric_visibility": stringEnumSchema[awstypes.Visibility](false), + "toggle_buttons_visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -228,7 +227,7 @@ func pivotTableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrRole: stringSchema(false, enum.Validate[awstypes.PivotTableConditionalFormattingScopeRole]()), + names.AttrRole: stringEnumSchema[awstypes.PivotTableConditionalFormattingScopeRole](false), }, }, }, @@ -257,8 +256,8 @@ func tableBorderOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), - "style": stringSchema(false, enum.Validate[awstypes.TableBorderStyle]()), + "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "style": stringEnumSchema[awstypes.TableBorderStyle](false), "thickness": intSchema(false, validation.IntBetween(1, 4)), }, }, @@ -273,7 +272,7 @@ func tableCellStyleSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "background_color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), + "background_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), "border": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GlobalTableBorderOptions.html Type: schema.TypeList, Optional: true, @@ -303,10 +302,10 @@ func tableCellStyleSchema() *schema.Schema { }, "font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html "height": intSchema(false, validation.IntBetween(8, 500)), - "horizontal_text_alignment": stringSchema(false, enum.Validate[awstypes.HorizontalTextAlignment]()), - "text_wrap": stringSchema(false, enum.Validate[awstypes.TextWrap]()), - "vertical_text_alignment": stringSchema(false, enum.Validate[awstypes.VerticalTextAlignment]()), - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "horizontal_text_alignment": stringEnumSchema[awstypes.HorizontalTextAlignment](false), + "text_wrap": stringEnumSchema[awstypes.TextWrap](false), + "vertical_text_alignment": stringEnumSchema[awstypes.VerticalTextAlignment](false), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, } @@ -324,7 +323,7 @@ func subtotalOptionsSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "field_level": stringSchema(false, enum.Validate[awstypes.PivotTableSubtotalLevel]()), + "field_level": stringEnumSchema[awstypes.PivotTableSubtotalLevel](false), "field_level_options": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PivotTableFieldSubtotalOptions.html Type: schema.TypeList, Optional: true, @@ -338,7 +337,7 @@ func subtotalOptionsSchema() *schema.Schema { }, "metric_header_cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html "total_cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "totals_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "totals_visibility": stringEnumSchema[awstypes.Visibility](false), "value_cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html }, }, @@ -358,10 +357,10 @@ func pivotTotalOptionsSchema() *schema.Schema { Optional: true, }, "metric_header_cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "placement": stringSchema(false, enum.Validate[awstypes.TableTotalsPlacement]()), - "scroll_status": stringSchema(false, enum.Validate[awstypes.TableTotalsScrollStatus]()), + "placement": stringEnumSchema[awstypes.TableTotalsPlacement](false), + "scroll_status": stringEnumSchema[awstypes.TableTotalsScrollStatus](false), "total_cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "totals_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "totals_visibility": stringEnumSchema[awstypes.Visibility](false), "value_cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html }, }, @@ -383,7 +382,7 @@ func rowAlternateColorOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")}, }, - names.AttrStatus: stringSchema(false, enum.Validate[awstypes.Status]()), + names.AttrStatus: stringEnumSchema[awstypes.Status](false), }, }, } diff --git a/internal/service/quicksight/schema/visual_radar_chart.go b/internal/service/quicksight/schema/visual_radar_chart.go index 48514f902d0a..c40c16e2353b 100644 --- a/internal/service/quicksight/schema/visual_radar_chart.go +++ b/internal/service/quicksight/schema/visual_radar_chart.go @@ -4,12 +4,10 @@ package schema import ( - "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -31,9 +29,9 @@ func radarChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "alternate_band_colors_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), - "alternate_band_even_color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), - "alternate_band_odd_color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), + "alternate_band_colors_visibility": stringEnumSchema[awstypes.Visibility](false), + "alternate_band_even_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "alternate_band_odd_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), "base_series_settings": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RadarChartSeriesSettings.html Type: schema.TypeList, Optional: true, @@ -48,7 +46,7 @@ func radarChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -83,7 +81,7 @@ func radarChartVisualSchema() *schema.Schema { }, }, "legend": legendOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LegendOptions.html - "shape": stringSchema(false, enum.Validate[awstypes.RadarChartShape]()), + "shape": stringEnumSchema[awstypes.RadarChartShape](false), "sort_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RadarChartSortConfiguration.html Type: schema.TypeList, Optional: true, diff --git a/internal/service/quicksight/schema/visual_sort.go b/internal/service/quicksight/schema/visual_sort.go index c7cf2325fa7d..23a6ad956882 100644 --- a/internal/service/quicksight/schema/visual_sort.go +++ b/internal/service/quicksight/schema/visual_sort.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-provider-aws/internal/enum" ) const fieldSortOptionsMaxItems100 = 100 @@ -35,7 +34,7 @@ func columnSortSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "direction": stringSchema(true, enum.Validate[awstypes.SortDirection]()), + "direction": stringEnumSchema[awstypes.SortDirection](true), "sort_by": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "aggregation_function": aggregationFunctionSchema(false), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AggregationFunction.html }, @@ -51,7 +50,7 @@ func fieldSortSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "direction": stringSchema(true, enum.Validate[awstypes.SortDirection]()), + "direction": stringEnumSchema[awstypes.SortDirection](true), "field_id": stringLenBetweenSchema(true, 1, 512), }, }, diff --git a/internal/service/quicksight/schema/visual_table.go b/internal/service/quicksight/schema/visual_table.go index 8a45999ecfe6..a85dda847ec7 100644 --- a/internal/service/quicksight/schema/visual_table.go +++ b/internal/service/quicksight/schema/visual_table.go @@ -4,12 +4,10 @@ package schema import ( - "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" @@ -76,7 +74,7 @@ func tableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "table_cell_image_scaling_configuration": stringSchema(false, enum.Validate[awstypes.TableCellImageScalingConfiguration]()), + "table_cell_image_scaling_configuration": stringEnumSchema[awstypes.TableCellImageScalingConfiguration](false), }, }, }, @@ -104,7 +102,7 @@ func tableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "icon": stringSchema(false, enum.Validate[awstypes.TableFieldIconSetType]()), + "icon": stringEnumSchema[awstypes.TableFieldIconSetType](false), }, }, }, @@ -126,14 +124,14 @@ func tableVisualSchema() *schema.Schema { }, }, }, - names.AttrTarget: stringSchema(false, enum.Validate[awstypes.URLTargetConfiguration]()), + names.AttrTarget: stringEnumSchema[awstypes.URLTargetConfiguration](false), }, }, }, }, }, }, - "visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](false), "width": { Type: schema.TypeString, Optional: true, @@ -196,8 +194,8 @@ func tableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "overflow_column_header_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), - "vertical_overflow_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "overflow_column_header_visibility": stringEnumSchema[awstypes.Visibility](false), + "vertical_overflow_visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, @@ -243,8 +241,8 @@ func tableVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "field_id": stringLenBetweenSchema(true, 1, 512), - "negative_color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), - "positive_color": stringSchema(false, validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")), + "negative_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "positive_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), }, }, }, @@ -260,7 +258,7 @@ func tableVisualSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html "header_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "orientation": stringSchema(false, enum.Validate[awstypes.TableOrientation]()), + "orientation": stringEnumSchema[awstypes.TableOrientation](false), "row_alternate_color_options": rowAlternateColorOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RowAlternateColorOptions.html }, }, @@ -276,10 +274,10 @@ func tableVisualSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "placement": stringSchema(false, enum.Validate[awstypes.TableTotalsPlacement]()), - "scroll_status": stringSchema(false, enum.Validate[awstypes.TableTotalsScrollStatus]()), + "placement": stringEnumSchema[awstypes.TableTotalsPlacement](false), + "scroll_status": stringEnumSchema[awstypes.TableTotalsScrollStatus](false), "total_cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "totals_visibility": stringSchema(false, enum.Validate[awstypes.Visibility]()), + "totals_visibility": stringEnumSchema[awstypes.Visibility](false), }, }, }, diff --git a/internal/service/quicksight/schema/visual_word_cloud.go b/internal/service/quicksight/schema/visual_word_cloud.go index 879adeb47e73..9ac446dc9e66 100644 --- a/internal/service/quicksight/schema/visual_word_cloud.go +++ b/internal/service/quicksight/schema/visual_word_cloud.go @@ -8,7 +8,6 @@ import ( awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -73,12 +72,12 @@ func wordCloudVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "cloud_layout": stringSchema(false, enum.Validate[awstypes.WordCloudCloudLayout]()), + "cloud_layout": stringEnumSchema[awstypes.WordCloudCloudLayout](false), "maximum_string_length": intSchema(false, validation.IntBetween(1, 100)), - "word_casing": stringSchema(false, enum.Validate[awstypes.WordCloudWordCasing]()), - "word_orientation": stringSchema(false, enum.Validate[awstypes.WordCloudWordOrientation]()), - "word_padding": stringSchema(false, enum.Validate[awstypes.WordCloudWordPadding]()), - "word_scaling": stringSchema(false, enum.Validate[awstypes.WordCloudWordScaling]()), + "word_casing": stringEnumSchema[awstypes.WordCloudWordCasing](false), + "word_orientation": stringEnumSchema[awstypes.WordCloudWordOrientation](false), + "word_padding": stringEnumSchema[awstypes.WordCloudWordPadding](false), + "word_scaling": stringEnumSchema[awstypes.WordCloudWordScaling](false), }, }, }, From f6e65b0d68ac1b744269bd69a20da24e77f0975a Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Wed, 2 Oct 2024 17:50:48 -0700 Subject: [PATCH 04/12] Creates `hexColorSchema` --- .../quicksight/schema/template_format.go | 2 +- internal/service/quicksight/schema/theme.go | 96 ++++--------------- internal/service/quicksight/schema/visual.go | 14 ++- .../schema/visual_chart_configuration.go | 4 +- .../schema/visual_conditional_formatting.go | 6 +- .../quicksight/schema/visual_funnel_chart.go | 2 +- .../schema/visual_geospatial_map.go | 2 +- .../service/quicksight/schema/visual_kpi.go | 2 +- .../quicksight/schema/visual_line_chart.go | 2 +- .../quicksight/schema/visual_pivot_table.go | 4 +- .../quicksight/schema/visual_radar_chart.go | 4 +- .../service/quicksight/schema/visual_table.go | 4 +- 12 files changed, 41 insertions(+), 101 deletions(-) diff --git a/internal/service/quicksight/schema/template_format.go b/internal/service/quicksight/schema/template_format.go index 285cfbf18813..b5afd8328887 100644 --- a/internal/service/quicksight/schema/template_format.go +++ b/internal/service/quicksight/schema/template_format.go @@ -227,7 +227,7 @@ func fontConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "font_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "font_color": hexColorSchema(false), "font_decoration": stringEnumSchema[awstypes.FontDecoration](false), "font_size": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontSize.html Type: schema.TypeList, diff --git a/internal/service/quicksight/schema/theme.go b/internal/service/quicksight/schema/theme.go index bd2c11d3ae50..611abf3f975c 100644 --- a/internal/service/quicksight/schema/theme.go +++ b/internal/service/quicksight/schema/theme.go @@ -148,86 +148,22 @@ func ThemeConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "accent": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - "accent_foreground": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - "danger": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - "danger_foreground": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - "dimension": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - "dimension_foreground": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - "measure": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - "measure_foreground": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - "primary_background": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - "primary_foreground": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - "secondary_background": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - "secondary_foreground": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - "success": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - "success_foreground": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - "warning": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - "warning_foreground": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, + "accent": hexColorSchema(false), + "accent_foreground": hexColorSchema(false), + "danger": hexColorSchema(false), + "danger_foreground": hexColorSchema(false), + "dimension": hexColorSchema(false), + "dimension_foreground": hexColorSchema(false), + "measure": hexColorSchema(false), + "measure_foreground": hexColorSchema(false), + "primary_background": hexColorSchema(false), + "primary_foreground": hexColorSchema(false), + "secondary_background": hexColorSchema(false), + "secondary_foreground": hexColorSchema(false), + "success": hexColorSchema(false), + "success_foreground": hexColorSchema(false), + "warning": hexColorSchema(false), + "warning_foreground": hexColorSchema(false), }, }, }, diff --git a/internal/service/quicksight/schema/visual.go b/internal/service/quicksight/schema/visual.go index f9a6e408b309..916430bd23cb 100644 --- a/internal/service/quicksight/schema/visual.go +++ b/internal/service/quicksight/schema/visual.go @@ -155,7 +155,7 @@ func visualPaletteSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "chart_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "chart_color": hexColorSchema(false), "color_map": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataPathColor.html Type: schema.TypeList, Optional: true, @@ -163,7 +163,7 @@ func visualPaletteSchema() *schema.Schema { MaxItems: 5000, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringMatchSchema(true, `^#[0-9A-F]{6}$`, ""), + "color": hexColorSchema(true), "element": dataPathValueSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataPathValue.html "time_granularity": stringEnumSchema[awstypes.TimeGranularity](false), }, @@ -366,7 +366,7 @@ func colorScaleSchema() *schema.Schema { MaxItems: 3, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "color": hexColorSchema(false), "data_value": { Type: schema.TypeFloat, Optional: true, @@ -381,7 +381,7 @@ func colorScaleSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "color": hexColorSchema(false), "data_value": { Type: schema.TypeFloat, Optional: true, @@ -471,7 +471,7 @@ func dataLabelOptionsSchema() *schema.Schema { }, }, }, - "label_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "label_color": hexColorSchema(false), "label_content": stringEnumSchema[awstypes.DataLabelContent](false), "label_font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html "measure_label_visibility": stringEnumSchema[awstypes.Visibility](false), @@ -483,6 +483,10 @@ func dataLabelOptionsSchema() *schema.Schema { } } +func hexColorSchema(required bool) *schema.Schema { + return stringMatchSchema(required, `^#[0-9A-F]{6}$`, "") +} + func expandVisual(tfMap map[string]interface{}) *awstypes.Visual { if tfMap == nil { return nil diff --git a/internal/service/quicksight/schema/visual_chart_configuration.go b/internal/service/quicksight/schema/visual_chart_configuration.go index 13fcdc8290c4..2ca065d01f8c 100644 --- a/internal/service/quicksight/schema/visual_chart_configuration.go +++ b/internal/service/quicksight/schema/visual_chart_configuration.go @@ -338,7 +338,7 @@ func referenceLineSchema(maxItems int) *schema.Schema { }, }, }, - "font_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "font_color": hexColorSchema(false), "font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html "horizontal_position": stringEnumSchema[awstypes.ReferenceLineLabelHorizontalPosition](false), "value_label_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLineValueLabelConfiguration.html @@ -365,7 +365,7 @@ func referenceLineSchema(maxItems int) *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "color": hexColorSchema(false), "pattern": stringEnumSchema[awstypes.ReferenceLinePatternType](false), }, }, diff --git a/internal/service/quicksight/schema/visual_conditional_formatting.go b/internal/service/quicksight/schema/visual_conditional_formatting.go index 134146797e01..44100c324986 100644 --- a/internal/service/quicksight/schema/visual_conditional_formatting.go +++ b/internal/service/quicksight/schema/visual_conditional_formatting.go @@ -43,7 +43,7 @@ func conditionalFormattingColorSchema() *schema.Schema { Type: schema.TypeFloat, Required: true, }, - "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "color": hexColorSchema(false), "data_value": { Type: schema.TypeFloat, Optional: true, @@ -65,7 +65,7 @@ func conditionalFormattingColorSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "color": hexColorSchema(false), names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), }, }, @@ -90,7 +90,7 @@ func conditionalFormattingIconSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "color": hexColorSchema(false), names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), "icon_options": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ConditionalFormattingCustomIconOptions.html Type: schema.TypeList, diff --git a/internal/service/quicksight/schema/visual_funnel_chart.go b/internal/service/quicksight/schema/visual_funnel_chart.go index 011be050fc5b..224656358863 100644 --- a/internal/service/quicksight/schema/visual_funnel_chart.go +++ b/internal/service/quicksight/schema/visual_funnel_chart.go @@ -37,7 +37,7 @@ func funnelChartVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "category_label_visibility": stringEnumSchema[awstypes.Visibility](false), - "label_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "label_color": hexColorSchema(false), "label_font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html "measure_data_label_style": stringEnumSchema[awstypes.FunnelChartMeasureDataLabelStyle](false), "measure_label_visibility": stringEnumSchema[awstypes.Visibility](false), diff --git a/internal/service/quicksight/schema/visual_geospatial_map.go b/internal/service/quicksight/schema/visual_geospatial_map.go index 318d32715f08..34a12762a637 100644 --- a/internal/service/quicksight/schema/visual_geospatial_map.go +++ b/internal/service/quicksight/schema/visual_geospatial_map.go @@ -80,7 +80,7 @@ func geospatialMapVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "color": hexColorSchema(false), }, }, }, diff --git a/internal/service/quicksight/schema/visual_kpi.go b/internal/service/quicksight/schema/visual_kpi.go index 6b4a5fd90908..40016a4535fb 100644 --- a/internal/service/quicksight/schema/visual_kpi.go +++ b/internal/service/quicksight/schema/visual_kpi.go @@ -81,7 +81,7 @@ func kpiVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "color": hexColorSchema(false), "tooltip_visibility": stringEnumSchema[awstypes.Visibility](false), names.AttrType: stringEnumSchema[awstypes.KPISparklineType](true), "visibility": stringEnumSchema[awstypes.Visibility](false), diff --git a/internal/service/quicksight/schema/visual_line_chart.go b/internal/service/quicksight/schema/visual_line_chart.go index 05462cf9ac7c..fae41cde6185 100644 --- a/internal/service/quicksight/schema/visual_line_chart.go +++ b/internal/service/quicksight/schema/visual_line_chart.go @@ -315,7 +315,7 @@ func lineChartMarkerStyleSettingsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "marker_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "marker_color": hexColorSchema(false), "marker_shape": stringEnumSchema[awstypes.LineChartMarkerShape](false), "marker_size": { Type: schema.TypeString, diff --git a/internal/service/quicksight/schema/visual_pivot_table.go b/internal/service/quicksight/schema/visual_pivot_table.go index 40e9cff0220f..4f3db8bf5e10 100644 --- a/internal/service/quicksight/schema/visual_pivot_table.go +++ b/internal/service/quicksight/schema/visual_pivot_table.go @@ -256,7 +256,7 @@ func tableBorderOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "color": hexColorSchema(false), "style": stringEnumSchema[awstypes.TableBorderStyle](false), "thickness": intSchema(false, validation.IntBetween(1, 4)), }, @@ -272,7 +272,7 @@ func tableCellStyleSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "background_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "background_color": hexColorSchema(false), "border": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GlobalTableBorderOptions.html Type: schema.TypeList, Optional: true, diff --git a/internal/service/quicksight/schema/visual_radar_chart.go b/internal/service/quicksight/schema/visual_radar_chart.go index c40c16e2353b..829d5dbc3cb6 100644 --- a/internal/service/quicksight/schema/visual_radar_chart.go +++ b/internal/service/quicksight/schema/visual_radar_chart.go @@ -30,8 +30,8 @@ func radarChartVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "alternate_band_colors_visibility": stringEnumSchema[awstypes.Visibility](false), - "alternate_band_even_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), - "alternate_band_odd_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "alternate_band_even_color": hexColorSchema(false), + "alternate_band_odd_color": hexColorSchema(false), "base_series_settings": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RadarChartSeriesSettings.html Type: schema.TypeList, Optional: true, diff --git a/internal/service/quicksight/schema/visual_table.go b/internal/service/quicksight/schema/visual_table.go index a85dda847ec7..1b675fbad642 100644 --- a/internal/service/quicksight/schema/visual_table.go +++ b/internal/service/quicksight/schema/visual_table.go @@ -241,8 +241,8 @@ func tableVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "field_id": stringLenBetweenSchema(true, 1, 512), - "negative_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), - "positive_color": stringMatchSchema(false, `^#[0-9A-F]{6}$`, ""), + "negative_color": hexColorSchema(false), + "positive_color": hexColorSchema(false), }, }, }, From 53410987fe64cf90d07791f0180e02c428a5426f Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Thu, 3 Oct 2024 14:22:11 -0700 Subject: [PATCH 05/12] Updates string caching to allow OptionalComputed --- .ci/.golangci2.yml | 2 + .ci/semgrep/pluginsdk/quicksight/schema.yml | 63 ++++-- .../service/quicksight/schema/analysis.go | 26 +-- .../service/quicksight/schema/dashboard.go | 25 +-- .../service/quicksight/schema/data_set.go | 137 +++++-------- .../service/quicksight/schema/data_source.go | 2 +- internal/service/quicksight/schema/dataset.go | 6 +- .../service/quicksight/schema/permissions.go | 2 +- .../service/quicksight/schema/template.go | 182 ++++++++++-------- .../quicksight/schema/template_control.go | 40 ++-- .../quicksight/schema/template_filter.go | 62 +++--- .../quicksight/schema/template_format.go | 42 ++-- .../quicksight/schema/template_parameter.go | 34 ++-- .../quicksight/schema/template_sheet.go | 36 ++-- internal/service/quicksight/schema/theme.go | 50 ++--- internal/service/quicksight/schema/visual.go | 97 +++++----- .../quicksight/schema/visual_actions.go | 18 +- .../quicksight/schema/visual_bar_chart.go | 5 +- .../quicksight/schema/visual_box_plot.go | 6 +- .../schema/visual_chart_configuration.go | 56 +++--- .../quicksight/schema/visual_combo_chart.go | 2 +- .../schema/visual_conditional_formatting.go | 22 +-- .../schema/visual_custom_content.go | 8 +- .../service/quicksight/schema/visual_empty.go | 2 +- .../quicksight/schema/visual_fields.go | 28 +-- .../quicksight/schema/visual_filled_map.go | 2 +- .../quicksight/schema/visual_funnel_chart.go | 12 +- .../quicksight/schema/visual_gauge_chart.go | 4 +- .../schema/visual_geospatial_map.go | 4 +- .../quicksight/schema/visual_histogram.go | 2 +- .../quicksight/schema/visual_insight.go | 16 +- .../service/quicksight/schema/visual_kpi.go | 18 +- .../quicksight/schema/visual_line_chart.go | 35 ++-- .../service/quicksight/schema/visual_map.go | 4 +- .../quicksight/schema/visual_pie_chart.go | 4 +- .../quicksight/schema/visual_pivot_table.go | 60 +++--- .../quicksight/schema/visual_radar_chart.go | 10 +- .../service/quicksight/schema/visual_sort.go | 6 +- .../service/quicksight/schema/visual_table.go | 34 ++-- .../quicksight/schema/visual_word_cloud.go | 10 +- 40 files changed, 585 insertions(+), 589 deletions(-) diff --git a/.ci/.golangci2.yml b/.ci/.golangci2.yml index b392f719ee19..0e068b962891 100644 --- a/.ci/.golangci2.yml +++ b/.ci/.golangci2.yml @@ -78,6 +78,8 @@ linters-settings: - retry.RetryContext - schema.DefaultTimeout - validation.* + # QuickSight schema + - stringLenBetweenSchema # Terraform Plugin Framework - int32validator.* - int64validator.* diff --git a/.ci/semgrep/pluginsdk/quicksight/schema.yml b/.ci/semgrep/pluginsdk/quicksight/schema.yml index b357b9226771..8ab5316f8181 100644 --- a/.ci/semgrep/pluginsdk/quicksight/schema.yml +++ b/.ci/semgrep/pluginsdk/quicksight/schema.yml @@ -13,7 +13,7 @@ rules: Required: true, ValidateFunc: validation.StringLenBetween($MIN, $MAX), } - fix: stringLenBetweenSchema(true, $MIN, $MAX) + fix: stringLenBetweenSchema(attrRequired, $MIN, $MAX) severity: WARNING - id: quicksight-schema-string-len-between-optional @@ -30,7 +30,33 @@ rules: Optional: true, ValidateFunc: validation.StringLenBetween($MIN, $MAX), } - fix: stringLenBetweenSchema(false, $MIN, $MAX) + fix: stringLenBetweenSchema(attrOptional, $MIN, $MAX) + severity: WARNING + + - id: quicksight-schema-string-len-between-optionalcomputed + languages: [go] + message: String attributes with length validation should use stringLenBetweenSchema + paths: + include: + - internal/service/quicksight/schema + patterns: + - pattern-inside: "Schema: map[string]*schema.Schema{ ... }" + - pattern-either: + - pattern: | + { + Type: schema.TypeString, + Optional: true, + Computed: true, + ValidateFunc: validation.StringLenBetween($MIN, $MAX), + } + - pattern: | + { + Type: schema.TypeString, + Computed: true, + Optional: true, + ValidateFunc: validation.StringLenBetween($MIN, $MAX), + } + fix: stringLenBetweenSchema(attrOptionalComputed, $MIN, $MAX) severity: WARNING - id: quicksight-schema-string-enum @@ -41,17 +67,32 @@ rules: - internal/service/quicksight/schema patterns: - pattern-inside: "Schema: map[string]*schema.Schema{ ... }" - - pattern: | - { - Type: schema.TypeString, - $REQOPT: true, - ValidateDiagFunc: $FUNC(), - } - - metavariable-regex: - metavariable: $FUNC - regex: enum\.Validate # Semgrep doesn't seem to recognize the type specification + - pattern-either: + - pattern: | + { + Type: schema.TypeString, + $REQOPT: true, + ValidateDiagFunc: $FUNC(), + } + - pattern: | + { + Type: schema.TypeString, + Computed: true, + $REQOPT: true, + ValidateDiagFunc: $FUNC(), + } + - pattern: | + { + Type: schema.TypeString, + $REQOPT: true, + Computed: true, + ValidateDiagFunc: $FUNC(), + } - metavariable-regex: metavariable: $REQOPT regex: 'Required|Optional' + - metavariable-regex: + metavariable: $FUNC + regex: enum\.Validate # Semgrep doesn't seem to recognize the type specification # Cannot be auto-fixed severity: WARNING diff --git a/internal/service/quicksight/schema/analysis.go b/internal/service/quicksight/schema/analysis.go index 6ce3ba232b38..c7fb98452756 100644 --- a/internal/service/quicksight/schema/analysis.go +++ b/internal/service/quicksight/schema/analysis.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/sdkv2" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -36,7 +35,7 @@ func AnalysisDefinitionSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "format_configuration": formatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FormatConfiguration.html - names.AttrRole: stringEnumSchema[awstypes.ColumnRole](false), + names.AttrRole: stringEnumSchema[awstypes.ColumnRole](attrOptional), }, }, }, @@ -47,11 +46,11 @@ func AnalysisDefinitionSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "cross_dataset": stringEnumSchema[awstypes.CrossDatasetTypes](true), + "cross_dataset": stringEnumSchema[awstypes.CrossDatasetTypes](attrRequired), "filter_group_id": idSchema(), "filters": filtersSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Filter.html "scope_configuration": filterScopeConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterScopeConfiguration.html - names.AttrStatus: stringEnumSchema[awstypes.Status](false), + names.AttrStatus: stringEnumSchema[awstypes.Status](attrOptional), }, }, }, @@ -76,17 +75,12 @@ func AnalysisDefinitionSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "sheet_id": idSchema(), - names.AttrContentType: { - Type: schema.TypeString, - Optional: true, - Computed: true, - ValidateDiagFunc: enum.Validate[awstypes.SheetContentType](), - }, - names.AttrDescription: stringLenBetweenSchema(false, 1, 1024), + "sheet_id": idSchema(), + names.AttrContentType: stringEnumSchema[awstypes.SheetContentType](attrOptionalComputed), + names.AttrDescription: stringLenBetweenSchema(attrOptional, 1, 1024), "filter_controls": filterControlsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterControl.html "layouts": layoutSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Layout.html - names.AttrName: stringLenBetweenSchema(false, 1, 2048), + names.AttrName: stringLenBetweenSchema(attrOptional, 1, 2048), "parameter_controls": parameterControlsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ParameterControl.html "sheet_control_layouts": sheetControlLayoutsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SheetControlLayout.html "text_boxes": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SheetTextBox.html @@ -97,11 +91,11 @@ func AnalysisDefinitionSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "sheet_text_box_id": idSchema(), - names.AttrContent: stringLenBetweenSchema(false, 1, 150000), + names.AttrContent: stringLenBetweenSchema(attrOptional, 1, 150000), }, }, }, - "title": stringLenBetweenSchema(false, 1, 1024), + "title": stringLenBetweenSchema(attrOptional, 1, 1024), "visuals": visualsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Visual.html }, }, @@ -132,7 +126,7 @@ func AnalysisSourceEntitySchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrARN: arnStringRequiredSchema(), + names.AttrARN: arnStringSchema(attrRequired), "data_set_references": dataSetReferencesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataSetReference.html }, }, diff --git a/internal/service/quicksight/schema/dashboard.go b/internal/service/quicksight/schema/dashboard.go index bbbae1bb481c..17fe14789323 100644 --- a/internal/service/quicksight/schema/dashboard.go +++ b/internal/service/quicksight/schema/dashboard.go @@ -35,7 +35,7 @@ func DashboardDefinitionSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "format_configuration": formatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FormatConfiguration.html - names.AttrRole: stringEnumSchema[awstypes.ColumnRole](false), + names.AttrRole: stringEnumSchema[awstypes.ColumnRole](attrOptional), }, }, }, @@ -46,11 +46,11 @@ func DashboardDefinitionSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "cross_dataset": stringEnumSchema[awstypes.CrossDatasetTypes](true), + "cross_dataset": stringEnumSchema[awstypes.CrossDatasetTypes](attrRequired), "filter_group_id": idSchema(), "filters": filtersSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Filter.html "scope_configuration": filterScopeConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterScopeConfiguration.html - names.AttrStatus: stringEnumSchema[awstypes.Status](false), + names.AttrStatus: stringEnumSchema[awstypes.Status](attrOptional), }, }, }, @@ -75,17 +75,12 @@ func DashboardDefinitionSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "sheet_id": idSchema(), - names.AttrContentType: { - Type: schema.TypeString, - Optional: true, - Computed: true, - ValidateDiagFunc: enum.Validate[awstypes.SheetContentType](), - }, - names.AttrDescription: stringLenBetweenSchema(false, 1, 1024), + "sheet_id": idSchema(), + names.AttrContentType: stringEnumSchema[awstypes.SheetContentType](attrOptionalComputed), + names.AttrDescription: stringLenBetweenSchema(attrOptional, 1, 1024), "filter_controls": filterControlsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterControl.html "layouts": layoutSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Layout.html - names.AttrName: stringLenBetweenSchema(false, 1, 2048), + names.AttrName: stringLenBetweenSchema(attrOptional, 1, 2048), "parameter_controls": parameterControlsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ParameterControl.html "sheet_control_layouts": sheetControlLayoutsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SheetControlLayout.html "text_boxes": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SheetTextBox.html @@ -96,11 +91,11 @@ func DashboardDefinitionSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "sheet_text_box_id": idSchema(), - names.AttrContent: stringLenBetweenSchema(false, 1, 150000), + names.AttrContent: stringLenBetweenSchema(attrOptional, 1, 150000), }, }, }, - "title": stringLenBetweenSchema(false, 1, 1024), + "title": stringLenBetweenSchema(attrOptional, 1, 1024), "visuals": visualsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Visual.html }, }, @@ -282,7 +277,7 @@ func DashboardSourceEntitySchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrARN: arnStringRequiredSchema(), + names.AttrARN: arnStringSchema(attrRequired), "data_set_references": dataSetReferencesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataSetReference.html }, }, diff --git a/internal/service/quicksight/schema/data_set.go b/internal/service/quicksight/schema/data_set.go index 188aee4d702c..b89922ba0db6 100644 --- a/internal/service/quicksight/schema/data_set.go +++ b/internal/service/quicksight/schema/data_set.go @@ -8,7 +8,6 @@ import ( awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/internal/sdkv2" "github.com/hashicorp/terraform-provider-aws/names" @@ -38,8 +37,8 @@ func DataSetColumnGroupsSchema() *schema.Schema { ValidateFunc: validation.StringLenBetween(1, 128), }, }, - "country_code": stringEnumSchema[awstypes.GeoSpatialCountryCode](true), - names.AttrName: stringLenBetweenSchema(true, 1, 64), + "country_code": stringEnumSchema[awstypes.GeoSpatialCountryCode](attrRequired), + names.AttrName: stringLenBetweenSchema(attrRequired, 1, 64), }, }, }, @@ -125,7 +124,7 @@ func DataSetFieldFoldersSchema() *schema.Schema { MaxItems: 5000, Elem: &schema.Schema{Type: schema.TypeString}, }, - names.AttrDescription: stringLenBetweenSchema(false, 0, 500), + names.AttrDescription: stringLenBetweenSchema(attrOptional, 0, 500), }, }, } @@ -139,7 +138,7 @@ func DataSetLogicalTableMapSchema() *schema.Schema { logicalTableMapSchema := func() *schema.Resource { return &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrAlias: stringLenBetweenSchema(true, 1, 64), + names.AttrAlias: stringLenBetweenSchema(attrRequired, 1, 64), "data_transforms": { Type: schema.TypeList, Computed: true, @@ -155,14 +154,9 @@ func DataSetLogicalTableMapSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "column_name": stringLenBetweenSchema(true, 1, 128), - names.AttrFormat: { - Type: schema.TypeString, - Computed: true, - Optional: true, - ValidateFunc: validation.StringLenBetween(0, 32), - }, - "new_column_type": stringEnumSchema[awstypes.ColumnDataType](true), + "column_name": stringLenBetweenSchema(attrRequired, 1, 128), + names.AttrFormat: stringLenBetweenSchema(attrOptionalComputed, 0, 32), + "new_column_type": stringEnumSchema[awstypes.ColumnDataType](attrRequired), }, }, }, @@ -180,9 +174,9 @@ func DataSetLogicalTableMapSchema() *schema.Schema { MaxItems: 128, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "column_id": stringLenBetweenSchema(true, 1, 64), - "column_name": stringLenBetweenSchema(true, 1, 128), - names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), + "column_id": stringLenBetweenSchema(attrRequired, 1, 64), + "column_name": stringLenBetweenSchema(attrRequired, 1, 128), + names.AttrExpression: stringLenBetweenSchema(attrRequired, 1, 4096), }, }, }, @@ -196,7 +190,7 @@ func DataSetLogicalTableMapSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "condition_expression": stringLenBetweenSchema(true, 1, 4096), + "condition_expression": stringLenBetweenSchema(attrRequired, 1, 4096), }, }, }, @@ -224,8 +218,8 @@ func DataSetLogicalTableMapSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "column_name": stringLenBetweenSchema(true, 1, 128), - "new_column_name": stringLenBetweenSchema(true, 1, 128), + "column_name": stringLenBetweenSchema(attrRequired, 1, 128), + "new_column_name": stringLenBetweenSchema(attrRequired, 1, 128), }, }, }, @@ -236,7 +230,7 @@ func DataSetLogicalTableMapSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "column_name": stringLenBetweenSchema(true, 1, 128), + "column_name": stringLenBetweenSchema(attrRequired, 1, 128), names.AttrTags: { Type: schema.TypeList, Required: true, @@ -251,21 +245,11 @@ func DataSetLogicalTableMapSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "text": { - Type: schema.TypeString, - Computed: true, - Optional: true, - ValidateFunc: validation.StringLenBetween(0, 500), - }, + "text": stringLenBetweenSchema(attrOptionalComputed, 0, 500), }, }, }, - "column_geographic_role": { - Type: schema.TypeString, - Computed: true, - Optional: true, - ValidateDiagFunc: enum.Validate[awstypes.GeoSpatialDataRole](), - }, + "column_geographic_role": stringEnumSchema[awstypes.GeoSpatialDataRole](attrOptionalComputed), }, }, }, @@ -279,14 +263,11 @@ func DataSetLogicalTableMapSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "column_name": stringLenBetweenSchema(true, 1, 128), + "column_name": stringLenBetweenSchema(attrRequired, 1, 128), "tag_names": { Type: schema.TypeList, Required: true, - Elem: &schema.Schema{ - Type: schema.TypeString, - ValidateDiagFunc: enum.Validate[awstypes.ColumnTagName](), - }, + Elem: stringEnumSchema[awstypes.ColumnTagName](attrElem), }, }, }, @@ -331,8 +312,8 @@ func DataSetLogicalTableMapSchema() *schema.Schema { }, }, }, - "left_operand": stringLenBetweenSchema(true, 1, 64), - "on_clause": stringLenBetweenSchema(true, 1, 512), + "left_operand": stringLenBetweenSchema(attrRequired, 1, 64), + "on_clause": stringLenBetweenSchema(attrRequired, 1, 512), "right_join_key_properties": { Type: schema.TypeList, Computed: true, @@ -348,17 +329,12 @@ func DataSetLogicalTableMapSchema() *schema.Schema { }, }, }, - "right_operand": stringLenBetweenSchema(true, 1, 64), - names.AttrType: stringEnumSchema[awstypes.JoinType](true), + "right_operand": stringLenBetweenSchema(attrRequired, 1, 64), + names.AttrType: stringEnumSchema[awstypes.JoinType](attrRequired), }, }, }, - "physical_table_id": { - Type: schema.TypeString, - Computed: true, - Optional: true, - ValidateFunc: validation.StringLenBetween(1, 64), - }, + "physical_table_id": stringLenBetweenSchema(attrOptionalComputed, 1, 64), }, }, }, @@ -419,14 +395,14 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { MaxItems: 2048, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrName: stringLenBetweenSchema(true, 1, 128), - names.AttrType: stringEnumSchema[awstypes.InputColumnDataType](true), + names.AttrName: stringLenBetweenSchema(attrRequired, 1, 128), + names.AttrType: stringEnumSchema[awstypes.InputColumnDataType](attrRequired), }, }, }, - "data_source_arn": arnStringRequiredSchema(), - names.AttrName: stringLenBetweenSchema(true, 1, 64), - "sql_query": stringLenBetweenSchema(true, 1, 65536), + "data_source_arn": arnStringSchema(attrRequired), + names.AttrName: stringLenBetweenSchema(attrRequired, 1, 64), + "sql_query": stringLenBetweenSchema(attrRequired, 1, 65536), }, }, }, @@ -440,8 +416,8 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "catalog": stringLenBetweenSchema(false, 0, 256), - "data_source_arn": arnStringRequiredSchema(), + "catalog": stringLenBetweenSchema(attrOptional, 0, 256), + "data_source_arn": arnStringSchema(attrRequired), "input_columns": { Type: schema.TypeList, Required: true, @@ -449,12 +425,12 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { MaxItems: 2048, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrName: stringLenBetweenSchema(true, 1, 128), - names.AttrType: stringEnumSchema[awstypes.InputColumnDataType](true), + names.AttrName: stringLenBetweenSchema(attrRequired, 1, 128), + names.AttrType: stringEnumSchema[awstypes.InputColumnDataType](attrRequired), }, }, }, - names.AttrName: stringLenBetweenSchema(true, 1, 64), + names.AttrName: stringLenBetweenSchema(attrRequired, 1, 64), names.AttrSchema: { Type: schema.TypeString, Optional: true, @@ -469,7 +445,7 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_source_arn": arnStringRequiredSchema(), + "data_source_arn": arnStringSchema(attrRequired), "input_columns": { Type: schema.TypeList, Required: true, @@ -477,8 +453,8 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { MaxItems: 2048, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrName: stringLenBetweenSchema(true, 1, 128), - names.AttrType: stringEnumSchema[awstypes.InputColumnDataType](true), + names.AttrName: stringLenBetweenSchema(attrRequired, 1, 128), + names.AttrType: stringEnumSchema[awstypes.InputColumnDataType](attrRequired), }, }, }, @@ -493,30 +469,15 @@ func DataSetPhysicalTableMapSchema() *schema.Schema { Computed: true, Optional: true, }, - "delimiter": { - Type: schema.TypeString, - Computed: true, - Optional: true, - ValidateFunc: validation.StringLenBetween(1, 1), - }, - names.AttrFormat: { - Type: schema.TypeString, - Computed: true, - Optional: true, - ValidateDiagFunc: enum.Validate[awstypes.FileFormat](), - }, + "delimiter": stringLenBetweenSchema(attrOptionalComputed, 1, 1), + names.AttrFormat: stringEnumSchema[awstypes.FileFormat](attrOptionalComputed), "start_from_row": { Type: schema.TypeInt, Computed: true, Optional: true, ValidateFunc: validation.IntAtLeast(1), }, - "text_qualifier": { - Type: schema.TypeString, - Computed: true, - Optional: true, - ValidateDiagFunc: enum.Validate[awstypes.TextQualifier](), - }, + "text_qualifier": stringEnumSchema[awstypes.TextQualifier](attrOptionalComputed), }, }, }, @@ -546,11 +507,11 @@ func DataSetRowLevelPermissionDataSetSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrARN: arnStringRequiredSchema(), - "format_version": stringEnumSchema[awstypes.RowLevelPermissionFormatVersion](false), - names.AttrNamespace: stringLenBetweenSchema(false, 0, 64), - "permission_policy": stringEnumSchema[awstypes.RowLevelPermissionPolicy](true), - names.AttrStatus: stringEnumSchema[awstypes.Status](false), + names.AttrARN: arnStringSchema(attrRequired), + "format_version": stringEnumSchema[awstypes.RowLevelPermissionFormatVersion](attrOptional), + names.AttrNamespace: stringLenBetweenSchema(attrOptional, 0, 64), + "permission_policy": stringEnumSchema[awstypes.RowLevelPermissionPolicy](attrRequired), + names.AttrStatus: stringEnumSchema[awstypes.Status](attrOptional), }, }, } @@ -567,7 +528,7 @@ func DataSetRowLevelPermissionTagConfigurationSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrStatus: stringEnumSchema[awstypes.Status](false), + names.AttrStatus: stringEnumSchema[awstypes.Status](attrOptional), "tag_rules": { Type: schema.TypeList, Required: true, @@ -580,9 +541,9 @@ func DataSetRowLevelPermissionTagConfigurationSchema() *schema.Schema { Required: true, ValidateFunc: validation.NoZeroValues, }, - "match_all_value": stringLenBetweenSchema(false, 1, 256), - "tag_key": stringLenBetweenSchema(true, 1, 128), - "tag_multi_value_delimiter": stringLenBetweenSchema(false, 1, 10), + "match_all_value": stringLenBetweenSchema(attrOptional, 1, 256), + "tag_key": stringLenBetweenSchema(attrRequired, 1, 128), + "tag_multi_value_delimiter": stringLenBetweenSchema(attrOptional, 1, 10), }, }, }, @@ -628,7 +589,7 @@ func DataSetRefreshPropertiesSchema() *schema.Schema { Type: schema.TypeInt, Required: true, }, - "size_unit": stringEnumSchema[awstypes.LookbackWindowSizeUnit](true), + "size_unit": stringEnumSchema[awstypes.LookbackWindowSizeUnit](attrRequired), }, }, }, diff --git a/internal/service/quicksight/schema/data_source.go b/internal/service/quicksight/schema/data_source.go index faeef6e1e5fe..e49bdf398495 100644 --- a/internal/service/quicksight/schema/data_source.go +++ b/internal/service/quicksight/schema/data_source.go @@ -591,7 +591,7 @@ func VPCConnectionPropertiesSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "vpc_connection_arn": arnStringRequiredSchema(), + "vpc_connection_arn": arnStringSchema(attrRequired), }, }, } diff --git a/internal/service/quicksight/schema/dataset.go b/internal/service/quicksight/schema/dataset.go index f9f6ab25792c..adb1b0ad78c9 100644 --- a/internal/service/quicksight/schema/dataset.go +++ b/internal/service/quicksight/schema/dataset.go @@ -20,8 +20,8 @@ var dataSetIdentifierDeclarationsSchema = sync.OnceValue(func() *schema.Schema { Required: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_set_arn": arnStringOptionalSchema(), - names.AttrIdentifier: stringLenBetweenSchema(false, 1, 2048), + "data_set_arn": arnStringSchema(attrOptional), + names.AttrIdentifier: stringLenBetweenSchema(attrOptional, 1, 2048), }, }, } @@ -34,7 +34,7 @@ var dataSetReferencesSchema = sync.OnceValue(func() *schema.Schema { MinItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_set_arn": arnStringRequiredSchema(), + "data_set_arn": arnStringSchema(attrRequired), "data_set_placeholder": { Type: schema.TypeString, Required: true, diff --git a/internal/service/quicksight/schema/permissions.go b/internal/service/quicksight/schema/permissions.go index 36c06720b1d3..feea4ddc1167 100644 --- a/internal/service/quicksight/schema/permissions.go +++ b/internal/service/quicksight/schema/permissions.go @@ -26,7 +26,7 @@ func PermissionsSchema() *schema.Schema { MaxItems: 20, Elem: &schema.Schema{Type: schema.TypeString}, }, - names.AttrPrincipal: stringLenBetweenSchema(true, 1, 256), + names.AttrPrincipal: stringLenBetweenSchema(attrRequired, 1, 256), }, }, } diff --git a/internal/service/quicksight/schema/template.go b/internal/service/quicksight/schema/template.go index b5f7d7a12b62..ea33dcbfd3df 100644 --- a/internal/service/quicksight/schema/template.go +++ b/internal/service/quicksight/schema/template.go @@ -42,7 +42,7 @@ func TemplateDefinitionSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "format_configuration": formatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FormatConfiguration.html - names.AttrRole: stringEnumSchema[awstypes.ColumnRole](false), + names.AttrRole: stringEnumSchema[awstypes.ColumnRole](attrOptional), }, }, }, @@ -53,11 +53,11 @@ func TemplateDefinitionSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "cross_dataset": stringEnumSchema[awstypes.CrossDatasetTypes](true), + "cross_dataset": stringEnumSchema[awstypes.CrossDatasetTypes](attrRequired), "filter_group_id": idSchema(), "filters": filtersSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Filter.html "scope_configuration": filterScopeConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterScopeConfiguration.html - names.AttrStatus: stringEnumSchema[awstypes.Status](false), + names.AttrStatus: stringEnumSchema[awstypes.Status](attrOptional), }, }, }, @@ -82,17 +82,12 @@ func TemplateDefinitionSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "sheet_id": idSchema(), - names.AttrContentType: { - Type: schema.TypeString, - Optional: true, - Computed: true, - ValidateDiagFunc: enum.Validate[awstypes.SheetContentType](), - }, - names.AttrDescription: stringLenBetweenSchema(false, 1, 1024), + "sheet_id": idSchema(), + names.AttrContentType: stringEnumSchema[awstypes.SheetContentType](attrOptionalComputed), + names.AttrDescription: stringLenBetweenSchema(attrOptional, 1, 1024), "filter_controls": filterControlsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterControl.html "layouts": layoutSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Layout.html - names.AttrName: stringLenBetweenSchema(false, 1, 2048), + names.AttrName: stringLenBetweenSchema(attrOptional, 1, 2048), "parameter_controls": parameterControlsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ParameterControl.html "sheet_control_layouts": sheetControlLayoutsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SheetControlLayout.html "text_boxes": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SheetTextBox.html @@ -103,11 +98,11 @@ func TemplateDefinitionSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "sheet_text_box_id": idSchema(), - names.AttrContent: stringLenBetweenSchema(false, 1, 150000), + names.AttrContent: stringLenBetweenSchema(attrOptional, 1, 150000), }, }, }, - "title": stringLenBetweenSchema(false, 1, 1024), + "title": stringLenBetweenSchema(attrOptional, 1, 1024), "visuals": visualsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Visual.html }, }, @@ -117,66 +112,84 @@ func TemplateDefinitionSchema() *schema.Schema { } } -func stringOptionalComputedSchema(validateFunc any) *schema.Schema { - switch v := validateFunc.(type) { - case schema.SchemaValidateDiagFunc: - return &schema.Schema{ - Type: schema.TypeString, - Optional: true, - Computed: true, - ValidateDiagFunc: v, - } - case schema.SchemaValidateFunc: - return stringOptionalComputedSchema(validation.ToDiagFunc(v)) - default: - panic(fmt.Sprintf("unsupported validateFunc type: %T", v)) //lintignore:R009 - } +type attrHandling int + +const ( + attrElem attrHandling = 0 + attrRequired attrHandling = 1 << iota + attrOptional + attrComputed + attrOptionalComputed = attrOptional | attrComputed +) + +func (x attrHandling) isRequired() bool { + return x&attrRequired != 0 } -func stringSchema(required bool, validateFunc any) *schema.Schema { - switch v := validateFunc.(type) { - case schema.SchemaValidateDiagFunc: - return &schema.Schema{ - Type: schema.TypeString, - Required: required, - Optional: !required, - ValidateDiagFunc: v, - } - case schema.SchemaValidateFunc: - return stringSchema(required, validation.ToDiagFunc(v)) - case func(interface{}, string) ([]string, []error): - return stringSchema(required, schema.SchemaValidateFunc(v)) - default: - panic(fmt.Sprintf("unsupported validateFunc type: %T", v)) //lintignore:R009 - } +func (x attrHandling) isOptional() bool { + return x&attrOptional != 0 } -var arnStringOptionalSchema = sync.OnceValue(func() *schema.Schema { - return &schema.Schema{ - Type: schema.TypeString, - Optional: true, - ValidateFunc: verify.ValidARN, +func (x attrHandling) isComputed() bool { + return x&attrComputed != 0 +} + +var arnStringSchemaCache syncMap[attrHandling, *schema.Schema] + +func arnStringSchema(handling attrHandling) *schema.Schema { + s, ok := arnStringSchemaCache.Load(handling) + if ok { + return s } -}) -var arnStringRequiredSchema = sync.OnceValue(func() *schema.Schema { - return &schema.Schema{ - Type: schema.TypeString, - Required: true, - ValidateFunc: verify.ValidARN, + // Use a separate `LoadOrStore` to avoid allocation if item is already in the cache + // Use `LoadOrStore` instead of `Store` in case there is a race + s, _ = arnStringSchemaCache.LoadOrStore( + handling, + &schema.Schema{ + Type: schema.TypeString, + Required: handling.isRequired(), + Optional: handling.isOptional(), + Computed: handling.isComputed(), + ValidateFunc: verify.ValidARN, + }, + ) + return s +} + +var utcTimestampStringSchemaCache syncMap[attrHandling, *schema.Schema] + +func utcTimestampStringSchema(handling attrHandling) *schema.Schema { + s, ok := utcTimestampStringSchemaCache.Load(handling) + if ok { + return s } -}) + + // Use a separate `LoadOrStore` to avoid allocation if item is already in the cache + // Use `LoadOrStore` instead of `Store` in case there is a race + s, _ = utcTimestampStringSchemaCache.LoadOrStore( + handling, + &schema.Schema{ + Type: schema.TypeString, + Required: handling.isRequired(), + Optional: handling.isOptional(), + Computed: handling.isComputed(), + ValidateFunc: verify.ValidUTCTimestamp, + }, + ) + return s +} type stringLenBetweenIdentity struct { - required bool + handling attrHandling min, max int } var stringLenBetweenSchemaCache syncMap[stringLenBetweenIdentity, *schema.Schema] -func stringLenBetweenSchema(required bool, min, max int) *schema.Schema { +func stringLenBetweenSchema(handling attrHandling, min, max int) *schema.Schema { id := stringLenBetweenIdentity{ - required: required, + handling: handling, min: min, max: max, } @@ -192,8 +205,9 @@ func stringLenBetweenSchema(required bool, min, max int) *schema.Schema { id, &schema.Schema{ Type: schema.TypeString, - Required: required, - Optional: !required, + Required: handling.isRequired(), + Optional: handling.isOptional(), + Computed: handling.isComputed(), ValidateFunc: validation.StringLenBetween(min, max), }, ) @@ -201,15 +215,15 @@ func stringLenBetweenSchema(required bool, min, max int) *schema.Schema { } type stringMatchIdentity struct { - required bool + handling attrHandling re, message string } var stringMatchSchemaCache syncMap[stringMatchIdentity, *schema.Schema] -func stringMatchSchema(required bool, re, message string) *schema.Schema { +func stringMatchSchema(handling attrHandling, re, message string) *schema.Schema { id := stringMatchIdentity{ - required: required, + handling: handling, re: re, message: message, } @@ -225,8 +239,9 @@ func stringMatchSchema(required bool, re, message string) *schema.Schema { id, &schema.Schema{ Type: schema.TypeString, - Required: required, - Optional: !required, + Required: handling.isRequired(), + Optional: handling.isOptional(), + Computed: handling.isComputed(), ValidateFunc: validation.StringMatch(regexache.MustCompile(re), message), }, ) @@ -234,15 +249,15 @@ func stringMatchSchema(required bool, re, message string) *schema.Schema { } type stringEnumIdentity struct { - required bool + handling attrHandling typ reflect.Type } var stringEnumSchemaCache syncMap[stringEnumIdentity, *schema.Schema] -func stringEnumSchema[T enum.Valueser[T]](required bool) *schema.Schema { +func stringEnumSchema[T enum.Valueser[T]](handling attrHandling) *schema.Schema { id := stringEnumIdentity{ - required: required, + handling: handling, typ: reflect.TypeFor[T](), } @@ -257,8 +272,9 @@ func stringEnumSchema[T enum.Valueser[T]](required bool) *schema.Schema { id, &schema.Schema{ Type: schema.TypeString, - Required: required, - Optional: !required, + Required: handling.isRequired(), + Optional: handling.isOptional(), + Computed: handling.isComputed(), ValidateDiagFunc: enum.Validate[T](), }, ) @@ -329,8 +345,8 @@ func aggregationFunctionSchema(required bool) *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "categorical_aggregation_function": stringEnumSchema[awstypes.CategoricalAggregationFunction](false), - "date_aggregation_function": stringEnumSchema[awstypes.DateAggregationFunction](false), + "categorical_aggregation_function": stringEnumSchema[awstypes.CategoricalAggregationFunction](attrOptional), + "date_aggregation_function": stringEnumSchema[awstypes.DateAggregationFunction](attrOptional), "numerical_aggregation_function": numericalAggregationFunctionSchema(false), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericalAggregationFunction.html }, }, @@ -345,9 +361,9 @@ func calculatedFieldsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), - names.AttrExpression: stringLenBetweenSchema(true, 1, 32000), - names.AttrName: stringLenBetweenSchema(true, 1, 128), + "data_set_identifier": stringLenBetweenSchema(attrRequired, 1, 2048), + names.AttrExpression: stringLenBetweenSchema(attrRequired, 1, 32000), + names.AttrName: stringLenBetweenSchema(attrRequired, 1, 128), }, }, } @@ -377,7 +393,7 @@ func numericalAggregationFunctionSchema(required bool) *schema.Schema { }, }, }, - "simple_numerical_aggregation": stringEnumSchema[awstypes.SimpleNumericalAggregationFunction](false), + "simple_numerical_aggregation": stringEnumSchema[awstypes.SimpleNumericalAggregationFunction](attrOptional), }, }, } @@ -403,8 +419,8 @@ func columnSchema(required bool) *schema.Schema { Optional: !required, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "column_name": stringLenBetweenSchema(true, 1, 128), - "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), + "column_name": stringLenBetweenSchema(attrRequired, 1, 128), + "data_set_identifier": stringLenBetweenSchema(attrRequired, 1, 2048), }, }, } @@ -494,8 +510,8 @@ func rollingDateConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_set_identifier": stringLenBetweenSchema(false, 1, 2048), - names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), + "data_set_identifier": stringLenBetweenSchema(attrOptional, 1, 2048), + names.AttrExpression: stringLenBetweenSchema(attrRequired, 1, 4096), }, }, } @@ -519,7 +535,7 @@ func TemplateSourceEntitySchema() *schema.Schema { ExactlyOneOf: []string{"source_entity.0.source_analysis", "source_entity.0.source_template"}, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrARN: arnStringRequiredSchema(), + names.AttrARN: arnStringSchema(attrRequired), "data_set_references": dataSetReferencesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataSetReference.html }, }, @@ -531,7 +547,7 @@ func TemplateSourceEntitySchema() *schema.Schema { ExactlyOneOf: []string{"source_entity.0.source_analysis", "source_entity.0.source_template"}, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrARN: arnStringRequiredSchema(), + names.AttrARN: arnStringSchema(attrRequired), }, }, }, diff --git a/internal/service/quicksight/schema/template_control.go b/internal/service/quicksight/schema/template_control.go index 36e665c62745..99b1fecbd962 100644 --- a/internal/service/quicksight/schema/template_control.go +++ b/internal/service/quicksight/schema/template_control.go @@ -4,6 +4,8 @@ package schema import ( + "sync" + "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -11,7 +13,7 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -func filterControlsSchema() *schema.Schema { +var filterControlsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterControl.html Type: schema.TypeList, Optional: true, @@ -28,9 +30,9 @@ func filterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "filter_control_id": idSchema(), "source_filter_id": idSchema(), - "title": stringLenBetweenSchema(true, 1, 2048), + "title": stringLenBetweenSchema(attrRequired, 1, 2048), "display_options": dateTimePickerControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimePickerControlDisplayOptions.html - names.AttrType: stringEnumSchema[awstypes.SheetControlDateTimePickerType](false), + names.AttrType: stringEnumSchema[awstypes.SheetControlDateTimePickerType](attrOptional), }, }, }, @@ -43,11 +45,11 @@ func filterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "filter_control_id": idSchema(), "source_filter_id": idSchema(), - "title": stringLenBetweenSchema(true, 1, 2048), + "title": stringLenBetweenSchema(attrRequired, 1, 2048), "cascading_control_configuration": cascadingControlConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CascadingControlConfiguration.html "display_options": dropDownControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DropDownControlDisplayOptions.html "selectable_values": filterSelectableValuesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterSelectableValues.html - names.AttrType: stringEnumSchema[awstypes.SheetControlListType](false), + names.AttrType: stringEnumSchema[awstypes.SheetControlListType](attrOptional), }, }, }, @@ -60,11 +62,11 @@ func filterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "filter_control_id": idSchema(), "source_filter_id": idSchema(), - "title": stringLenBetweenSchema(true, 1, 2048), + "title": stringLenBetweenSchema(attrRequired, 1, 2048), "cascading_control_configuration": cascadingControlConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CascadingControlConfiguration.html "display_options": listControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ListControlDisplayOptions.html "selectable_values": filterSelectableValuesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterSelectableValues.html - names.AttrType: stringEnumSchema[awstypes.SheetControlListType](false), + names.AttrType: stringEnumSchema[awstypes.SheetControlListType](attrOptional), }, }, }, @@ -77,7 +79,7 @@ func filterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "filter_control_id": idSchema(), "source_filter_id": idSchema(), - "title": stringLenBetweenSchema(true, 1, 2048), + "title": stringLenBetweenSchema(attrRequired, 1, 2048), "display_options": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RelativeDateTimeControlDisplayOptions.html Type: schema.TypeList, Optional: true, @@ -85,7 +87,7 @@ func filterControlsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "date_time_format": stringLenBetweenSchema(false, 1, 128), + "date_time_format": stringLenBetweenSchema(attrOptional, 1, 128), "title_options": labelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LabelOptions.html }, }, @@ -102,7 +104,7 @@ func filterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "filter_control_id": idSchema(), "source_filter_id": idSchema(), - "title": stringLenBetweenSchema(true, 1, 2048), + "title": stringLenBetweenSchema(attrRequired, 1, 2048), "maximum_value": { Type: schema.TypeFloat, Required: true, @@ -116,7 +118,7 @@ func filterControlsSchema() *schema.Schema { Required: true, }, "display_options": sliderControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SliderControlDisplayOptions.html - names.AttrType: stringEnumSchema[awstypes.SheetControlSliderType](false), + names.AttrType: stringEnumSchema[awstypes.SheetControlSliderType](attrOptional), }, }, }, @@ -129,8 +131,8 @@ func filterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "filter_control_id": idSchema(), "source_filter_id": idSchema(), - "title": stringLenBetweenSchema(true, 1, 2048), - "delimiter": stringLenBetweenSchema(false, 1, 2048), + "title": stringLenBetweenSchema(attrRequired, 1, 2048), + "delimiter": stringLenBetweenSchema(attrOptional, 1, 2048), "display_options": textAreaControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TextAreaControlDisplayOptions.html }, }, @@ -144,7 +146,7 @@ func filterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "filter_control_id": idSchema(), "source_filter_id": idSchema(), - "title": stringLenBetweenSchema(true, 1, 2048), + "title": stringLenBetweenSchema(attrRequired, 1, 2048), "display_options": textFieldControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TextFieldControlDisplayOptions.html }, }, @@ -152,7 +154,7 @@ func filterControlsSchema() *schema.Schema { }, }, } -} +}) func textFieldControlDisplayOptionsSchema() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TextFieldControlDisplayOptions.html @@ -206,7 +208,7 @@ func dateTimePickerControlDisplayOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "date_time_format": stringLenBetweenSchema(false, 1, 128), + "date_time_format": stringLenBetweenSchema(attrOptional, 1, 128), "title_options": labelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LabelOptions.html }, }, @@ -228,7 +230,7 @@ func listControlDisplayOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -275,7 +277,7 @@ func selectAllOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, } @@ -304,7 +306,7 @@ func placeholderOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, } diff --git a/internal/service/quicksight/schema/template_filter.go b/internal/service/quicksight/schema/template_filter.go index 23d0dde3fa11..9ccab551b6a5 100644 --- a/internal/service/quicksight/schema/template_filter.go +++ b/internal/service/quicksight/schema/template_filter.go @@ -59,9 +59,9 @@ func categoryFilterSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "match_operator": stringEnumSchema[awstypes.CategoryFilterMatchOperator](true), - "null_option": stringEnumSchema[awstypes.FilterNullOption](true), - "category_value": stringLenBetweenSchema(false, 1, 512), + "match_operator": stringEnumSchema[awstypes.CategoryFilterMatchOperator](attrRequired), + "null_option": stringEnumSchema[awstypes.FilterNullOption](attrRequired), + "category_value": stringLenBetweenSchema(attrOptional, 1, 512), "parameter_name": { Type: schema.TypeString, Optional: true, @@ -70,7 +70,7 @@ func categoryFilterSchema() *schema.Schema { validation.StringMatch(regexache.MustCompile(`^[0-9A-Za-z]+`), ""), ), }, - "select_all_options": stringEnumSchema[awstypes.CategoryFilterSelectAllOptions](false), + "select_all_options": stringEnumSchema[awstypes.CategoryFilterSelectAllOptions](attrOptional), }, }, }, @@ -81,8 +81,8 @@ func categoryFilterSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "match_operator": stringEnumSchema[awstypes.CategoryFilterMatchOperator](true), - "null_option": stringEnumSchema[awstypes.FilterNullOption](true), + "match_operator": stringEnumSchema[awstypes.CategoryFilterMatchOperator](attrRequired), + "null_option": stringEnumSchema[awstypes.FilterNullOption](attrRequired), "category_values": { Type: schema.TypeList, Optional: true, @@ -93,7 +93,7 @@ func categoryFilterSchema() *schema.Schema { ValidateFunc: validation.StringLenBetween(1, 512), }, }, - "select_all_options": stringEnumSchema[awstypes.CategoryFilterSelectAllOptions](false), + "select_all_options": stringEnumSchema[awstypes.CategoryFilterSelectAllOptions](attrOptional), }, }, }, @@ -104,7 +104,7 @@ func categoryFilterSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "match_operator": stringEnumSchema[awstypes.CategoryFilterMatchOperator](true), + "match_operator": stringEnumSchema[awstypes.CategoryFilterMatchOperator](attrRequired), "category_values": { Type: schema.TypeList, Optional: true, @@ -115,7 +115,7 @@ func categoryFilterSchema() *schema.Schema { ValidateFunc: validation.StringLenBetween(1, 512), }, }, - "select_all_options": stringEnumSchema[awstypes.CategoryFilterSelectAllOptions](false), + "select_all_options": stringEnumSchema[awstypes.CategoryFilterSelectAllOptions](attrOptional), }, }, }, @@ -138,11 +138,11 @@ func numericEqualityFilterSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "filter_id": idSchema(), - "match_operator": stringEnumSchema[awstypes.CategoryFilterMatchOperator](true), - "null_option": stringEnumSchema[awstypes.FilterNullOption](true), + "match_operator": stringEnumSchema[awstypes.CategoryFilterMatchOperator](attrRequired), + "null_option": stringEnumSchema[awstypes.FilterNullOption](attrRequired), "aggregation_function": aggregationFunctionSchema(false), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AggregationFunction.html "parameter_name": parameterNameSchema(false), - "select_all_options": stringEnumSchema[awstypes.NumericFilterSelectAllOptions](false), + "select_all_options": stringEnumSchema[awstypes.NumericFilterSelectAllOptions](attrOptional), names.AttrValue: { Type: schema.TypeFloat, Optional: true, @@ -162,7 +162,7 @@ func numericRangeFilterSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "filter_id": idSchema(), - "null_option": stringEnumSchema[awstypes.FilterNullOption](true), + "null_option": stringEnumSchema[awstypes.FilterNullOption](attrRequired), "aggregation_function": aggregationFunctionSchema(false), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AggregationFunction.html "include_maximum": { Type: schema.TypeBool, @@ -174,7 +174,7 @@ func numericRangeFilterSchema() *schema.Schema { }, "range_maximum": numericRangeFilterValueSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericRangeFilterValue.html "range_minimum": numericRangeFilterValueSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericRangeFilterValue.html - "select_all_options": stringEnumSchema[awstypes.NumericFilterSelectAllOptions](false), + "select_all_options": stringEnumSchema[awstypes.NumericFilterSelectAllOptions](attrOptional), }, }, } @@ -195,18 +195,18 @@ func relativeDatesFilterSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "anchor_option": stringEnumSchema[awstypes.AnchorOption](false), + "anchor_option": stringEnumSchema[awstypes.AnchorOption](attrOptional), "parameter_name": parameterNameSchema(false), }, }, }, "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "filter_id": idSchema(), - "null_option": stringEnumSchema[awstypes.FilterNullOption](true), - "relative_date_type": stringEnumSchema[awstypes.RelativeDateType](true), - "time_granularity": stringEnumSchema[awstypes.TimeGranularity](true), + "null_option": stringEnumSchema[awstypes.FilterNullOption](attrRequired), + "relative_date_type": stringEnumSchema[awstypes.RelativeDateType](attrRequired), + "time_granularity": stringEnumSchema[awstypes.TimeGranularity](attrRequired), "exclude_period_configuration": excludePeriodConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ExcludePeriodConfiguration.html - "minimum_granularity": stringEnumSchema[awstypes.TimeGranularity](true), + "minimum_granularity": stringEnumSchema[awstypes.TimeGranularity](attrRequired), "parameter_name": parameterNameSchema(false), "relative_date_value": { Type: schema.TypeInt, @@ -227,7 +227,7 @@ func timeEqualityFilterSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "filter_id": idSchema(), - "time_granularity": stringEnumSchema[awstypes.TimeGranularity](true), + "time_granularity": stringEnumSchema[awstypes.TimeGranularity](attrRequired), "parameter_name": parameterNameSchema(false), names.AttrValue: { Type: schema.TypeString, @@ -249,7 +249,7 @@ func timeRangeFilterSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "filter_id": idSchema(), - "null_option": stringEnumSchema[awstypes.FilterNullOption](true), + "null_option": stringEnumSchema[awstypes.FilterNullOption](attrRequired), "exclude_period_configuration": excludePeriodConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ExcludePeriodConfiguration.html "include_maximum": { Type: schema.TypeBool, @@ -261,7 +261,7 @@ func timeRangeFilterSchema() *schema.Schema { }, "range_maximum_value": timeRangeFilterValueSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TimeRangeFilterValue.html "range_minimum_value": timeRangeFilterValueSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TimeRangeFilterValue.html - "time_granularity": stringEnumSchema[awstypes.TimeGranularity](true), + "time_granularity": stringEnumSchema[awstypes.TimeGranularity](attrRequired), }, }, } @@ -284,7 +284,7 @@ func topBottomFilterSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "aggregation_function": aggregationFunctionSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AggregationFunction.html "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "sort_direction": stringEnumSchema[awstypes.SortDirection](true), + "sort_direction": stringEnumSchema[awstypes.SortDirection](attrRequired), }, }, }, @@ -295,7 +295,7 @@ func topBottomFilterSchema() *schema.Schema { Optional: true, }, "parameter_name": parameterNameSchema(false), - "time_granularity": stringEnumSchema[awstypes.TimeGranularity](true), + "time_granularity": stringEnumSchema[awstypes.TimeGranularity](attrRequired), }, }, } @@ -313,8 +313,8 @@ func excludePeriodConfigurationSchema() *schema.Schema { Type: schema.TypeInt, Required: true, }, - "granularity": stringEnumSchema[awstypes.TimeGranularity](true), - names.AttrStatus: stringEnumSchema[awstypes.Status](false), + "granularity": stringEnumSchema[awstypes.TimeGranularity](attrRequired), + names.AttrStatus: stringEnumSchema[awstypes.Status](attrOptional), }, }, } @@ -362,7 +362,7 @@ func timeRangeFilterValueSchema() *schema.Schema { ), }, "rolling_date": rollingDateConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RollingDateConfiguration.html, - "static_value": stringSchema(false, verify.ValidUTCTimestamp), + "static_value": utcTimestampStringSchema(attrOptional), }, }, } @@ -420,9 +420,9 @@ func drillDownFilterSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "range_maximum": stringSchema(true, verify.ValidUTCTimestamp), - "range_minimum": stringSchema(true, verify.ValidUTCTimestamp), - "time_granularity": stringEnumSchema[awstypes.TimeGranularity](true), + "range_maximum": utcTimestampStringSchema(attrRequired), + "range_minimum": utcTimestampStringSchema(attrRequired), + "time_granularity": stringEnumSchema[awstypes.TimeGranularity](attrRequired), }, }, }, @@ -475,7 +475,7 @@ func filterScopeConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrScope: stringEnumSchema[awstypes.FilterVisualScope](true), + names.AttrScope: stringEnumSchema[awstypes.FilterVisualScope](attrRequired), "sheet_id": idSchema(), "visual_ids": { Type: schema.TypeSet, diff --git a/internal/service/quicksight/schema/template_format.go b/internal/service/quicksight/schema/template_format.go index b5afd8328887..d6b387e235b8 100644 --- a/internal/service/quicksight/schema/template_format.go +++ b/internal/service/quicksight/schema/template_format.go @@ -29,11 +29,11 @@ func numericFormatConfigurationSchema() *schema.Schema { "decimal_places_configuration": decimalPlacesConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DecimalPlacesConfiguration.html "negative_value_configuration": negativeValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NegativeValueConfiguration.html "null_value_format_configuration": nullValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NullValueFormatConfiguration.html - "number_scale": stringEnumSchema[awstypes.NumberScale](false), - names.AttrPrefix: stringLenBetweenSchema(false, 1, 128), + "number_scale": stringEnumSchema[awstypes.NumberScale](attrOptional), + names.AttrPrefix: stringLenBetweenSchema(attrOptional, 1, 128), "separator_configuration": separatorConfigurationSchema(), - "suffix": stringLenBetweenSchema(false, 1, 128), - "symbol": stringMatchSchema(false, `[A-Z]{3}`, "must be a 3 character currency symbol"), + "suffix": stringLenBetweenSchema(attrOptional, 1, 128), + "symbol": stringMatchSchema(attrOptional, `[A-Z]{3}`, "must be a 3 character currency symbol"), }, }, }, @@ -52,7 +52,7 @@ func dateTimeFormatConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "date_time_format": stringLenBetweenSchema(false, 1, 128), + "date_time_format": stringLenBetweenSchema(attrOptional, 1, 128), "null_value_format_configuration": nullValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NullValueFormatConfiguration.html "numeric_format_configuration": numericFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericFormatConfiguration.html }, @@ -71,10 +71,10 @@ func numberDisplayFormatConfigurationSchema() *schema.Schema { "decimal_places_configuration": decimalPlacesConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DecimalPlacesConfiguration.html "negative_value_configuration": negativeValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NegativeValueConfiguration.html "null_value_format_configuration": nullValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NullValueFormatConfiguration.html - "number_scale": stringEnumSchema[awstypes.NumberScale](false), - names.AttrPrefix: stringLenBetweenSchema(false, 1, 128), + "number_scale": stringEnumSchema[awstypes.NumberScale](attrOptional), + names.AttrPrefix: stringLenBetweenSchema(attrOptional, 1, 128), "separator_configuration": separatorConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericSeparatorConfiguration.html - "suffix": stringLenBetweenSchema(false, 1, 128), + "suffix": stringLenBetweenSchema(attrOptional, 1, 128), }, }, } @@ -91,9 +91,9 @@ func percentageDisplayFormatConfigurationSchema() *schema.Schema { "decimal_places_configuration": decimalPlacesConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DecimalPlacesConfiguration.html "negative_value_configuration": negativeValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NegativeValueConfiguration.html "null_value_format_configuration": nullValueConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NullValueFormatConfiguration.html - names.AttrPrefix: stringLenBetweenSchema(false, 1, 128), + names.AttrPrefix: stringLenBetweenSchema(attrOptional, 1, 128), "separator_configuration": separatorConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericSeparatorConfiguration.html - "suffix": stringLenBetweenSchema(false, 1, 128), + "suffix": stringLenBetweenSchema(attrOptional, 1, 128), }, }, } @@ -154,7 +154,7 @@ func negativeValueConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "display_mode": stringEnumSchema[awstypes.NegativeValueDisplayMode](true), + "display_mode": stringEnumSchema[awstypes.NegativeValueDisplayMode](attrRequired), }, }, } @@ -168,7 +168,7 @@ func nullValueConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "null_string": stringLenBetweenSchema(true, 1, 128), + "null_string": stringLenBetweenSchema(attrRequired, 1, 128), }, }, } @@ -182,7 +182,7 @@ func separatorConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "decimal_separator": stringEnumSchema[awstypes.NumericSeparatorSymbol](false), + "decimal_separator": stringEnumSchema[awstypes.NumericSeparatorSymbol](attrOptional), "thousands_separator": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ThousandSeparatorOptions.html Type: schema.TypeList, MinItems: 1, @@ -190,8 +190,8 @@ func separatorConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "symbol": stringEnumSchema[awstypes.NumericSeparatorSymbol](false), - "visibility": stringEnumSchema[awstypes.Visibility](false), + "symbol": stringEnumSchema[awstypes.NumericSeparatorSymbol](attrOptional), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -213,7 +213,7 @@ func labelOptionsSchema() *schema.Schema { Optional: true, }, "font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, } @@ -227,26 +227,26 @@ func fontConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "font_color": hexColorSchema(false), - "font_decoration": stringEnumSchema[awstypes.FontDecoration](false), + "font_color": hexColorSchema(attrOptional), + "font_decoration": stringEnumSchema[awstypes.FontDecoration](attrOptional), "font_size": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontSize.html Type: schema.TypeList, MaxItems: 1, Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "relative": stringEnumSchema[awstypes.RelativeFontSize](false), + "relative": stringEnumSchema[awstypes.RelativeFontSize](attrOptional), }, }, }, - "font_style": stringEnumSchema[awstypes.FontStyle](false), + "font_style": stringEnumSchema[awstypes.FontStyle](attrOptional), "font_weight": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontWeight.html Type: schema.TypeList, MaxItems: 1, Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrName: stringEnumSchema[awstypes.FontWeightName](false), + names.AttrName: stringEnumSchema[awstypes.FontWeightName](attrOptional), }, }, }, diff --git a/internal/service/quicksight/schema/template_parameter.go b/internal/service/quicksight/schema/template_parameter.go index aaf21d6019c8..94817875d766 100644 --- a/internal/service/quicksight/schema/template_parameter.go +++ b/internal/service/quicksight/schema/template_parameter.go @@ -54,7 +54,7 @@ func dateTimeParameterDeclarationSchema() *schema.Schema { }, }, }, - "time_granularity": stringEnumSchema[awstypes.TimeGranularity](false), + "time_granularity": stringEnumSchema[awstypes.TimeGranularity](attrOptional), "values_when_unset": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimeValueWhenUnsetConfiguration.html Type: schema.TypeList, MinItems: 1, @@ -67,7 +67,7 @@ func dateTimeParameterDeclarationSchema() *schema.Schema { Optional: true, ValidateFunc: verify.ValidUTCTimestamp, }, - "value_when_unset_option": stringEnumSchema[awstypes.ValueWhenUnsetOption](false), + "value_when_unset_option": stringEnumSchema[awstypes.ValueWhenUnsetOption](attrOptional), }, }, }, @@ -92,7 +92,7 @@ func decimalParameterDeclarationSchema() *schema.Schema { validation.StringMatch(regexache.MustCompile(`^[0-9A-Za-z]+$`), ""), ), }, - "parameter_value_type": stringEnumSchema[awstypes.ParameterValueType](true), + "parameter_value_type": stringEnumSchema[awstypes.ParameterValueType](attrRequired), "default_values": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DecimalDefaultValues.html Type: schema.TypeList, MinItems: 1, @@ -124,7 +124,7 @@ func decimalParameterDeclarationSchema() *schema.Schema { Type: schema.TypeFloat, Optional: true, }, - "value_when_unset_option": stringEnumSchema[awstypes.ValueWhenUnsetOption](false), + "value_when_unset_option": stringEnumSchema[awstypes.ValueWhenUnsetOption](attrOptional), }, }, }, @@ -149,7 +149,7 @@ func integerParameterDeclarationSchema() *schema.Schema { validation.StringMatch(regexache.MustCompile(`^[0-9A-Za-z]+$`), ""), ), }, - "parameter_value_type": stringEnumSchema[awstypes.ParameterValueType](true), + "parameter_value_type": stringEnumSchema[awstypes.ParameterValueType](attrRequired), "default_values": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_IntegerDefaultValues.html Type: schema.TypeList, MinItems: 1, @@ -181,7 +181,7 @@ func integerParameterDeclarationSchema() *schema.Schema { Type: schema.TypeInt, Optional: true, }, - "value_when_unset_option": stringEnumSchema[awstypes.ValueWhenUnsetOption](false), + "value_when_unset_option": stringEnumSchema[awstypes.ValueWhenUnsetOption](attrOptional), }, }, }, @@ -206,7 +206,7 @@ func stringParameterDeclarationSchema() *schema.Schema { validation.StringMatch(regexache.MustCompile(`^[0-9A-Za-z]+$`), ""), ), }, - "parameter_value_type": stringEnumSchema[awstypes.ParameterValueType](true), + "parameter_value_type": stringEnumSchema[awstypes.ParameterValueType](attrRequired), "default_values": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_StringDefaultValues.html Type: schema.TypeList, MinItems: 1, @@ -238,7 +238,7 @@ func stringParameterDeclarationSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "value_when_unset_option": stringEnumSchema[awstypes.ValueWhenUnsetOption](false), + "value_when_unset_option": stringEnumSchema[awstypes.ValueWhenUnsetOption](attrOptional), }, }, }, @@ -280,7 +280,7 @@ func parameterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "parameter_control_id": idSchema(), "source_parameter_name": parameterNameSchema(true), - "title": stringLenBetweenSchema(true, 1, 2048), + "title": stringLenBetweenSchema(attrRequired, 1, 2048), "display_options": dateTimePickerControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimePickerControlDisplayOptions.html }, }, @@ -294,11 +294,11 @@ func parameterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "parameter_control_id": idSchema(), "source_parameter_name": parameterNameSchema(true), - "title": stringLenBetweenSchema(true, 1, 2048), + "title": stringLenBetweenSchema(attrRequired, 1, 2048), "cascading_control_configuration": cascadingControlConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CascadingControlConfiguration.html "display_options": dropDownControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DropDownControlDisplayOptions.html "selectable_values": parameterSelectableValuesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ParameterSelectableValues.html - names.AttrType: stringEnumSchema[awstypes.SheetControlListType](false), + names.AttrType: stringEnumSchema[awstypes.SheetControlListType](attrOptional), }, }, }, @@ -311,11 +311,11 @@ func parameterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "parameter_control_id": idSchema(), "source_parameter_name": parameterNameSchema(true), - "title": stringLenBetweenSchema(true, 1, 2048), + "title": stringLenBetweenSchema(attrRequired, 1, 2048), "cascading_control_configuration": cascadingControlConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CascadingControlConfiguration.html "display_options": listControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ListControlDisplayOptions.html "selectable_values": parameterSelectableValuesSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ParameterSelectableValues.html - names.AttrType: stringEnumSchema[awstypes.SheetControlListType](false), + names.AttrType: stringEnumSchema[awstypes.SheetControlListType](attrOptional), }, }, }, @@ -328,7 +328,7 @@ func parameterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "parameter_control_id": idSchema(), "source_parameter_name": parameterNameSchema(true), - "title": stringLenBetweenSchema(true, 1, 2048), + "title": stringLenBetweenSchema(attrRequired, 1, 2048), "display_options": sliderControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SliderControlDisplayOptions.html "maximum_value": { Type: schema.TypeFloat, @@ -354,9 +354,9 @@ func parameterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "parameter_control_id": idSchema(), "source_parameter_name": parameterNameSchema(true), - "title": stringLenBetweenSchema(true, 1, 2048), + "title": stringLenBetweenSchema(attrRequired, 1, 2048), "display_options": textAreaControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TextAreaControlDisplayOptions.html - "delimiter": stringLenBetweenSchema(false, 1, 2048), + "delimiter": stringLenBetweenSchema(attrOptional, 1, 2048), }, }, }, @@ -369,7 +369,7 @@ func parameterControlsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "parameter_control_id": idSchema(), "source_parameter_name": parameterNameSchema(true), - "title": stringLenBetweenSchema(true, 1, 2048), + "title": stringLenBetweenSchema(attrRequired, 1, 2048), "display_options": textFieldControlDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TextFieldControlDisplayOptions.html }, }, diff --git a/internal/service/quicksight/schema/template_sheet.go b/internal/service/quicksight/schema/template_sheet.go index 31dd1b0c6f57..025e95b6b89f 100644 --- a/internal/service/quicksight/schema/template_sheet.go +++ b/internal/service/quicksight/schema/template_sheet.go @@ -29,7 +29,7 @@ func analysisDefaultSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "interactive_layout_configuration": interactiveLayoutConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DefaultInteractiveLayoutConfiguration.html "paginated_layout_configuration": paginatedLayoutConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DefaultPaginatedLayoutConfiguration.html, - "sheet_content_type": stringEnumSchema[awstypes.SheetContentType](false), + "sheet_content_type": stringEnumSchema[awstypes.SheetContentType](attrOptional), }, }, }, @@ -105,7 +105,7 @@ func interactiveLayoutConfigurationSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "resize_option": stringEnumSchema[awstypes.ResizeOption](true), + "resize_option": stringEnumSchema[awstypes.ResizeOption](attrRequired), }, }, }, @@ -163,8 +163,8 @@ func paperCanvasSizeOptionsSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "paper_margin": spacingSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Spacing.html - "paper_orientation": stringEnumSchema[awstypes.PaperOrientation](false), - "paper_size": stringEnumSchema[awstypes.PaperSize](false), + "paper_orientation": stringEnumSchema[awstypes.PaperOrientation](attrOptional), + "paper_size": stringEnumSchema[awstypes.PaperSize](attrOptional), }, }, } @@ -286,7 +286,7 @@ func layoutSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrStatus: stringEnumSchema[awstypes.Status](false), + names.AttrStatus: stringEnumSchema[awstypes.Status](attrOptional), }, }, }, @@ -344,7 +344,7 @@ func gridLayoutConfigurationSchema() *schema.Schema { ValidateFunc: validation.IntBetween(1, 36), }, "element_id": idSchema(), - "element_type": stringEnumSchema[awstypes.LayoutElementType](true), + "element_type": stringEnumSchema[awstypes.LayoutElementType](attrRequired), "row_span": { Type: schema.TypeInt, Required: true, @@ -381,7 +381,7 @@ func gridLayoutConfigurationSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "resize_option": stringEnumSchema[awstypes.ResizeOption](true), + "resize_option": stringEnumSchema[awstypes.ResizeOption](attrRequired), }, }, }, @@ -436,7 +436,7 @@ func freeFormLayoutElementsSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "element_id": idSchema(), - "element_type": stringEnumSchema[awstypes.LayoutElementType](true), + "element_type": stringEnumSchema[awstypes.LayoutElementType](attrRequired), "height": { Type: schema.TypeString, Required: true, @@ -460,8 +460,8 @@ func freeFormLayoutElementsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringMatchSchema(false, `^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`, ""), - "visibility": stringEnumSchema[awstypes.Visibility](false), + "color": stringMatchSchema(attrOptional, `^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`, ""), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -472,8 +472,8 @@ func freeFormLayoutElementsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringMatchSchema(false, `^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`, ""), - "visibility": stringEnumSchema[awstypes.Visibility](false), + "color": stringMatchSchema(attrOptional, `^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`, ""), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -484,7 +484,7 @@ func freeFormLayoutElementsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -502,11 +502,11 @@ func freeFormLayoutElementsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, - names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), + names.AttrExpression: stringLenBetweenSchema(attrRequired, 1, 4096), }, }, }, @@ -517,12 +517,12 @@ func freeFormLayoutElementsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": stringMatchSchema(false, `^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`, ""), - "visibility": stringEnumSchema[awstypes.Visibility](false), + "color": stringMatchSchema(attrOptional, `^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`, ""), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, } diff --git a/internal/service/quicksight/schema/theme.go b/internal/service/quicksight/schema/theme.go index 611abf3f975c..3d7a8ebd46f7 100644 --- a/internal/service/quicksight/schema/theme.go +++ b/internal/service/quicksight/schema/theme.go @@ -4,11 +4,9 @@ package schema import ( - "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/internal/sdkv2" ) @@ -31,25 +29,15 @@ func ThemeConfigurationSchema() *schema.Schema { Optional: true, MinItems: 8, // Colors size needs to be in the range between 8 and 20 MaxItems: 20, - Elem: &schema.Schema{ - Type: schema.TypeString, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, - }, - "empty_fill_color": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), + Elem: hexColorSchema(attrElem), }, + "empty_fill_color": hexColorSchema(attrOptional), "min_max_gradient": { Type: schema.TypeList, Optional: true, MinItems: 2, // MinMaxGradient size needs to be 2 MaxItems: 2, - Elem: &schema.Schema{ - Type: schema.TypeString, - ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), ""), - }, + Elem: hexColorSchema(attrElem), }, }, }, @@ -148,22 +136,22 @@ func ThemeConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "accent": hexColorSchema(false), - "accent_foreground": hexColorSchema(false), - "danger": hexColorSchema(false), - "danger_foreground": hexColorSchema(false), - "dimension": hexColorSchema(false), - "dimension_foreground": hexColorSchema(false), - "measure": hexColorSchema(false), - "measure_foreground": hexColorSchema(false), - "primary_background": hexColorSchema(false), - "primary_foreground": hexColorSchema(false), - "secondary_background": hexColorSchema(false), - "secondary_foreground": hexColorSchema(false), - "success": hexColorSchema(false), - "success_foreground": hexColorSchema(false), - "warning": hexColorSchema(false), - "warning_foreground": hexColorSchema(false), + "accent": hexColorSchema(attrOptional), + "accent_foreground": hexColorSchema(attrOptional), + "danger": hexColorSchema(attrOptional), + "danger_foreground": hexColorSchema(attrOptional), + "dimension": hexColorSchema(attrOptional), + "dimension_foreground": hexColorSchema(attrOptional), + "measure": hexColorSchema(attrOptional), + "measure_foreground": hexColorSchema(attrOptional), + "primary_background": hexColorSchema(attrOptional), + "primary_foreground": hexColorSchema(attrOptional), + "secondary_background": hexColorSchema(attrOptional), + "secondary_foreground": hexColorSchema(attrOptional), + "success": hexColorSchema(attrOptional), + "success_foreground": hexColorSchema(attrOptional), + "warning": hexColorSchema(attrOptional), + "warning_foreground": hexColorSchema(attrOptional), }, }, }, diff --git a/internal/service/quicksight/schema/visual.go b/internal/service/quicksight/schema/visual.go index 916430bd23cb..caced11269e1 100644 --- a/internal/service/quicksight/schema/visual.go +++ b/internal/service/quicksight/schema/visual.go @@ -9,7 +9,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -65,9 +64,9 @@ func legendOptionsSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "position": stringEnumSchema[awstypes.LegendPosition](false), + "position": stringEnumSchema[awstypes.LegendPosition](attrOptional), "title": labelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LabelOptions.html - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), "width": { Type: schema.TypeString, Optional: true, @@ -92,7 +91,7 @@ func tooltipOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "aggregation_visibility": stringEnumSchema[awstypes.Visibility](false), + "aggregation_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), "tooltip_fields": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TooltipItem.html Type: schema.TypeList, Optional: true, @@ -113,7 +112,7 @@ func tooltipOptionsSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -124,24 +123,24 @@ func tooltipOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringLenBetweenSchema(true, 1, 512), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), "label": { Type: schema.TypeString, Optional: true, }, - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, }, }, }, - "tooltip_title_type": stringEnumSchema[awstypes.TooltipTitleType](false), + "tooltip_title_type": stringEnumSchema[awstypes.TooltipTitleType](attrOptional), }, }, }, - "selected_tooltip_type": stringEnumSchema[awstypes.SelectedTooltipType](false), - "tooltip_visibility": stringEnumSchema[awstypes.Visibility](false), + "selected_tooltip_type": stringEnumSchema[awstypes.SelectedTooltipType](attrOptional), + "tooltip_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, } @@ -155,7 +154,7 @@ func visualPaletteSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "chart_color": hexColorSchema(false), + "chart_color": hexColorSchema(attrOptional), "color_map": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataPathColor.html Type: schema.TypeList, Optional: true, @@ -163,9 +162,9 @@ func visualPaletteSchema() *schema.Schema { MaxItems: 5000, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": hexColorSchema(true), + "color": hexColorSchema(attrRequired), "element": dataPathValueSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataPathValue.html - "time_granularity": stringEnumSchema[awstypes.TimeGranularity](false), + "time_granularity": stringEnumSchema[awstypes.TimeGranularity](attrOptional), }, }, }, @@ -182,8 +181,8 @@ func dataPathValueSchema(maxItems int) *schema.Schema { MaxItems: maxItems, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringLenBetweenSchema(true, 1, 512), - "field_value": stringLenBetweenSchema(true, 1, 2048), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), + "field_value": stringLenBetweenSchema(attrRequired, 1, 2048), }, }, } @@ -204,7 +203,7 @@ func columnHierarchiesSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "hierarchy_id": stringLenBetweenSchema(true, 1, 512), + "hierarchy_id": stringLenBetweenSchema(attrRequired, 1, 512), "drill_down_filters": drillDownFilterSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DrillDownFilter.html }, }, @@ -223,12 +222,12 @@ func columnHierarchiesSchema() *schema.Schema { MaxItems: 10, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "column_name": stringLenBetweenSchema(true, 1, 128), - "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), + "column_name": stringLenBetweenSchema(attrRequired, 1, 128), + "data_set_identifier": stringLenBetweenSchema(attrRequired, 1, 2048), }, }, }, - "hierarchy_id": stringLenBetweenSchema(true, 1, 512), + "hierarchy_id": stringLenBetweenSchema(attrRequired, 1, 512), "drill_down_filters": drillDownFilterSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DrillDownFilter.html }, }, @@ -247,12 +246,12 @@ func columnHierarchiesSchema() *schema.Schema { MaxItems: 10, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "column_name": stringLenBetweenSchema(true, 1, 128), - "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), + "column_name": stringLenBetweenSchema(attrRequired, 1, 128), + "data_set_identifier": stringLenBetweenSchema(attrRequired, 1, 2048), }, }, }, - "hierarchy_id": stringLenBetweenSchema(true, 1, 512), + "hierarchy_id": stringLenBetweenSchema(attrRequired, 1, 512), "drill_down_filters": drillDownFilterSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DrillDownFilter.html }, }, @@ -272,7 +271,7 @@ func visualSubtitleLabelOptionsSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "format_text": longFormatTextSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LongFormatText.html - "visibility": stringOptionalComputedSchema(enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptionalComputed), }, }, } @@ -286,8 +285,8 @@ func longFormatTextSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "plain_text": stringLenBetweenSchema(false, 1, 1024), - "rich_text": stringLenBetweenSchema(false, 1, 2048), + "plain_text": stringLenBetweenSchema(attrOptional, 1, 1024), + "rich_text": stringLenBetweenSchema(attrOptional, 1, 2048), }, }, } @@ -301,8 +300,8 @@ func shortFormatTextSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "plain_text": stringLenBetweenSchema(false, 1, 512), - "rich_text": stringLenBetweenSchema(false, 1, 1024), + "plain_text": stringLenBetweenSchema(attrOptional, 1, 512), + "rich_text": stringLenBetweenSchema(attrOptional, 1, 1024), }, }, } @@ -318,7 +317,7 @@ func visualTitleLabelOptionsSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "format_text": shortFormatTextSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ShortFormatText.html - "visibility": stringOptionalComputedSchema(enum.Validate[awstypes.Visibility]()), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptionalComputed), }, }, } @@ -344,7 +343,7 @@ func comparisonConfigurationSchema() *schema.Schema { }, }, }, - "comparison_method": stringEnumSchema[awstypes.ComparisonMethod](false), + "comparison_method": stringEnumSchema[awstypes.ComparisonMethod](attrOptional), }, }, } @@ -358,7 +357,7 @@ func colorScaleSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color_fill_type": stringEnumSchema[awstypes.ColorFillType](true), + "color_fill_type": stringEnumSchema[awstypes.ColorFillType](attrRequired), "colors": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataColor.html Type: schema.TypeList, Required: true, @@ -366,7 +365,7 @@ func colorScaleSchema() *schema.Schema { MaxItems: 3, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": hexColorSchema(false), + "color": hexColorSchema(attrOptional), "data_value": { Type: schema.TypeFloat, Optional: true, @@ -381,7 +380,7 @@ func colorScaleSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": hexColorSchema(false), + "color": hexColorSchema(attrOptional), "data_value": { Type: schema.TypeFloat, Optional: true, @@ -402,7 +401,7 @@ func dataLabelOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "category_label_visibility": stringEnumSchema[awstypes.Visibility](false), + "category_label_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), "data_label_types": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataLabelType.html Type: schema.TypeList, MinItems: 1, @@ -417,9 +416,9 @@ func dataLabelOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringLenBetweenSchema(false, 1, 512), - "field_value": stringLenBetweenSchema(false, 1, 2048), - "visibility": stringEnumSchema[awstypes.Visibility](false), + "field_id": stringLenBetweenSchema(attrOptional, 1, 512), + "field_value": stringLenBetweenSchema(attrOptional, 1, 2048), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -430,8 +429,8 @@ func dataLabelOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringLenBetweenSchema(false, 1, 512), - "visibility": stringEnumSchema[awstypes.Visibility](false), + "field_id": stringLenBetweenSchema(attrOptional, 1, 512), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -442,7 +441,7 @@ func dataLabelOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -453,7 +452,7 @@ func dataLabelOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -464,27 +463,27 @@ func dataLabelOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, }, }, }, - "label_color": hexColorSchema(false), - "label_content": stringEnumSchema[awstypes.DataLabelContent](false), + "label_color": hexColorSchema(attrOptional), + "label_content": stringEnumSchema[awstypes.DataLabelContent](attrOptional), "label_font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html - "measure_label_visibility": stringEnumSchema[awstypes.Visibility](false), - "overlap": stringEnumSchema[awstypes.DataLabelOverlap](false), - "position": stringEnumSchema[awstypes.DataLabelPosition](false), - "visibility": stringEnumSchema[awstypes.Visibility](false), + "measure_label_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), + "overlap": stringEnumSchema[awstypes.DataLabelOverlap](attrOptional), + "position": stringEnumSchema[awstypes.DataLabelPosition](attrOptional), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, } } -func hexColorSchema(required bool) *schema.Schema { - return stringMatchSchema(required, `^#[0-9A-F]{6}$`, "") +func hexColorSchema(handling attrHandling) *schema.Schema { + return stringMatchSchema(handling, `^#[0-9A-F]{6}$`, "") } func expandVisual(tfMap map[string]interface{}) *awstypes.Visual { diff --git a/internal/service/quicksight/schema/visual_actions.go b/internal/service/quicksight/schema/visual_actions.go index be76bcfc3e00..e10a10dc12c9 100644 --- a/internal/service/quicksight/schema/visual_actions.go +++ b/internal/service/quicksight/schema/visual_actions.go @@ -44,7 +44,7 @@ func visualCustomActionsSchema(maxItems int) *schema.Schema { Required: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "selected_field_option": stringEnumSchema[awstypes.SelectedFieldOptions](false), + "selected_field_option": stringEnumSchema[awstypes.SelectedFieldOptions](attrOptional), "selected_fields": { Type: schema.TypeList, Optional: true, @@ -72,7 +72,7 @@ func visualCustomActionsSchema(maxItems int) *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "target_visual_option": stringEnumSchema[awstypes.TargetVisualOptions](false), + "target_visual_option": stringEnumSchema[awstypes.TargetVisualOptions](attrOptional), "target_visuals": { Type: schema.TypeSet, Optional: true, @@ -193,8 +193,8 @@ func visualCustomActionsSchema(maxItems int) *schema.Schema { }, }, }, - "select_all_value_options": stringEnumSchema[awstypes.SelectAllValueOptions](false), - "source_field": stringLenBetweenSchema(false, 1, 2048), + "select_all_value_options": stringEnumSchema[awstypes.SelectAllValueOptions](attrOptional), + "source_field": stringLenBetweenSchema(attrOptional, 1, 2048), "source_parameter_name": { Type: schema.TypeString, Optional: true, @@ -215,8 +215,8 @@ func visualCustomActionsSchema(maxItems int) *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "url_target": stringEnumSchema[awstypes.URLTargetConfiguration](true), - "url_template": stringLenBetweenSchema(true, 1, 2048), + "url_target": stringEnumSchema[awstypes.URLTargetConfiguration](attrRequired), + "url_template": stringLenBetweenSchema(attrRequired, 1, 2048), }, }, }, @@ -224,9 +224,9 @@ func visualCustomActionsSchema(maxItems int) *schema.Schema { }, }, "custom_action_id": idSchema(), - names.AttrName: stringLenBetweenSchema(true, 1, 256), - "trigger": stringEnumSchema[awstypes.VisualCustomActionTrigger](true), - names.AttrStatus: stringEnumSchema[awstypes.Status](true), + names.AttrName: stringLenBetweenSchema(attrRequired, 1, 256), + "trigger": stringEnumSchema[awstypes.VisualCustomActionTrigger](attrRequired), + names.AttrStatus: stringEnumSchema[awstypes.Status](attrRequired), }, }, } diff --git a/internal/service/quicksight/schema/visual_bar_chart.go b/internal/service/quicksight/schema/visual_bar_chart.go index 641663f069e2..65428bda6cea 100644 --- a/internal/service/quicksight/schema/visual_bar_chart.go +++ b/internal/service/quicksight/schema/visual_bar_chart.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -29,7 +28,7 @@ func barCharVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "bars_arrangement": stringOptionalComputedSchema(enum.Validate[awstypes.BarsArrangement]()), + "bars_arrangement": stringEnumSchema[awstypes.BarsArrangement](attrOptionalComputed), "category_axis": axisDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AxisDisplayOptions.html "category_label_options": chartAxisLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html "color_label_options": chartAxisLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html @@ -60,7 +59,7 @@ func barCharVisualSchema() *schema.Schema { }, }, "legend": legendOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LegendOptions.html - "orientation": stringOptionalComputedSchema(enum.Validate[awstypes.BarChartOrientation]()), + "orientation": stringEnumSchema[awstypes.BarChartOrientation](attrOptionalComputed), "reference_lines": referenceLineSchema(referenceLinesMaxItems), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLine.html "small_multiples_options": smallMultiplesOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SmallMultiplesOptions.html "sort_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_BarChartSortConfiguration.html diff --git a/internal/service/quicksight/schema/visual_box_plot.go b/internal/service/quicksight/schema/visual_box_plot.go index ec7cc212052e..100dedac2cc5 100644 --- a/internal/service/quicksight/schema/visual_box_plot.go +++ b/internal/service/quicksight/schema/visual_box_plot.go @@ -36,8 +36,8 @@ func boxPlotVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "all_data_points_visibility": stringEnumSchema[awstypes.Visibility](false), - "outlier_visibility": stringEnumSchema[awstypes.Visibility](false), + "all_data_points_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), + "outlier_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), "style_options": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_BoxPlotStyleOptions.html Type: schema.TypeList, Optional: true, @@ -45,7 +45,7 @@ func boxPlotVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "fill_style": stringEnumSchema[awstypes.BoxPlotFillStyle](false), + "fill_style": stringEnumSchema[awstypes.BoxPlotFillStyle](attrOptional), }, }, }, diff --git a/internal/service/quicksight/schema/visual_chart_configuration.go b/internal/service/quicksight/schema/visual_chart_configuration.go index 2ca065d01f8c..f7bbe693bbc4 100644 --- a/internal/service/quicksight/schema/visual_chart_configuration.go +++ b/internal/service/quicksight/schema/visual_chart_configuration.go @@ -19,7 +19,7 @@ func axisDisplayOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "axis_line_visibility": stringEnumSchema[awstypes.Visibility](false), + "axis_line_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), "axis_offset": { Type: schema.TypeString, Optional: true, @@ -38,7 +38,7 @@ func axisDisplayOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "missing_date_visibility": stringEnumSchema[awstypes.Visibility](false), + "missing_date_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -134,7 +134,7 @@ func axisDisplayOptionsSchema() *schema.Schema { }, }, }, - "grid_line_visibility": stringEnumSchema[awstypes.Visibility](false), + "grid_line_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), "scrollbar_options": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ScrollBarOptions.html Type: schema.TypeList, MinItems: 1, @@ -142,7 +142,7 @@ func axisDisplayOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), "visible_range": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisibleRangeOptions.html Type: schema.TypeList, MinItems: 1, @@ -211,7 +211,7 @@ func chartAxisLabelOptionsSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringLenBetweenSchema(true, 1, 512), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), }, }, }, @@ -223,8 +223,8 @@ func chartAxisLabelOptionsSchema() *schema.Schema { }, }, }, - "sort_icon_visibility": stringEnumSchema[awstypes.Visibility](false), - "visibility": stringEnumSchema[awstypes.Visibility](false), + "sort_icon_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, } @@ -242,7 +242,7 @@ func itemsLimitConfigurationSchema() *schema.Schema { Type: schema.TypeInt, Optional: true, }, - "other_categories": stringEnumSchema[awstypes.OtherCategories](true), + "other_categories": stringEnumSchema[awstypes.OtherCategories](attrRequired), }, }, } @@ -263,12 +263,12 @@ func contributionAnalysisDefaultsSchema() *schema.Schema { Required: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "column_name": stringLenBetweenSchema(true, 1, 128), - "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), + "column_name": stringLenBetweenSchema(attrRequired, 1, 128), + "data_set_identifier": stringLenBetweenSchema(attrRequired, 1, 2048), }, }, }, - "measure_field_id": stringLenBetweenSchema(true, 1, 512), + "measure_field_id": stringLenBetweenSchema(attrRequired, 1, 512), }, }, } @@ -289,7 +289,7 @@ func referenceLineSchema(maxItems int) *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "axis_binding": stringEnumSchema[awstypes.AxisBinding](false), + "axis_binding": stringEnumSchema[awstypes.AxisBinding](attrOptional), "dynamic_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLineDynamicDataConfiguration.html Type: schema.TypeList, Optional: true, @@ -334,13 +334,13 @@ func referenceLineSchema(maxItems int) *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "custom_label": stringMatchSchema(true, `.*\S.*`, ""), + "custom_label": stringMatchSchema(attrRequired, `.*\S.*`, ""), }, }, }, - "font_color": hexColorSchema(false), + "font_color": hexColorSchema(attrOptional), "font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html - "horizontal_position": stringEnumSchema[awstypes.ReferenceLineLabelHorizontalPosition](false), + "horizontal_position": stringEnumSchema[awstypes.ReferenceLineLabelHorizontalPosition](attrOptional), "value_label_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLineValueLabelConfiguration.html Type: schema.TypeList, Optional: true, @@ -349,15 +349,15 @@ func referenceLineSchema(maxItems int) *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "format_configuration": numericFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericFormatConfiguration.html - "relative_position": stringEnumSchema[awstypes.ReferenceLineValueLabelRelativePosition](false), + "relative_position": stringEnumSchema[awstypes.ReferenceLineValueLabelRelativePosition](attrOptional), }, }, }, - "vertical_position": stringEnumSchema[awstypes.ReferenceLineLabelVerticalPosition](false), + "vertical_position": stringEnumSchema[awstypes.ReferenceLineLabelVerticalPosition](attrOptional), }, }, }, - names.AttrStatus: stringEnumSchema[awstypes.Status](false), + names.AttrStatus: stringEnumSchema[awstypes.Status](attrOptional), "style_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLineStyleConfiguration.html Type: schema.TypeList, Optional: true, @@ -365,8 +365,8 @@ func referenceLineSchema(maxItems int) *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": hexColorSchema(false), - "pattern": stringEnumSchema[awstypes.ReferenceLinePatternType](false), + "color": hexColorSchema(attrOptional), + "pattern": stringEnumSchema[awstypes.ReferenceLinePatternType](attrOptional), }, }, }, @@ -400,20 +400,20 @@ func smallMultiplesOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "background_color": stringMatchSchema(false, `^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`, ""), - "background_visibility": stringEnumSchema[awstypes.Visibility](false), - "border_color": stringMatchSchema(false, `^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`, ""), - "border_style": stringEnumSchema[awstypes.PanelBorderStyle](false), + "background_color": stringMatchSchema(attrOptional, `^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`, ""), + "background_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), + "border_color": stringMatchSchema(attrOptional, `^#[0-9A-F]{6}(?:[0-9A-F]{2})?$`, ""), + "border_style": stringEnumSchema[awstypes.PanelBorderStyle](attrOptional), "border_thickness": { Type: schema.TypeString, Optional: true, }, - "border_visibility": stringEnumSchema[awstypes.Visibility](false), + "border_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), "gutter_spacing": { Type: schema.TypeString, Optional: true, }, - "gutter_visibility": stringEnumSchema[awstypes.Visibility](false), + "gutter_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), "title": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PanelTitleOptions.html Type: schema.TypeList, Optional: true, @@ -422,8 +422,8 @@ func smallMultiplesOptionsSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html - "horizontal_text_alignment": stringEnumSchema[awstypes.HorizontalTextAlignment](false), - "visibility": stringEnumSchema[awstypes.Visibility](false), + "horizontal_text_alignment": stringEnumSchema[awstypes.HorizontalTextAlignment](attrOptional), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, diff --git a/internal/service/quicksight/schema/visual_combo_chart.go b/internal/service/quicksight/schema/visual_combo_chart.go index 244f72121fdc..f21384090944 100644 --- a/internal/service/quicksight/schema/visual_combo_chart.go +++ b/internal/service/quicksight/schema/visual_combo_chart.go @@ -29,7 +29,7 @@ func comboChartVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "bar_data_labels": dataLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataLabelOptions.html - "bars_arrangement": stringEnumSchema[awstypes.BarsArrangement](false), + "bars_arrangement": stringEnumSchema[awstypes.BarsArrangement](attrOptional), "category_axis": axisDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AxisDisplayOptions.html "category_label_options": chartAxisLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html "color_label_options": chartAxisLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html diff --git a/internal/service/quicksight/schema/visual_conditional_formatting.go b/internal/service/quicksight/schema/visual_conditional_formatting.go index 44100c324986..0ac6ab760060 100644 --- a/internal/service/quicksight/schema/visual_conditional_formatting.go +++ b/internal/service/quicksight/schema/visual_conditional_formatting.go @@ -43,7 +43,7 @@ func conditionalFormattingColorSchema() *schema.Schema { Type: schema.TypeFloat, Required: true, }, - "color": hexColorSchema(false), + "color": hexColorSchema(attrOptional), "data_value": { Type: schema.TypeFloat, Optional: true, @@ -54,7 +54,7 @@ func conditionalFormattingColorSchema() *schema.Schema { }, }, }, - names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), + names.AttrExpression: stringLenBetweenSchema(attrRequired, 1, 4096), }, }, }, @@ -65,8 +65,8 @@ func conditionalFormattingColorSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": hexColorSchema(false), - names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), + "color": hexColorSchema(attrOptional), + names.AttrExpression: stringLenBetweenSchema(attrRequired, 1, 4096), }, }, }, @@ -90,8 +90,8 @@ func conditionalFormattingIconSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": hexColorSchema(false), - names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), + "color": hexColorSchema(attrOptional), + names.AttrExpression: stringLenBetweenSchema(attrRequired, 1, 4096), "icon_options": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ConditionalFormattingCustomIconOptions.html Type: schema.TypeList, Required: true, @@ -99,8 +99,8 @@ func conditionalFormattingIconSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "icon": stringEnumSchema[awstypes.Icon](false), - "unicode_icon": stringMatchSchema(false, `^[^\\u0000-\\u00FF]$`, ""), + "icon": stringEnumSchema[awstypes.Icon](attrOptional), + "unicode_icon": stringMatchSchema(attrOptional, `^[^\\u0000-\\u00FF]$`, ""), }, }, }, @@ -111,7 +111,7 @@ func conditionalFormattingIconSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "icon_display_option": stringEnumSchema[awstypes.ConditionalFormattingIconDisplayOption](false)}, + "icon_display_option": stringEnumSchema[awstypes.ConditionalFormattingIconDisplayOption](attrOptional)}, }, }, }, @@ -124,8 +124,8 @@ func conditionalFormattingIconSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), - "icon_set_type": stringEnumSchema[awstypes.ConditionalFormattingIconSetType](false), + names.AttrExpression: stringLenBetweenSchema(attrRequired, 1, 4096), + "icon_set_type": stringEnumSchema[awstypes.ConditionalFormattingIconSetType](attrOptional), }, }, }, diff --git a/internal/service/quicksight/schema/visual_custom_content.go b/internal/service/quicksight/schema/visual_custom_content.go index 36a165c96c4d..d9231f2c54c2 100644 --- a/internal/service/quicksight/schema/visual_custom_content.go +++ b/internal/service/quicksight/schema/visual_custom_content.go @@ -19,7 +19,7 @@ func customContentVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), + "data_set_identifier": stringLenBetweenSchema(attrRequired, 1, 2048), "visual_id": idSchema(), names.AttrActions: visualCustomActionsSchema(customActionsMaxItems), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisualCustomAction.html "chart_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CustomContentConfiguration.html @@ -30,9 +30,9 @@ func customContentVisualSchema() *schema.Schema { DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrContentType: stringEnumSchema[awstypes.CustomContentType](false), - "content_url": stringLenBetweenSchema(false, 1, 2048), - "image_scaling": stringEnumSchema[awstypes.CustomContentImageScalingConfiguration](false), + names.AttrContentType: stringEnumSchema[awstypes.CustomContentType](attrOptional), + "content_url": stringLenBetweenSchema(attrOptional, 1, 2048), + "image_scaling": stringEnumSchema[awstypes.CustomContentImageScalingConfiguration](attrOptional), }, }, }, diff --git a/internal/service/quicksight/schema/visual_empty.go b/internal/service/quicksight/schema/visual_empty.go index 0ce2ee3d7637..fb434c1f9970 100644 --- a/internal/service/quicksight/schema/visual_empty.go +++ b/internal/service/quicksight/schema/visual_empty.go @@ -18,7 +18,7 @@ func emptyVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), + "data_set_identifier": stringLenBetweenSchema(attrRequired, 1, 2048), "visual_id": idSchema(), names.AttrActions: visualCustomActionsSchema(customActionsMaxItems), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisualCustomAction.html }, diff --git a/internal/service/quicksight/schema/visual_fields.go b/internal/service/quicksight/schema/visual_fields.go index 235c4053e641..78cd8399e8e3 100644 --- a/internal/service/quicksight/schema/visual_fields.go +++ b/internal/service/quicksight/schema/visual_fields.go @@ -34,9 +34,9 @@ func dimensionFieldSchema(maxItems int) *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringLenBetweenSchema(true, 1, 512), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), "format_configuration": stringFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_StringFormatConfiguration.html - "hierarchy_id": stringLenBetweenSchema(false, 1, 512), + "hierarchy_id": stringLenBetweenSchema(attrOptional, 1, 512), }, }, }, @@ -48,10 +48,10 @@ func dimensionFieldSchema(maxItems int) *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringLenBetweenSchema(true, 1, 512), - "date_granularity": stringEnumSchema[awstypes.TimeGranularity](false), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), + "date_granularity": stringEnumSchema[awstypes.TimeGranularity](attrOptional), "format_configuration": dateTimeFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimeFormatConfiguration.html - "hierarchy_id": stringLenBetweenSchema(false, 1, 512), + "hierarchy_id": stringLenBetweenSchema(attrOptional, 1, 512), }, }, }, @@ -63,9 +63,9 @@ func dimensionFieldSchema(maxItems int) *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringLenBetweenSchema(true, 1, 512), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), "format_configuration": numberFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumberFormatConfiguration.html - "hierarchy_id": stringLenBetweenSchema(false, 1, 512), + "hierarchy_id": stringLenBetweenSchema(attrOptional, 1, 512), }, }, }, @@ -89,8 +89,8 @@ func measureFieldSchema(maxItems int) *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrExpression: stringLenBetweenSchema(true, 1, 4096), - "field_id": stringLenBetweenSchema(true, 1, 512), + names.AttrExpression: stringLenBetweenSchema(attrRequired, 1, 4096), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), }, }, }, @@ -102,8 +102,8 @@ func measureFieldSchema(maxItems int) *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringLenBetweenSchema(true, 1, 512), - "aggregation_function": stringEnumSchema[awstypes.CategoricalAggregationFunction](false), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), + "aggregation_function": stringEnumSchema[awstypes.CategoricalAggregationFunction](attrOptional), "format_configuration": stringFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_StringFormatConfiguration.html }, }, @@ -116,8 +116,8 @@ func measureFieldSchema(maxItems int) *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringLenBetweenSchema(true, 1, 512), - "aggregation_function": stringEnumSchema[awstypes.DateAggregationFunction](false), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), + "aggregation_function": stringEnumSchema[awstypes.DateAggregationFunction](attrOptional), "format_configuration": dateTimeFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimeFormatConfiguration.html }, }, @@ -130,7 +130,7 @@ func measureFieldSchema(maxItems int) *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringLenBetweenSchema(true, 1, 512), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), "aggregation_function": numericalAggregationFunctionSchema(false), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericalAggregationFunction.html "format_configuration": numberFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumberFormatConfiguration.html }, diff --git a/internal/service/quicksight/schema/visual_filled_map.go b/internal/service/quicksight/schema/visual_filled_map.go index ea9b7931bdb3..0e9009bd2475 100644 --- a/internal/service/quicksight/schema/visual_filled_map.go +++ b/internal/service/quicksight/schema/visual_filled_map.go @@ -91,7 +91,7 @@ func filledMapVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringLenBetweenSchema(true, 1, 512), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), names.AttrFormat: { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ShapeConditionalFormat.html Type: schema.TypeList, Optional: true, diff --git a/internal/service/quicksight/schema/visual_funnel_chart.go b/internal/service/quicksight/schema/visual_funnel_chart.go index 224656358863..50114ddf58e2 100644 --- a/internal/service/quicksight/schema/visual_funnel_chart.go +++ b/internal/service/quicksight/schema/visual_funnel_chart.go @@ -36,13 +36,13 @@ func funnelChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "category_label_visibility": stringEnumSchema[awstypes.Visibility](false), - "label_color": hexColorSchema(false), + "category_label_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), + "label_color": hexColorSchema(attrOptional), "label_font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html - "measure_data_label_style": stringEnumSchema[awstypes.FunnelChartMeasureDataLabelStyle](false), - "measure_label_visibility": stringEnumSchema[awstypes.Visibility](false), - "position": stringEnumSchema[awstypes.DataLabelPosition](false), - "visibility": stringEnumSchema[awstypes.Visibility](false), + "measure_data_label_style": stringEnumSchema[awstypes.FunnelChartMeasureDataLabelStyle](attrOptional), + "measure_label_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), + "position": stringEnumSchema[awstypes.DataLabelPosition](attrOptional), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, diff --git a/internal/service/quicksight/schema/visual_gauge_chart.go b/internal/service/quicksight/schema/visual_gauge_chart.go index 1af562edc968..4c7449f92bd0 100644 --- a/internal/service/quicksight/schema/visual_gauge_chart.go +++ b/internal/service/quicksight/schema/visual_gauge_chart.go @@ -58,7 +58,7 @@ func gaugeChartVisualSchema() *schema.Schema { Type: schema.TypeFloat, Optional: true, }, - "arc_thickness": stringEnumSchema[awstypes.ArcThicknessOptions](false), + "arc_thickness": stringEnumSchema[awstypes.ArcThicknessOptions](attrOptional), }, }, }, @@ -95,7 +95,7 @@ func gaugeChartVisualSchema() *schema.Schema { }, }, "comparison": comparisonConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ComparisonConfiguration.html - "primary_value_display_type": stringEnumSchema[awstypes.PrimaryValueDisplayType](false), + "primary_value_display_type": stringEnumSchema[awstypes.PrimaryValueDisplayType](attrOptional), "primary_value_font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html }, }, diff --git a/internal/service/quicksight/schema/visual_geospatial_map.go b/internal/service/quicksight/schema/visual_geospatial_map.go index 34a12762a637..f9f60b4be7b5 100644 --- a/internal/service/quicksight/schema/visual_geospatial_map.go +++ b/internal/service/quicksight/schema/visual_geospatial_map.go @@ -80,7 +80,7 @@ func geospatialMapVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": hexColorSchema(false), + "color": hexColorSchema(attrOptional), }, }, }, @@ -90,7 +90,7 @@ func geospatialMapVisualSchema() *schema.Schema { }, }, }, - "selected_point_style": stringEnumSchema[awstypes.GeospatialSelectedPointStyle](false), + "selected_point_style": stringEnumSchema[awstypes.GeospatialSelectedPointStyle](attrOptional), }, }, }, diff --git a/internal/service/quicksight/schema/visual_histogram.go b/internal/service/quicksight/schema/visual_histogram.go index 0767f024d497..c82040637466 100644 --- a/internal/service/quicksight/schema/visual_histogram.go +++ b/internal/service/quicksight/schema/visual_histogram.go @@ -70,7 +70,7 @@ func histogramVisualSchema() *schema.Schema { }, }, }, - "selected_bin_type": stringEnumSchema[awstypes.HistogramBinType](false), + "selected_bin_type": stringEnumSchema[awstypes.HistogramBinType](attrOptional), "start_value": { Type: schema.TypeFloat, Optional: true, diff --git a/internal/service/quicksight/schema/visual_insight.go b/internal/service/quicksight/schema/visual_insight.go index 95cc0dbec101..78be5fd38e99 100644 --- a/internal/service/quicksight/schema/visual_insight.go +++ b/internal/service/quicksight/schema/visual_insight.go @@ -19,7 +19,7 @@ func insightVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "data_set_identifier": stringLenBetweenSchema(true, 1, 2048), + "data_set_identifier": stringLenBetweenSchema(attrRequired, 1, 2048), "visual_id": idSchema(), names.AttrActions: visualCustomActionsSchema(customActionsMaxItems), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisualCustomAction.html "insight_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_InsightConfiguration.html @@ -57,7 +57,7 @@ func insightVisualSchema() *schema.Schema { "periods_backward": intSchema(false, validation.IntBetween(0, 1000)), "periods_forward": intSchema(false, validation.IntBetween(1, 1000)), "prediction_interval": intSchema(false, validation.IntBetween(50, 95)), - "seasonality": stringEnumSchema[awstypes.ForecastComputationSeasonality](true), + "seasonality": stringEnumSchema[awstypes.ForecastComputationSeasonality](attrRequired), "upper_boundary": { Type: schema.TypeFloat, Optional: true, @@ -93,7 +93,7 @@ func insightVisualSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "computation_id": idSchema(), "time": dimensionFieldSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DimensionField.html - names.AttrType: stringEnumSchema[awstypes.MaximumMinimumComputationType](true), + names.AttrType: stringEnumSchema[awstypes.MaximumMinimumComputationType](attrRequired), names.AttrName: { Type: schema.TypeString, Optional: true, @@ -150,7 +150,7 @@ func insightVisualSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "period_time_granularity": stringEnumSchema[awstypes.TimeGranularity](true), + "period_time_granularity": stringEnumSchema[awstypes.TimeGranularity](attrRequired), names.AttrValue: measureFieldSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_MeasureField.html }, }, @@ -165,9 +165,9 @@ func insightVisualSchema() *schema.Schema { "computation_id": idSchema(), "category": dimensionFieldSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DimensionField.html "time": dimensionFieldSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DimensionField.html - names.AttrType: stringEnumSchema[awstypes.TopBottomComputationType](true), + names.AttrType: stringEnumSchema[awstypes.TopBottomComputationType](attrRequired), "mover_size": intSchema(false, validation.IntBetween(1, 20)), - "sort_order": stringEnumSchema[awstypes.TopBottomSortOrder](true), + "sort_order": stringEnumSchema[awstypes.TopBottomSortOrder](attrRequired), names.AttrName: { Type: schema.TypeString, Optional: true, @@ -190,7 +190,7 @@ func insightVisualSchema() *schema.Schema { Optional: true, }, "result_size": intSchema(false, validation.IntBetween(1, 20)), - names.AttrType: stringEnumSchema[awstypes.TopBottomComputationType](true), + names.AttrType: stringEnumSchema[awstypes.TopBottomComputationType](attrRequired), names.AttrValue: measureFieldSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_MeasureField.html }, }, @@ -237,7 +237,7 @@ func insightVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "narrative": stringLenBetweenSchema(true, 1, 150000), + "narrative": stringLenBetweenSchema(attrRequired, 1, 150000), }, }, }, diff --git a/internal/service/quicksight/schema/visual_kpi.go b/internal/service/quicksight/schema/visual_kpi.go index 40016a4535fb..8cb17ad25458 100644 --- a/internal/service/quicksight/schema/visual_kpi.go +++ b/internal/service/quicksight/schema/visual_kpi.go @@ -49,7 +49,7 @@ func kpiVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "comparison": comparisonConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ComparisonConfiguration.html - "primary_value_display_type": stringEnumSchema[awstypes.PrimaryValueDisplayType](false), + "primary_value_display_type": stringEnumSchema[awstypes.PrimaryValueDisplayType](attrOptional), "primary_value_font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html "progress_bar": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ProgressBarOptions.html Type: schema.TypeList, @@ -58,7 +58,7 @@ func kpiVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -69,7 +69,7 @@ func kpiVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -81,10 +81,10 @@ func kpiVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": hexColorSchema(false), - "tooltip_visibility": stringEnumSchema[awstypes.Visibility](false), - names.AttrType: stringEnumSchema[awstypes.KPISparklineType](true), - "visibility": stringEnumSchema[awstypes.Visibility](false), + "color": hexColorSchema(attrOptional), + "tooltip_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), + names.AttrType: stringEnumSchema[awstypes.KPISparklineType](attrRequired), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -95,7 +95,7 @@ func kpiVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -113,7 +113,7 @@ func kpiVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrType: stringEnumSchema[awstypes.KPIVisualStandardLayoutType](true), + names.AttrType: stringEnumSchema[awstypes.KPIVisualStandardLayoutType](attrRequired), }, }, }, diff --git a/internal/service/quicksight/schema/visual_line_chart.go b/internal/service/quicksight/schema/visual_line_chart.go index fae41cde6185..f654b1ee714b 100644 --- a/internal/service/quicksight/schema/visual_line_chart.go +++ b/internal/service/quicksight/schema/visual_line_chart.go @@ -10,7 +10,6 @@ import ( awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -41,7 +40,7 @@ func lineChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "axis_binding": stringEnumSchema[awstypes.AxisBinding](false), + "axis_binding": stringEnumSchema[awstypes.AxisBinding](attrOptional), "line_style_settings": lineChartLineStyleSettingsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LineChartLineStyleSettings.html "marker_style_settings": lineChartMarkerStyleSettingsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LineChartMarkerStyleSettings.html }, @@ -114,7 +113,7 @@ func lineChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "date": stringSchema(true, verify.ValidUTCTimestamp), + "date": utcTimestampStringSchema(attrRequired), names.AttrValue: { Type: schema.TypeFloat, Required: true, @@ -129,8 +128,8 @@ func lineChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "end_date": stringSchema(true, verify.ValidUTCTimestamp), - "start_date": stringSchema(true, verify.ValidUTCTimestamp), + "end_date": utcTimestampStringSchema(attrRequired), + "start_date": utcTimestampStringSchema(attrRequired), names.AttrValue: { Type: schema.TypeFloat, Required: true, @@ -160,7 +159,7 @@ func lineChartVisualSchema() *schema.Schema { MaxItems: 100, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "treatment_option": stringEnumSchema[awstypes.MissingDataTreatmentOption](false), + "treatment_option": stringEnumSchema[awstypes.MissingDataTreatmentOption](attrOptional), }, }, }, @@ -184,7 +183,7 @@ func lineChartVisualSchema() *schema.Schema { MaxItems: 100, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "treatment_option": stringEnumSchema[awstypes.MissingDataTreatmentOption](false), + "treatment_option": stringEnumSchema[awstypes.MissingDataTreatmentOption](attrOptional), }, }, }, @@ -206,8 +205,8 @@ func lineChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "axis_binding": stringEnumSchema[awstypes.AxisBinding](true), - "field_id": stringLenBetweenSchema(true, 1, 512), + "axis_binding": stringEnumSchema[awstypes.AxisBinding](attrRequired), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), "field_value": { Type: schema.TypeString, Optional: true, @@ -234,8 +233,8 @@ func lineChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "axis_binding": stringEnumSchema[awstypes.AxisBinding](true), - "field_id": stringLenBetweenSchema(true, 1, 512), + "axis_binding": stringEnumSchema[awstypes.AxisBinding](attrRequired), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), "settings": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LineChartSeriesSettings.html Type: schema.TypeList, Optional: true, @@ -272,7 +271,7 @@ func lineChartVisualSchema() *schema.Schema { }, }, "tooltip": tooltipOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TooltipOptions.html - names.AttrType: stringOptionalComputedSchema(enum.Validate[awstypes.LineChartType]()), + names.AttrType: stringEnumSchema[awstypes.LineChartType](attrOptionalComputed), "visual_palette": visualPaletteSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisualPalette.html "x_axis_display_options": axisDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AxisDisplayOptions.html "x_axis_label_options": chartAxisLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html @@ -295,9 +294,9 @@ func lineChartLineStyleSettingsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "line_interpolation": stringEnumSchema[awstypes.LineInterpolation](false), - "line_style": stringEnumSchema[awstypes.LineChartLineStyle](false), - "line_visibility": stringEnumSchema[awstypes.Visibility](false), + "line_interpolation": stringEnumSchema[awstypes.LineInterpolation](attrOptional), + "line_style": stringEnumSchema[awstypes.LineChartLineStyle](attrOptional), + "line_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), "line_width": { Type: schema.TypeString, Optional: true, @@ -315,13 +314,13 @@ func lineChartMarkerStyleSettingsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "marker_color": hexColorSchema(false), - "marker_shape": stringEnumSchema[awstypes.LineChartMarkerShape](false), + "marker_color": hexColorSchema(attrOptional), + "marker_shape": stringEnumSchema[awstypes.LineChartMarkerShape](attrOptional), "marker_size": { Type: schema.TypeString, Optional: true, }, - "marker_visibility": stringEnumSchema[awstypes.Visibility](false), + "marker_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, } diff --git a/internal/service/quicksight/schema/visual_map.go b/internal/service/quicksight/schema/visual_map.go index ef7b942a2167..b1ea066b68c8 100644 --- a/internal/service/quicksight/schema/visual_map.go +++ b/internal/service/quicksight/schema/visual_map.go @@ -18,7 +18,7 @@ func geospatialMapStyleOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "base_map_style": stringEnumSchema[awstypes.BaseMapStyleType](false), + "base_map_style": stringEnumSchema[awstypes.BaseMapStyleType](attrOptional), }, }, } @@ -62,7 +62,7 @@ func geospatialWindowOptionsSchema() *schema.Schema { }, }, }, - "map_zoom_mode": stringEnumSchema[awstypes.MapZoomMode](false), + "map_zoom_mode": stringEnumSchema[awstypes.MapZoomMode](attrOptional), }, }, } diff --git a/internal/service/quicksight/schema/visual_pie_chart.go b/internal/service/quicksight/schema/visual_pie_chart.go index c83ee550bcf1..1d4fcb0f05ad 100644 --- a/internal/service/quicksight/schema/visual_pie_chart.go +++ b/internal/service/quicksight/schema/visual_pie_chart.go @@ -45,7 +45,7 @@ func pieChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "arc_thickness": stringEnumSchema[awstypes.ArcThicknessOptions](false), + "arc_thickness": stringEnumSchema[awstypes.ArcThicknessOptions](attrOptional), }, }, }, @@ -56,7 +56,7 @@ func pieChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "label_visibility": stringEnumSchema[awstypes.Visibility](false), + "label_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, diff --git a/internal/service/quicksight/schema/visual_pivot_table.go b/internal/service/quicksight/schema/visual_pivot_table.go index 4f3db8bf5e10..e4e018bc213c 100644 --- a/internal/service/quicksight/schema/visual_pivot_table.go +++ b/internal/service/quicksight/schema/visual_pivot_table.go @@ -52,8 +52,8 @@ func pivotTableVisualSchema() *schema.Schema { MaxItems: 20, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringLenBetweenSchema(true, 1, 512), - "field_value": stringLenBetweenSchema(true, 1, 2048), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), + "field_value": stringLenBetweenSchema(attrRequired, 1, 2048), }, }, }, @@ -71,9 +71,9 @@ func pivotTableVisualSchema() *schema.Schema { MaxItems: 100, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringLenBetweenSchema(true, 1, 512), - "custom_label": stringLenBetweenSchema(false, 1, 2048), - "visibility": stringEnumSchema[awstypes.Visibility](false), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), + "custom_label": stringLenBetweenSchema(attrOptional, 1, 2048), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -110,8 +110,8 @@ func pivotTableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "overflow_column_header_visibility": stringEnumSchema[awstypes.Visibility](false), - "vertical_overflow_visibility": stringEnumSchema[awstypes.Visibility](false), + "overflow_column_header_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), + "vertical_overflow_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -130,7 +130,7 @@ func pivotTableVisualSchema() *schema.Schema { MaxItems: 200, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringLenBetweenSchema(true, 1, 512), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), "sort_by": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PivotTableSortBy.html Type: schema.TypeList, Required: true, @@ -146,7 +146,7 @@ func pivotTableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "direction": stringEnumSchema[awstypes.SortDirection](true), + "direction": stringEnumSchema[awstypes.SortDirection](attrRequired), "sort_paths": dataPathValueSchema(dataPathValueMaxItems), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataPathValue.html }, }, @@ -169,15 +169,15 @@ func pivotTableVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "collapsed_row_dimensions_visibility": stringEnumSchema[awstypes.Visibility](false), + "collapsed_row_dimensions_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), "column_header_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "column_names_visibility": stringEnumSchema[awstypes.Visibility](false), - "metric_placement": stringEnumSchema[awstypes.PivotTableMetricPlacement](false), + "column_names_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), + "metric_placement": stringEnumSchema[awstypes.PivotTableMetricPlacement](attrOptional), "row_alternate_color_options": rowAlternateColorOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RowAlternateColorOptions.html "row_field_names_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html "row_header_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "single_metric_visibility": stringEnumSchema[awstypes.Visibility](false), - "toggle_buttons_visibility": stringEnumSchema[awstypes.Visibility](false), + "single_metric_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), + "toggle_buttons_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -219,7 +219,7 @@ func pivotTableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringLenBetweenSchema(true, 1, 512), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), names.AttrScope: { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PivotTableConditionalFormattingScope.html Type: schema.TypeList, Optional: true, @@ -227,7 +227,7 @@ func pivotTableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - names.AttrRole: stringEnumSchema[awstypes.PivotTableConditionalFormattingScopeRole](false), + names.AttrRole: stringEnumSchema[awstypes.PivotTableConditionalFormattingScopeRole](attrOptional), }, }, }, @@ -256,8 +256,8 @@ func tableBorderOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "color": hexColorSchema(false), - "style": stringEnumSchema[awstypes.TableBorderStyle](false), + "color": hexColorSchema(attrOptional), + "style": stringEnumSchema[awstypes.TableBorderStyle](attrOptional), "thickness": intSchema(false, validation.IntBetween(1, 4)), }, }, @@ -272,7 +272,7 @@ func tableCellStyleSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "background_color": hexColorSchema(false), + "background_color": hexColorSchema(attrOptional), "border": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GlobalTableBorderOptions.html Type: schema.TypeList, Optional: true, @@ -302,10 +302,10 @@ func tableCellStyleSchema() *schema.Schema { }, "font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html "height": intSchema(false, validation.IntBetween(8, 500)), - "horizontal_text_alignment": stringEnumSchema[awstypes.HorizontalTextAlignment](false), - "text_wrap": stringEnumSchema[awstypes.TextWrap](false), - "vertical_text_alignment": stringEnumSchema[awstypes.VerticalTextAlignment](false), - "visibility": stringEnumSchema[awstypes.Visibility](false), + "horizontal_text_alignment": stringEnumSchema[awstypes.HorizontalTextAlignment](attrOptional), + "text_wrap": stringEnumSchema[awstypes.TextWrap](attrOptional), + "vertical_text_alignment": stringEnumSchema[awstypes.VerticalTextAlignment](attrOptional), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, } @@ -323,7 +323,7 @@ func subtotalOptionsSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "field_level": stringEnumSchema[awstypes.PivotTableSubtotalLevel](false), + "field_level": stringEnumSchema[awstypes.PivotTableSubtotalLevel](attrOptional), "field_level_options": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PivotTableFieldSubtotalOptions.html Type: schema.TypeList, Optional: true, @@ -331,13 +331,13 @@ func subtotalOptionsSchema() *schema.Schema { MaxItems: 100, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringLenBetweenSchema(false, 1, 512), + "field_id": stringLenBetweenSchema(attrOptional, 1, 512), }, }, }, "metric_header_cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html "total_cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "totals_visibility": stringEnumSchema[awstypes.Visibility](false), + "totals_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), "value_cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html }, }, @@ -357,10 +357,10 @@ func pivotTotalOptionsSchema() *schema.Schema { Optional: true, }, "metric_header_cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "placement": stringEnumSchema[awstypes.TableTotalsPlacement](false), - "scroll_status": stringEnumSchema[awstypes.TableTotalsScrollStatus](false), + "placement": stringEnumSchema[awstypes.TableTotalsPlacement](attrOptional), + "scroll_status": stringEnumSchema[awstypes.TableTotalsScrollStatus](attrOptional), "total_cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "totals_visibility": stringEnumSchema[awstypes.Visibility](false), + "totals_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), "value_cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html }, }, @@ -382,7 +382,7 @@ func rowAlternateColorOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.StringMatch(regexache.MustCompile(`^#[0-9A-F]{6}$`), "")}, }, - names.AttrStatus: stringEnumSchema[awstypes.Status](false), + names.AttrStatus: stringEnumSchema[awstypes.Status](attrOptional), }, }, } diff --git a/internal/service/quicksight/schema/visual_radar_chart.go b/internal/service/quicksight/schema/visual_radar_chart.go index 829d5dbc3cb6..28d64417fe5f 100644 --- a/internal/service/quicksight/schema/visual_radar_chart.go +++ b/internal/service/quicksight/schema/visual_radar_chart.go @@ -29,9 +29,9 @@ func radarChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "alternate_band_colors_visibility": stringEnumSchema[awstypes.Visibility](false), - "alternate_band_even_color": hexColorSchema(false), - "alternate_band_odd_color": hexColorSchema(false), + "alternate_band_colors_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), + "alternate_band_even_color": hexColorSchema(attrOptional), + "alternate_band_odd_color": hexColorSchema(attrOptional), "base_series_settings": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RadarChartSeriesSettings.html Type: schema.TypeList, Optional: true, @@ -46,7 +46,7 @@ func radarChartVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -81,7 +81,7 @@ func radarChartVisualSchema() *schema.Schema { }, }, "legend": legendOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LegendOptions.html - "shape": stringEnumSchema[awstypes.RadarChartShape](false), + "shape": stringEnumSchema[awstypes.RadarChartShape](attrOptional), "sort_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RadarChartSortConfiguration.html Type: schema.TypeList, Optional: true, diff --git a/internal/service/quicksight/schema/visual_sort.go b/internal/service/quicksight/schema/visual_sort.go index 23a6ad956882..69976a123c81 100644 --- a/internal/service/quicksight/schema/visual_sort.go +++ b/internal/service/quicksight/schema/visual_sort.go @@ -34,7 +34,7 @@ func columnSortSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "direction": stringEnumSchema[awstypes.SortDirection](true), + "direction": stringEnumSchema[awstypes.SortDirection](attrRequired), "sort_by": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html "aggregation_function": aggregationFunctionSchema(false), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AggregationFunction.html }, @@ -50,8 +50,8 @@ func fieldSortSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "direction": stringEnumSchema[awstypes.SortDirection](true), - "field_id": stringLenBetweenSchema(true, 1, 512), + "direction": stringEnumSchema[awstypes.SortDirection](attrRequired), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), }, }, } diff --git a/internal/service/quicksight/schema/visual_table.go b/internal/service/quicksight/schema/visual_table.go index 1b675fbad642..73fdee849b4b 100644 --- a/internal/service/quicksight/schema/visual_table.go +++ b/internal/service/quicksight/schema/visual_table.go @@ -51,8 +51,8 @@ func tableVisualSchema() *schema.Schema { MaxItems: 100, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringLenBetweenSchema(true, 1, 512), - "custom_label": stringLenBetweenSchema(false, 1, 2048), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), + "custom_label": stringLenBetweenSchema(attrOptional, 1, 2048), "url_styling": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableFieldURLConfiguration.html Type: schema.TypeList, Optional: true, @@ -74,7 +74,7 @@ func tableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "table_cell_image_scaling_configuration": stringEnumSchema[awstypes.TableCellImageScalingConfiguration](false), + "table_cell_image_scaling_configuration": stringEnumSchema[awstypes.TableCellImageScalingConfiguration](attrOptional), }, }, }, @@ -102,7 +102,7 @@ func tableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "icon": stringEnumSchema[awstypes.TableFieldIconSetType](false), + "icon": stringEnumSchema[awstypes.TableFieldIconSetType](attrOptional), }, }, }, @@ -124,14 +124,14 @@ func tableVisualSchema() *schema.Schema { }, }, }, - names.AttrTarget: stringEnumSchema[awstypes.URLTargetConfiguration](false), + names.AttrTarget: stringEnumSchema[awstypes.URLTargetConfiguration](attrOptional), }, }, }, }, }, }, - "visibility": stringEnumSchema[awstypes.Visibility](false), + "visibility": stringEnumSchema[awstypes.Visibility](attrOptional), "width": { Type: schema.TypeString, Optional: true, @@ -176,7 +176,7 @@ func tableVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringLenBetweenSchema(true, 1, 512), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), "format_configuration": formatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FormatConfiguration.html }, }, @@ -194,8 +194,8 @@ func tableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "overflow_column_header_visibility": stringEnumSchema[awstypes.Visibility](false), - "vertical_overflow_visibility": stringEnumSchema[awstypes.Visibility](false), + "overflow_column_header_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), + "vertical_overflow_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -240,9 +240,9 @@ func tableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringLenBetweenSchema(true, 1, 512), - "negative_color": hexColorSchema(false), - "positive_color": hexColorSchema(false), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), + "negative_color": hexColorSchema(attrOptional), + "positive_color": hexColorSchema(attrOptional), }, }, }, @@ -258,7 +258,7 @@ func tableVisualSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html "header_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "orientation": stringEnumSchema[awstypes.TableOrientation](false), + "orientation": stringEnumSchema[awstypes.TableOrientation](attrOptional), "row_alternate_color_options": rowAlternateColorOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RowAlternateColorOptions.html }, }, @@ -274,10 +274,10 @@ func tableVisualSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "placement": stringEnumSchema[awstypes.TableTotalsPlacement](false), - "scroll_status": stringEnumSchema[awstypes.TableTotalsScrollStatus](false), + "placement": stringEnumSchema[awstypes.TableTotalsPlacement](attrOptional), + "scroll_status": stringEnumSchema[awstypes.TableTotalsScrollStatus](attrOptional), "total_cell_style": tableCellStyleSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html - "totals_visibility": stringEnumSchema[awstypes.Visibility](false), + "totals_visibility": stringEnumSchema[awstypes.Visibility](attrOptional), }, }, }, @@ -305,7 +305,7 @@ func tableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "field_id": stringLenBetweenSchema(true, 1, 512), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), "text_format": textConditionalFormatSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TextConditionalFormat.html }, }, diff --git a/internal/service/quicksight/schema/visual_word_cloud.go b/internal/service/quicksight/schema/visual_word_cloud.go index 9ac446dc9e66..f0534420c5dd 100644 --- a/internal/service/quicksight/schema/visual_word_cloud.go +++ b/internal/service/quicksight/schema/visual_word_cloud.go @@ -72,12 +72,12 @@ func wordCloudVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "cloud_layout": stringEnumSchema[awstypes.WordCloudCloudLayout](false), + "cloud_layout": stringEnumSchema[awstypes.WordCloudCloudLayout](attrOptional), "maximum_string_length": intSchema(false, validation.IntBetween(1, 100)), - "word_casing": stringEnumSchema[awstypes.WordCloudWordCasing](false), - "word_orientation": stringEnumSchema[awstypes.WordCloudWordOrientation](false), - "word_padding": stringEnumSchema[awstypes.WordCloudWordPadding](false), - "word_scaling": stringEnumSchema[awstypes.WordCloudWordScaling](false), + "word_casing": stringEnumSchema[awstypes.WordCloudWordCasing](attrOptional), + "word_orientation": stringEnumSchema[awstypes.WordCloudWordOrientation](attrOptional), + "word_padding": stringEnumSchema[awstypes.WordCloudWordPadding](attrOptional), + "word_scaling": stringEnumSchema[awstypes.WordCloudWordScaling](attrOptional), }, }, }, From 17ad0365bc2ad09be9cccd412f06c55d54223256 Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Thu, 3 Oct 2024 14:41:03 -0700 Subject: [PATCH 06/12] Caches Int attrs with `IntBetween` and `IntAtLeast` validation --- .ci/semgrep/pluginsdk/quicksight/schema.yml | 34 +++++++++ .../service/quicksight/schema/template.go | 75 +++++++++++++++---- .../quicksight/schema/template_format.go | 7 +- .../quicksight/schema/template_sheet.go | 13 +--- .../schema/visual_chart_configuration.go | 12 +-- .../quicksight/schema/visual_histogram.go | 6 +- .../quicksight/schema/visual_insight.go | 15 ++-- .../quicksight/schema/visual_line_chart.go | 9 +-- .../quicksight/schema/visual_pivot_table.go | 4 +- .../service/quicksight/schema/visual_table.go | 2 +- .../quicksight/schema/visual_word_cloud.go | 3 +- 11 files changed, 114 insertions(+), 66 deletions(-) diff --git a/.ci/semgrep/pluginsdk/quicksight/schema.yml b/.ci/semgrep/pluginsdk/quicksight/schema.yml index 8ab5316f8181..b128887088fb 100644 --- a/.ci/semgrep/pluginsdk/quicksight/schema.yml +++ b/.ci/semgrep/pluginsdk/quicksight/schema.yml @@ -96,3 +96,37 @@ rules: regex: enum\.Validate # Semgrep doesn't seem to recognize the type specification # Cannot be auto-fixed severity: WARNING + + - id: quicksight-schema-int-between-required + languages: [go] + message: Int attributes with between validation should use intBetweenSchema + paths: + include: + - internal/service/quicksight/schema + patterns: + - pattern-inside: "Schema: map[string]*schema.Schema{ ... }" + - pattern: | + { + Type: schema.TypeInt, + Required: true, + ValidateFunc: validation.IntBetween($MIN, $MAX), + } + fix: intBetweenSchema(attrRequired, $MIN, $MAX) + severity: WARNING + + - id: quicksight-schema-int-between-optional + languages: [go] + message: Int attributes with between validation should use intBetweenSchema + paths: + include: + - internal/service/quicksight/schema + patterns: + - pattern-inside: "Schema: map[string]*schema.Schema{ ... }" + - pattern: | + { + Type: schema.TypeInt, + Optional: true, + ValidateFunc: validation.IntBetween($MIN, $MAX), + } + fix: intBetweenSchema(attrOptional, $MIN, $MAX) + severity: WARNING diff --git a/internal/service/quicksight/schema/template.go b/internal/service/quicksight/schema/template.go index ea33dcbfd3df..3dd19b120d7a 100644 --- a/internal/service/quicksight/schema/template.go +++ b/internal/service/quicksight/schema/template.go @@ -300,22 +300,65 @@ func (m *syncMap[K, V]) LoadOrStore(k K, v V) (V, bool) { return a.(V), b } -func intSchema(required bool, validateFunc any) *schema.Schema { - switch v := validateFunc.(type) { - case schema.SchemaValidateDiagFunc: - return &schema.Schema{ - Type: schema.TypeInt, - Required: required, - Optional: !required, - ValidateDiagFunc: v, - } - case schema.SchemaValidateFunc: - return intSchema(required, validation.ToDiagFunc(v)) - case func(interface{}, string) ([]string, []error): - return intSchema(required, schema.SchemaValidateFunc(v)) - default: - panic(fmt.Sprintf("unsupported validateFunc type: %T", v)) //lintignore:R009 +type intBetweenIdentity struct { + handling attrHandling + min, max int +} + +var intBetweenSchemaCache syncMap[intBetweenIdentity, *schema.Schema] + +func intBetweenSchema(handling attrHandling, min, max int) *schema.Schema { + id := intBetweenIdentity{ + handling: handling, + min: min, + max: max, + } + + s, ok := intBetweenSchemaCache.Load(id) + if ok { + return s + } + + // Use a separate `LoadOrStore` to avoid allocation if item is already in the cache + // Use `LoadOrStore` instead of `Store` in case there is a race + s, _ = intBetweenSchemaCache.LoadOrStore( + id, + &schema.Schema{ + Type: schema.TypeString, + Required: handling.isRequired(), + Optional: handling.isOptional(), + Computed: handling.isComputed(), + ValidateFunc: validation.IntBetween(min, max), + }, + ) + return s +} + +func intAtLeastSchema(handling attrHandling, min int) *schema.Schema { + id := intBetweenIdentity{ + handling: handling, + min: min, + max: -1, + } + + s, ok := intBetweenSchemaCache.Load(id) + if ok { + return s } + + // Use a separate `LoadOrStore` to avoid allocation if item is already in the cache + // Use `LoadOrStore` instead of `Store` in case there is a race + s, _ = intBetweenSchemaCache.LoadOrStore( + id, + &schema.Schema{ + Type: schema.TypeString, + Required: handling.isRequired(), + Optional: handling.isOptional(), + Computed: handling.isComputed(), + ValidateFunc: validation.IntAtLeast(min), + }, + ) + return s } func floatSchema(required bool, validateFunc any) *schema.Schema { @@ -388,7 +431,7 @@ func numericalAggregationFunctionSchema(required bool) *schema.Schema { "percentile_value": { Type: schema.TypeFloat, Optional: true, - ValidateFunc: validation.IntBetween(0, 100), + ValidateFunc: validation.FloatBetween(0, 100), }, }, }, diff --git a/internal/service/quicksight/schema/template_format.go b/internal/service/quicksight/schema/template_format.go index d6b387e235b8..bc3653d01c81 100644 --- a/internal/service/quicksight/schema/template_format.go +++ b/internal/service/quicksight/schema/template_format.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -136,11 +135,7 @@ func decimalPlacesConfigurationSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "decimal_places": { - Type: schema.TypeInt, - Required: true, - ValidateFunc: validation.IntBetween(0, 20), - }, + "decimal_places": intBetweenSchema(attrRequired, 0, 20), }, }, } diff --git a/internal/service/quicksight/schema/template_sheet.go b/internal/service/quicksight/schema/template_sheet.go index 025e95b6b89f..a9ab929bcc5c 100644 --- a/internal/service/quicksight/schema/template_sheet.go +++ b/internal/service/quicksight/schema/template_sheet.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/internal/sdkv2/types/nullable" "github.com/hashicorp/terraform-provider-aws/names" @@ -338,18 +337,10 @@ func gridLayoutConfigurationSchema() *schema.Schema { MaxItems: 430, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "column_span": { - Type: schema.TypeInt, - Required: true, - ValidateFunc: validation.IntBetween(1, 36), - }, + "column_span": intBetweenSchema(attrRequired, 1, 36), "element_id": idSchema(), "element_type": stringEnumSchema[awstypes.LayoutElementType](attrRequired), - "row_span": { - Type: schema.TypeInt, - Required: true, - ValidateFunc: validation.IntBetween(1, 21), - }, + "row_span": intBetweenSchema(attrRequired, 1, 21), "column_index": { Type: nullable.TypeNullableInt, Optional: true, diff --git a/internal/service/quicksight/schema/visual_chart_configuration.go b/internal/service/quicksight/schema/visual_chart_configuration.go index f7bbe693bbc4..fea180a6a40b 100644 --- a/internal/service/quicksight/schema/visual_chart_configuration.go +++ b/internal/service/quicksight/schema/visual_chart_configuration.go @@ -383,16 +383,8 @@ func smallMultiplesOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "max_visible_columns": { - Type: schema.TypeInt, - Optional: true, - ValidateFunc: validation.IntBetween(1, 10), - }, - "max_visible_rows": { - Type: schema.TypeInt, - Optional: true, - ValidateFunc: validation.IntBetween(1, 10), - }, + "max_visible_columns": intBetweenSchema(attrOptional, 1, 10), + "max_visible_rows": intBetweenSchema(attrOptional, 1, 10), "panel_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PanelConfiguration.html Type: schema.TypeList, Optional: true, diff --git a/internal/service/quicksight/schema/visual_histogram.go b/internal/service/quicksight/schema/visual_histogram.go index c82040637466..d43c0711c5ba 100644 --- a/internal/service/quicksight/schema/visual_histogram.go +++ b/internal/service/quicksight/schema/visual_histogram.go @@ -57,11 +57,7 @@ func histogramVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "bin_count_limit": { - Type: schema.TypeInt, - Optional: true, - ValidateFunc: validation.IntBetween(0, 1000), - }, + "bin_count_limit": intBetweenSchema(attrOptional, 0, 1000), names.AttrValue: { Type: schema.TypeFloat, Optional: true, diff --git a/internal/service/quicksight/schema/visual_insight.go b/internal/service/quicksight/schema/visual_insight.go index 78be5fd38e99..3ad6eae69415 100644 --- a/internal/service/quicksight/schema/visual_insight.go +++ b/internal/service/quicksight/schema/visual_insight.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -45,7 +44,7 @@ func insightVisualSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "computation_id": idSchema(), "time": dimensionFieldSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DimensionField.html - "custom_seasonality_value": intSchema(false, validation.IntBetween(1, 180)), + "custom_seasonality_value": intBetweenSchema(attrOptional, 1, 180), "lower_boundary": { Type: schema.TypeFloat, Optional: true, @@ -54,9 +53,9 @@ func insightVisualSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "periods_backward": intSchema(false, validation.IntBetween(0, 1000)), - "periods_forward": intSchema(false, validation.IntBetween(1, 1000)), - "prediction_interval": intSchema(false, validation.IntBetween(50, 95)), + "periods_backward": intBetweenSchema(attrOptional, 0, 1000), + "periods_forward": intBetweenSchema(attrOptional, 1, 1000), + "prediction_interval": intBetweenSchema(attrOptional, 50, 95), "seasonality": stringEnumSchema[awstypes.ForecastComputationSeasonality](attrRequired), "upper_boundary": { Type: schema.TypeFloat, @@ -79,7 +78,7 @@ func insightVisualSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "period_size": intSchema(false, validation.IntBetween(2, 52)), + "period_size": intBetweenSchema(attrOptional, 2, 52), names.AttrValue: measureFieldSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_MeasureField.html }, }, @@ -166,7 +165,7 @@ func insightVisualSchema() *schema.Schema { "category": dimensionFieldSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DimensionField.html "time": dimensionFieldSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DimensionField.html names.AttrType: stringEnumSchema[awstypes.TopBottomComputationType](attrRequired), - "mover_size": intSchema(false, validation.IntBetween(1, 20)), + "mover_size": intBetweenSchema(attrOptional, 1, 20), "sort_order": stringEnumSchema[awstypes.TopBottomSortOrder](attrRequired), names.AttrName: { Type: schema.TypeString, @@ -189,7 +188,7 @@ func insightVisualSchema() *schema.Schema { Type: schema.TypeString, Optional: true, }, - "result_size": intSchema(false, validation.IntBetween(1, 20)), + "result_size": intBetweenSchema(attrOptional, 1, 20), names.AttrType: stringEnumSchema[awstypes.TopBottomComputationType](attrRequired), names.AttrValue: measureFieldSchema(1), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_MeasureField.html }, diff --git a/internal/service/quicksight/schema/visual_line_chart.go b/internal/service/quicksight/schema/visual_line_chart.go index f654b1ee714b..67116b76539c 100644 --- a/internal/service/quicksight/schema/visual_line_chart.go +++ b/internal/service/quicksight/schema/visual_line_chart.go @@ -9,7 +9,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -88,10 +87,10 @@ func lineChartVisualSchema() *schema.Schema { Type: schema.TypeFloat, Optional: true, }, - "periods_backward": intSchema(false, validation.IntBetween(0, 1000)), - "periods_forward": intSchema(false, validation.IntBetween(1, 1000)), - "prediction_interval": intSchema(false, validation.IntBetween(50, 95)), - "seasonality": intSchema(false, validation.IntBetween(1, 180)), + "periods_backward": intBetweenSchema(attrOptional, 0, 1000), + "periods_forward": intBetweenSchema(attrOptional, 1, 1000), + "prediction_interval": intBetweenSchema(attrOptional, 50, 95), + "seasonality": intBetweenSchema(attrOptional, 1, 180), "upper_boundary": { Type: schema.TypeFloat, Optional: true, diff --git a/internal/service/quicksight/schema/visual_pivot_table.go b/internal/service/quicksight/schema/visual_pivot_table.go index e4e018bc213c..50d0935a056b 100644 --- a/internal/service/quicksight/schema/visual_pivot_table.go +++ b/internal/service/quicksight/schema/visual_pivot_table.go @@ -258,7 +258,7 @@ func tableBorderOptionsSchema() *schema.Schema { Schema: map[string]*schema.Schema{ "color": hexColorSchema(attrOptional), "style": stringEnumSchema[awstypes.TableBorderStyle](attrOptional), - "thickness": intSchema(false, validation.IntBetween(1, 4)), + "thickness": intBetweenSchema(attrOptional, 1, 4), }, }, } @@ -301,7 +301,7 @@ func tableCellStyleSchema() *schema.Schema { }, }, "font_configuration": fontConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html - "height": intSchema(false, validation.IntBetween(8, 500)), + "height": intBetweenSchema(attrOptional, 8, 500), "horizontal_text_alignment": stringEnumSchema[awstypes.HorizontalTextAlignment](attrOptional), "text_wrap": stringEnumSchema[awstypes.TextWrap](attrOptional), "vertical_text_alignment": stringEnumSchema[awstypes.VerticalTextAlignment](attrOptional), diff --git a/internal/service/quicksight/schema/visual_table.go b/internal/service/quicksight/schema/visual_table.go index 73fdee849b4b..1ae7b5dab7cd 100644 --- a/internal/service/quicksight/schema/visual_table.go +++ b/internal/service/quicksight/schema/visual_table.go @@ -214,7 +214,7 @@ func tableVisualSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "page_number": intSchema(true, validation.IntAtLeast(1)), + "page_number": intAtLeastSchema(attrRequired, 1), "page_size": { Type: schema.TypeInt, Required: true, diff --git a/internal/service/quicksight/schema/visual_word_cloud.go b/internal/service/quicksight/schema/visual_word_cloud.go index f0534420c5dd..4ccea3dd5109 100644 --- a/internal/service/quicksight/schema/visual_word_cloud.go +++ b/internal/service/quicksight/schema/visual_word_cloud.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -73,7 +72,7 @@ func wordCloudVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "cloud_layout": stringEnumSchema[awstypes.WordCloudCloudLayout](attrOptional), - "maximum_string_length": intSchema(false, validation.IntBetween(1, 100)), + "maximum_string_length": intBetweenSchema(attrOptional, 1, 100), "word_casing": stringEnumSchema[awstypes.WordCloudWordCasing](attrOptional), "word_orientation": stringEnumSchema[awstypes.WordCloudWordOrientation](attrOptional), "word_padding": stringEnumSchema[awstypes.WordCloudWordPadding](attrOptional), From e509dc82b64bca8d61ec8d7d9221ba7dc016461b Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Thu, 3 Oct 2024 15:02:59 -0700 Subject: [PATCH 07/12] Caches Float attrs with `FloatBetween` validation --- .ci/semgrep/pluginsdk/quicksight/schema.yml | 34 ++++++++++++ .../service/quicksight/schema/template.go | 53 +++++++++++-------- .../schema/visual_chart_configuration.go | 7 ++- .../service/quicksight/schema/visual_map.go | 25 ++------- .../quicksight/schema/visual_radar_chart.go | 3 +- 5 files changed, 74 insertions(+), 48 deletions(-) diff --git a/.ci/semgrep/pluginsdk/quicksight/schema.yml b/.ci/semgrep/pluginsdk/quicksight/schema.yml index b128887088fb..4cb1c97a78c2 100644 --- a/.ci/semgrep/pluginsdk/quicksight/schema.yml +++ b/.ci/semgrep/pluginsdk/quicksight/schema.yml @@ -130,3 +130,37 @@ rules: } fix: intBetweenSchema(attrOptional, $MIN, $MAX) severity: WARNING + + - id: quicksight-schema-float-between-required + languages: [go] + message: Float attributes with between validation should use floatBetweenSchema + paths: + include: + - internal/service/quicksight/schema + patterns: + - pattern-inside: "Schema: map[string]*schema.Schema{ ... }" + - pattern: | + { + Type: schema.TypeFloat, + Required: true, + ValidateFunc: validation.FloatBetween($MIN, $MAX), + } + fix: floatBetweenSchema(attrRequired, $MIN, $MAX) + severity: WARNING + + - id: quicksight-schema-float-between-optional + languages: [go] + message: Float attributes with between validation should use floatBetweenSchema + paths: + include: + - internal/service/quicksight/schema + patterns: + - pattern-inside: "Schema: map[string]*schema.Schema{ ... }" + - pattern: | + { + Type: schema.TypeFloat, + Optional: true, + ValidateFunc: validation.FloatBetween($MIN, $MAX), + } + fix: floatBetweenSchema(attrOptional, $MIN, $MAX) + severity: WARNING diff --git a/internal/service/quicksight/schema/template.go b/internal/service/quicksight/schema/template.go index 3dd19b120d7a..0a8d3a35d7b5 100644 --- a/internal/service/quicksight/schema/template.go +++ b/internal/service/quicksight/schema/template.go @@ -4,7 +4,6 @@ package schema import ( - "fmt" "reflect" "sync" @@ -361,22 +360,38 @@ func intAtLeastSchema(handling attrHandling, min int) *schema.Schema { return s } -func floatSchema(required bool, validateFunc any) *schema.Schema { - switch v := validateFunc.(type) { - case schema.SchemaValidateDiagFunc: - return &schema.Schema{ - Type: schema.TypeFloat, - Required: required, - Optional: !required, - ValidateDiagFunc: v, - } - case schema.SchemaValidateFunc: - return floatSchema(required, validation.ToDiagFunc(v)) - case func(interface{}, string) ([]string, []error): - return floatSchema(required, schema.SchemaValidateFunc(v)) - default: - panic(fmt.Sprintf("unsupported validateFunc type: %T", v)) //lintignore:R009 +type floatBetweenIdentity struct { + handling attrHandling + min, max float64 +} + +var floatBetweenSchemaCache syncMap[floatBetweenIdentity, *schema.Schema] + +func floatBetweenSchema(handling attrHandling, min, max float64) *schema.Schema { + id := floatBetweenIdentity{ + handling: handling, + min: min, + max: max, + } + + s, ok := floatBetweenSchemaCache.Load(id) + if ok { + return s } + + // Use a separate `LoadOrStore` to avoid allocation if item is already in the cache + // Use `LoadOrStore` instead of `Store` in case there is a race + s, _ = floatBetweenSchemaCache.LoadOrStore( + id, + &schema.Schema{ + Type: schema.TypeString, + Required: handling.isRequired(), + Optional: handling.isOptional(), + Computed: handling.isComputed(), + ValidateFunc: validation.FloatBetween(min, max), + }, + ) + return s } func aggregationFunctionSchema(required bool) *schema.Schema { @@ -428,11 +443,7 @@ func numericalAggregationFunctionSchema(required bool) *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "percentile_value": { - Type: schema.TypeFloat, - Optional: true, - ValidateFunc: validation.FloatBetween(0, 100), - }, + "percentile_value": floatBetweenSchema(attrOptional, 0, 100), }, }, }, diff --git a/internal/service/quicksight/schema/visual_chart_configuration.go b/internal/service/quicksight/schema/visual_chart_configuration.go index fea180a6a40b..465affec4c52 100644 --- a/internal/service/quicksight/schema/visual_chart_configuration.go +++ b/internal/service/quicksight/schema/visual_chart_configuration.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -157,8 +156,8 @@ func axisDisplayOptionsSchema() *schema.Schema { Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "from": floatSchema(false, validation.FloatBetween(0, 100)), - "to": floatSchema(false, validation.FloatBetween(0, 100)), + "from": floatBetweenSchema(attrOptional, 0, 100), + "to": floatBetweenSchema(attrOptional, 0, 100), }, }, }, @@ -384,7 +383,7 @@ func smallMultiplesOptionsSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "max_visible_columns": intBetweenSchema(attrOptional, 1, 10), - "max_visible_rows": intBetweenSchema(attrOptional, 1, 10), + "max_visible_rows": intBetweenSchema(attrOptional, 1, 10), "panel_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PanelConfiguration.html Type: schema.TypeList, Optional: true, diff --git a/internal/service/quicksight/schema/visual_map.go b/internal/service/quicksight/schema/visual_map.go index b1ea066b68c8..ad5887a4639d 100644 --- a/internal/service/quicksight/schema/visual_map.go +++ b/internal/service/quicksight/schema/visual_map.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" ) func geospatialMapStyleOptionsSchema() *schema.Schema { @@ -39,26 +38,10 @@ func geospatialWindowOptionsSchema() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "east": { - Type: schema.TypeFloat, - Required: true, - ValidateFunc: validation.FloatBetween(-1800, 1800), - }, - "north": { - Type: schema.TypeFloat, - Required: true, - ValidateFunc: validation.FloatBetween(-90, 90), - }, - "south": { - Type: schema.TypeFloat, - Required: true, - ValidateFunc: validation.FloatBetween(-90, 90), - }, - "west": { - Type: schema.TypeFloat, - Required: true, - ValidateFunc: validation.FloatBetween(-1800, 1800), - }, + "east": floatBetweenSchema(attrRequired, -1800, 1800), + "north": floatBetweenSchema(attrRequired, -90, 90), + "south": floatBetweenSchema(attrRequired, -90, 90), + "west": floatBetweenSchema(attrRequired, -1800, 1800), }, }, }, diff --git a/internal/service/quicksight/schema/visual_radar_chart.go b/internal/service/quicksight/schema/visual_radar_chart.go index 28d64417fe5f..2cc554532f24 100644 --- a/internal/service/quicksight/schema/visual_radar_chart.go +++ b/internal/service/quicksight/schema/visual_radar_chart.go @@ -7,7 +7,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -97,7 +96,7 @@ func radarChartVisualSchema() *schema.Schema { }, }, }, - "start_angle": floatSchema(false, validation.FloatBetween(-360, 360)), + "start_angle": floatBetweenSchema(attrOptional, -360, 360), "visual_palette": visualPaletteSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisualPalette.html }, }, From 5096e672c670f51e907dd21d19da0c1fe6230dae Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Thu, 3 Oct 2024 15:03:13 -0700 Subject: [PATCH 08/12] Caches `aggregationFunctionSchema` --- .../service/quicksight/schema/template.go | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/internal/service/quicksight/schema/template.go b/internal/service/quicksight/schema/template.go index 0a8d3a35d7b5..491341f3ec4c 100644 --- a/internal/service/quicksight/schema/template.go +++ b/internal/service/quicksight/schema/template.go @@ -394,21 +394,34 @@ func floatBetweenSchema(handling attrHandling, min, max float64) *schema.Schema return s } +var aggregationFunctionSchemaCache syncMap[bool, *schema.Schema] + func aggregationFunctionSchema(required bool) *schema.Schema { - return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AggregationFunction.html - Type: schema.TypeList, - Required: required, - Optional: !required, - MinItems: 1, - MaxItems: 1, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "categorical_aggregation_function": stringEnumSchema[awstypes.CategoricalAggregationFunction](attrOptional), - "date_aggregation_function": stringEnumSchema[awstypes.DateAggregationFunction](attrOptional), - "numerical_aggregation_function": numericalAggregationFunctionSchema(false), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericalAggregationFunction.html + s, ok := aggregationFunctionSchemaCache.Load(required) + if ok { + return s + } + + // Use a separate `LoadOrStore` to avoid allocation if item is already in the cache + // Use `LoadOrStore` instead of `Store` in case there is a race + s, _ = aggregationFunctionSchemaCache.LoadOrStore( + required, + &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AggregationFunction.html + Type: schema.TypeList, + Required: required, + Optional: !required, + MinItems: 1, + MaxItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "categorical_aggregation_function": stringEnumSchema[awstypes.CategoricalAggregationFunction](attrOptional), + "date_aggregation_function": stringEnumSchema[awstypes.DateAggregationFunction](attrOptional), + "numerical_aggregation_function": numericalAggregationFunctionSchema(false), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericalAggregationFunction.html + }, }, }, - } + ) + return s } func calculatedFieldsSchema() *schema.Schema { From 0d2d25197932398f913c160110681221e7c122de Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Thu, 3 Oct 2024 15:14:39 -0700 Subject: [PATCH 09/12] More caching --- .../service/quicksight/schema/template.go | 96 ++++++++++++------- 1 file changed, 61 insertions(+), 35 deletions(-) diff --git a/internal/service/quicksight/schema/template.go b/internal/service/quicksight/schema/template.go index 491341f3ec4c..e3938a9e6b02 100644 --- a/internal/service/quicksight/schema/template.go +++ b/internal/service/quicksight/schema/template.go @@ -424,7 +424,7 @@ func aggregationFunctionSchema(required bool) *schema.Schema { return s } -func calculatedFieldsSchema() *schema.Schema { +var calculatedFieldsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CalculatedField.html Type: schema.TypeSet, MinItems: 1, @@ -438,35 +438,48 @@ func calculatedFieldsSchema() *schema.Schema { }, }, } -} +}) + +var numericalAggregationFunctionSchemaCache syncMap[bool, *schema.Schema] func numericalAggregationFunctionSchema(required bool) *schema.Schema { - return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericalAggregationFunction.html - Type: schema.TypeList, - Required: required, - Optional: !required, - MinItems: 1, - MaxItems: 1, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "percentile_aggregation": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PercentileAggregation.html - Type: schema.TypeList, - Optional: true, - MinItems: 1, - MaxItems: 1, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "percentile_value": floatBetweenSchema(attrOptional, 0, 100), + s, ok := numericalAggregationFunctionSchemaCache.Load(required) + if ok { + return s + } + + // Use a separate `LoadOrStore` to avoid allocation if item is already in the cache + // Use `LoadOrStore` instead of `Store` in case there is a race + s, _ = numericalAggregationFunctionSchemaCache.LoadOrStore( + required, + &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericalAggregationFunction.html + Type: schema.TypeList, + Required: required, + Optional: !required, + MinItems: 1, + MaxItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "percentile_aggregation": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PercentileAggregation.html + Type: schema.TypeList, + Optional: true, + MinItems: 1, + MaxItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "percentile_value": floatBetweenSchema(attrOptional, 0, 100), + }, }, }, + "simple_numerical_aggregation": stringEnumSchema[awstypes.SimpleNumericalAggregationFunction](attrOptional), }, - "simple_numerical_aggregation": stringEnumSchema[awstypes.SimpleNumericalAggregationFunction](attrOptional), }, }, - } + ) + return s } -func idSchema() *schema.Schema { +var idSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ Type: schema.TypeString, Required: true, @@ -475,22 +488,35 @@ func idSchema() *schema.Schema { validation.StringMatch(regexache.MustCompile(`[\w\-]+`), "must contain only alphanumeric, hyphen, and underscore characters"), ), } -} +}) + +var columnSchemaCache syncMap[bool, *schema.Schema] func columnSchema(required bool) *schema.Schema { - return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - Type: schema.TypeList, - MinItems: 1, - MaxItems: 1, - Required: required, - Optional: !required, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "column_name": stringLenBetweenSchema(attrRequired, 1, 128), - "data_set_identifier": stringLenBetweenSchema(attrRequired, 1, 2048), + s, ok := columnSchemaCache.Load(required) + if ok { + return s + } + + // Use a separate `LoadOrStore` to avoid allocation if item is already in the cache + // Use `LoadOrStore` instead of `Store` in case there is a race + s, _ = columnSchemaCache.LoadOrStore( + required, + &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html + Type: schema.TypeList, + MinItems: 1, + MaxItems: 1, + Required: required, + Optional: !required, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "column_name": stringLenBetweenSchema(attrRequired, 1, 128), + "data_set_identifier": stringLenBetweenSchema(attrRequired, 1, 2048), + }, }, }, - } + ) + return s } func dataSetConfigurationSchema() *schema.Schema { @@ -569,7 +595,7 @@ func dataSetConfigurationSchema() *schema.Schema { } } -func rollingDateConfigurationSchema() *schema.Schema { +var rollingDateConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RollingDateConfiguration.html Type: schema.TypeList, MinItems: 1, @@ -582,7 +608,7 @@ func rollingDateConfigurationSchema() *schema.Schema { }, }, } -} +}) func TemplateSourceEntitySchema() *schema.Schema { return &schema.Schema{ From 4be391b9453143625d5c6c731985b59baab0d82f Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Thu, 3 Oct 2024 17:29:49 -0700 Subject: [PATCH 10/12] Caches remaining schemas that are used more than once and don't take a parameter --- .actrc | 1 + .../service/quicksight/schema/template.go | 6 +-- .../quicksight/schema/template_control.go | 36 ++++++------- .../quicksight/schema/template_filter.go | 29 +++++----- .../quicksight/schema/template_format.go | 54 ++++++++++--------- .../quicksight/schema/template_parameter.go | 29 +++++----- .../quicksight/schema/template_sheet.go | 42 ++++++++------- internal/service/quicksight/schema/visual.go | 41 +++++++------- .../quicksight/schema/visual_bar_chart.go | 4 +- .../quicksight/schema/visual_box_plot.go | 8 +-- .../schema/visual_chart_configuration.go | 28 +++++----- .../quicksight/schema/visual_combo_chart.go | 14 ++--- .../schema/visual_conditional_formatting.go | 10 ++-- .../quicksight/schema/visual_line_chart.go | 13 ++--- .../service/quicksight/schema/visual_map.go | 10 ++-- .../quicksight/schema/visual_pivot_table.go | 26 ++++----- .../service/quicksight/schema/visual_sort.go | 10 ++-- 17 files changed, 190 insertions(+), 171 deletions(-) diff --git a/.actrc b/.actrc index 844f384aea3d..b1b9330fe20b 100644 --- a/.actrc +++ b/.actrc @@ -3,4 +3,5 @@ -P ubuntu-latest=ghcr.io/catthehacker/ubuntu:act-22.04 -P linux=ghcr.io/catthehacker/ubuntu:act-22.04 -P custom-linux-medium=ghcr.io/catthehacker/ubuntu:act-22.04 +-P custom-linux-large=ghcr.io/catthehacker/ubuntu:act-22.04 -P custom-linux-xl=ghcr.io/catthehacker/ubuntu:act-22.04 diff --git a/internal/service/quicksight/schema/template.go b/internal/service/quicksight/schema/template.go index e3938a9e6b02..582154f177ba 100644 --- a/internal/service/quicksight/schema/template.go +++ b/internal/service/quicksight/schema/template.go @@ -323,7 +323,7 @@ func intBetweenSchema(handling attrHandling, min, max int) *schema.Schema { s, _ = intBetweenSchemaCache.LoadOrStore( id, &schema.Schema{ - Type: schema.TypeString, + Type: schema.TypeInt, Required: handling.isRequired(), Optional: handling.isOptional(), Computed: handling.isComputed(), @@ -350,7 +350,7 @@ func intAtLeastSchema(handling attrHandling, min int) *schema.Schema { s, _ = intBetweenSchemaCache.LoadOrStore( id, &schema.Schema{ - Type: schema.TypeString, + Type: schema.TypeInt, Required: handling.isRequired(), Optional: handling.isOptional(), Computed: handling.isComputed(), @@ -384,7 +384,7 @@ func floatBetweenSchema(handling attrHandling, min, max float64) *schema.Schema s, _ = floatBetweenSchemaCache.LoadOrStore( id, &schema.Schema{ - Type: schema.TypeString, + Type: schema.TypeFloat, Required: handling.isRequired(), Optional: handling.isOptional(), Computed: handling.isComputed(), diff --git a/internal/service/quicksight/schema/template_control.go b/internal/service/quicksight/schema/template_control.go index 99b1fecbd962..e9eacc77b473 100644 --- a/internal/service/quicksight/schema/template_control.go +++ b/internal/service/quicksight/schema/template_control.go @@ -156,7 +156,7 @@ var filterControlsSchema = sync.OnceValue(func() *schema.Schema { } }) -func textFieldControlDisplayOptionsSchema() *schema.Schema { +var textFieldControlDisplayOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TextFieldControlDisplayOptions.html Type: schema.TypeList, Optional: true, @@ -169,9 +169,9 @@ func textFieldControlDisplayOptionsSchema() *schema.Schema { }, }, } -} +}) -func textAreaControlDisplayOptionsSchema() *schema.Schema { +var textAreaControlDisplayOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TextAreaControlDisplayOptions.html Type: schema.TypeList, Optional: true, @@ -184,9 +184,9 @@ func textAreaControlDisplayOptionsSchema() *schema.Schema { }, }, } -} +}) -func sliderControlDisplayOptionsSchema() *schema.Schema { +var sliderControlDisplayOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SliderControlDisplayOptions.html Type: schema.TypeList, Optional: true, @@ -198,9 +198,9 @@ func sliderControlDisplayOptionsSchema() *schema.Schema { }, }, } -} +}) -func dateTimePickerControlDisplayOptionsSchema() *schema.Schema { +var dateTimePickerControlDisplayOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimePickerControlDisplayOptions.html Type: schema.TypeList, Optional: true, @@ -213,9 +213,9 @@ func dateTimePickerControlDisplayOptionsSchema() *schema.Schema { }, }, } -} +}) -func listControlDisplayOptionsSchema() *schema.Schema { +var listControlDisplayOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ListControlDisplayOptions.html Type: schema.TypeList, Optional: true, @@ -239,9 +239,9 @@ func listControlDisplayOptionsSchema() *schema.Schema { }, }, } -} +}) -func cascadingControlConfigurationSchema() *schema.Schema { +var cascadingControlConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CascadingControlConfiguration.html Type: schema.TypeList, Optional: true, @@ -267,9 +267,9 @@ func cascadingControlConfigurationSchema() *schema.Schema { }, }, } -} +}) -func selectAllOptionsSchema() *schema.Schema { +var selectAllOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ListControlSelectAllOptions.html Type: schema.TypeList, Optional: true, @@ -281,9 +281,9 @@ func selectAllOptionsSchema() *schema.Schema { }, }, } -} +}) -func dropDownControlDisplayOptionsSchema() *schema.Schema { +var dropDownControlDisplayOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DropDownControlDisplayOptions.html Type: schema.TypeList, Optional: true, @@ -296,9 +296,9 @@ func dropDownControlDisplayOptionsSchema() *schema.Schema { }, }, } -} +}) -func placeholderOptionsSchema() *schema.Schema { +var placeholderOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TextControlPlaceholderOptions.html Type: schema.TypeList, Optional: true, @@ -310,7 +310,7 @@ func placeholderOptionsSchema() *schema.Schema { }, }, } -} +}) func expandFilterControl(tfMap map[string]interface{}) *awstypes.FilterControl { if tfMap == nil { diff --git a/internal/service/quicksight/schema/template_filter.go b/internal/service/quicksight/schema/template_filter.go index 9ccab551b6a5..db0e87ffc178 100644 --- a/internal/service/quicksight/schema/template_filter.go +++ b/internal/service/quicksight/schema/template_filter.go @@ -4,6 +4,7 @@ package schema import ( + "sync" "time" "github.com/YakDriver/regexache" @@ -16,7 +17,7 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -func filtersSchema() *schema.Schema { +var filtersSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ Type: schema.TypeList, MinItems: 1, @@ -34,7 +35,7 @@ func filtersSchema() *schema.Schema { }, }, } -} +}) func categoryFilterSchema() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CategoryFilter.html @@ -301,7 +302,7 @@ func topBottomFilterSchema() *schema.Schema { } } -func excludePeriodConfigurationSchema() *schema.Schema { +var excludePeriodConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ExcludePeriodConfiguration.html Type: schema.TypeList, Optional: true, @@ -318,9 +319,9 @@ func excludePeriodConfigurationSchema() *schema.Schema { }, }, } -} +}) -func numericRangeFilterValueSchema() *schema.Schema { +var numericRangeFilterValueSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericRangeFilterValue.html Type: schema.TypeList, Optional: true, @@ -343,9 +344,9 @@ func numericRangeFilterValueSchema() *schema.Schema { }, }, } -} +}) -func timeRangeFilterValueSchema() *schema.Schema { +var timeRangeFilterValueSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TimeRangeFilterValue.html Type: schema.TypeList, Optional: true, @@ -366,9 +367,9 @@ func timeRangeFilterValueSchema() *schema.Schema { }, }, } -} +}) -func drillDownFilterSchema() *schema.Schema { +var drillDownFilterSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DrillDownFilter.html Type: schema.TypeList, Optional: true, @@ -429,9 +430,9 @@ func drillDownFilterSchema() *schema.Schema { }, }, } -} +}) -func filterSelectableValuesSchema() *schema.Schema { +var filterSelectableValuesSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterSelectableValues.html Type: schema.TypeList, Optional: true, @@ -451,9 +452,9 @@ func filterSelectableValuesSchema() *schema.Schema { }, }, } -} +}) -func filterScopeConfigurationSchema() *schema.Schema { +var filterScopeConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FilterScopeConfiguration.html Type: schema.TypeList, MinItems: 1, @@ -493,7 +494,7 @@ func filterScopeConfigurationSchema() *schema.Schema { }, }, } -} +}) func expandFilters(tfList []interface{}) []awstypes.Filter { if len(tfList) == 0 { diff --git a/internal/service/quicksight/schema/template_format.go b/internal/service/quicksight/schema/template_format.go index bc3653d01c81..010cfb66fd8a 100644 --- a/internal/service/quicksight/schema/template_format.go +++ b/internal/service/quicksight/schema/template_format.go @@ -4,13 +4,15 @@ package schema import ( + "sync" + "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-aws/names" ) -func numericFormatConfigurationSchema() *schema.Schema { +var numericFormatConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ Type: schema.TypeList, MinItems: 1, @@ -41,9 +43,9 @@ func numericFormatConfigurationSchema() *schema.Schema { }, }, } -} +}) -func dateTimeFormatConfigurationSchema() *schema.Schema { +var dateTimeFormatConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ Type: schema.TypeList, MinItems: 1, @@ -57,9 +59,9 @@ func dateTimeFormatConfigurationSchema() *schema.Schema { }, }, } -} +}) -func numberDisplayFormatConfigurationSchema() *schema.Schema { +var numberDisplayFormatConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumberDisplayFormatConfiguration.html Type: schema.TypeList, MinItems: 1, @@ -77,9 +79,9 @@ func numberDisplayFormatConfigurationSchema() *schema.Schema { }, }, } -} +}) -func percentageDisplayFormatConfigurationSchema() *schema.Schema { +var percentageDisplayFormatConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PercentageDisplayFormatConfiguration.html Type: schema.TypeList, MinItems: 1, @@ -96,9 +98,9 @@ func percentageDisplayFormatConfigurationSchema() *schema.Schema { }, }, } -} +}) -func numberFormatConfigurationSchema() *schema.Schema { +var numberFormatConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumberFormatConfiguration.html Type: schema.TypeList, MinItems: 1, @@ -110,9 +112,9 @@ func numberFormatConfigurationSchema() *schema.Schema { }, }, } -} +}) -func stringFormatConfigurationSchema() *schema.Schema { +var stringFormatConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ Type: schema.TypeList, MinItems: 1, @@ -125,9 +127,9 @@ func stringFormatConfigurationSchema() *schema.Schema { }, }, } -} +}) -func decimalPlacesConfigurationSchema() *schema.Schema { +var decimalPlacesConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DecimalPlacesConfiguration.html Type: schema.TypeList, MinItems: 1, @@ -139,9 +141,9 @@ func decimalPlacesConfigurationSchema() *schema.Schema { }, }, } -} +}) -func negativeValueConfigurationSchema() *schema.Schema { +var negativeValueConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ Type: schema.TypeList, MinItems: 1, @@ -153,9 +155,9 @@ func negativeValueConfigurationSchema() *schema.Schema { }, }, } -} +}) -func nullValueConfigurationSchema() *schema.Schema { +var nullValueConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ Type: schema.TypeList, MinItems: 1, @@ -167,9 +169,9 @@ func nullValueConfigurationSchema() *schema.Schema { }, }, } -} +}) -func separatorConfigurationSchema() *schema.Schema { +var separatorConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ Type: schema.TypeList, MinItems: 1, @@ -193,9 +195,9 @@ func separatorConfigurationSchema() *schema.Schema { }, }, } -} +}) -func labelOptionsSchema() *schema.Schema { +var labelOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LabelOptions.html Type: schema.TypeList, MinItems: 1, @@ -212,9 +214,9 @@ func labelOptionsSchema() *schema.Schema { }, }, } -} +}) -func fontConfigurationSchema() *schema.Schema { +var fontConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FontConfiguration.html Type: schema.TypeList, MinItems: 1, @@ -248,9 +250,9 @@ func fontConfigurationSchema() *schema.Schema { }, }, } -} +}) -func formatConfigurationSchema() *schema.Schema { +var formatConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FormatConfiguration.html Type: schema.TypeList, MinItems: 1, @@ -264,7 +266,7 @@ func formatConfigurationSchema() *schema.Schema { }, }, } -} +}) func expandFormatConfiguration(tfList []interface{}) *awstypes.FormatConfiguration { if len(tfList) == 0 || tfList[0] == nil { diff --git a/internal/service/quicksight/schema/template_parameter.go b/internal/service/quicksight/schema/template_parameter.go index 94817875d766..c93152d402ce 100644 --- a/internal/service/quicksight/schema/template_parameter.go +++ b/internal/service/quicksight/schema/template_parameter.go @@ -4,6 +4,7 @@ package schema import ( + "sync" "time" "github.com/YakDriver/regexache" @@ -16,7 +17,7 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -func dateTimeParameterDeclarationSchema() *schema.Schema { +var dateTimeParameterDeclarationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimeParameterDeclaration.html Type: schema.TypeList, MinItems: 1, @@ -74,9 +75,9 @@ func dateTimeParameterDeclarationSchema() *schema.Schema { }, }, } -} +}) -func decimalParameterDeclarationSchema() *schema.Schema { +var decimalParameterDeclarationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DecimalParameterDeclaration.html Type: schema.TypeList, MinItems: 1, @@ -131,9 +132,9 @@ func decimalParameterDeclarationSchema() *schema.Schema { }, }, } -} +}) -func integerParameterDeclarationSchema() *schema.Schema { +var integerParameterDeclarationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_IntegerParameterDeclaration.html Type: schema.TypeList, MinItems: 1, @@ -188,9 +189,9 @@ func integerParameterDeclarationSchema() *schema.Schema { }, }, } -} +}) -func stringParameterDeclarationSchema() *schema.Schema { +var stringParameterDeclarationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_StringParameterDeclaration.html Type: schema.TypeList, MinItems: 1, @@ -245,9 +246,9 @@ func stringParameterDeclarationSchema() *schema.Schema { }, }, } -} +}) -func dynamicValueSchema() *schema.Schema { +var dynamicValueSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DynamicDefaultValue.html Type: schema.TypeList, MinItems: 1, @@ -261,9 +262,9 @@ func dynamicValueSchema() *schema.Schema { }, }, } -} +}) -func parameterControlsSchema() *schema.Schema { +var parameterControlsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ParameterControl.html Type: schema.TypeList, Optional: true, @@ -377,9 +378,9 @@ func parameterControlsSchema() *schema.Schema { }, }, } -} +}) -func parameterSelectableValuesSchema() *schema.Schema { +var parameterSelectableValuesSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ParameterSelectableValues.html Type: schema.TypeList, Optional: true, @@ -400,7 +401,7 @@ func parameterSelectableValuesSchema() *schema.Schema { }, }, } -} +}) func parameterNameSchema(required bool) *schema.Schema { return &schema.Schema{ diff --git a/internal/service/quicksight/schema/template_sheet.go b/internal/service/quicksight/schema/template_sheet.go index a9ab929bcc5c..af44cb52e658 100644 --- a/internal/service/quicksight/schema/template_sheet.go +++ b/internal/service/quicksight/schema/template_sheet.go @@ -4,6 +4,8 @@ package schema import ( + "sync" + "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -12,7 +14,7 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -func analysisDefaultSchema() *schema.Schema { +var analysisDefaultSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ Type: schema.TypeList, MaxItems: 1, @@ -35,7 +37,7 @@ func analysisDefaultSchema() *schema.Schema { }, }, } -} +}) func interactiveLayoutConfigurationSchema() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DefaultInteractiveLayoutConfiguration.html @@ -153,7 +155,7 @@ func paginatedLayoutConfigurationSchema() *schema.Schema { } } -func paperCanvasSizeOptionsSchema() *schema.Schema { +var paperCanvasSizeOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ Type: schema.TypeList, Optional: true, @@ -167,9 +169,9 @@ func paperCanvasSizeOptionsSchema() *schema.Schema { }, }, } -} +}) -func sheetControlLayoutsSchema() *schema.Schema { +var sheetControlLayoutsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SheetControlLayout.html Type: schema.TypeList, MinItems: 0, @@ -191,9 +193,9 @@ func sheetControlLayoutsSchema() *schema.Schema { }, }, } -} +}) -func layoutSchema() *schema.Schema { +var layoutSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Layout.html Type: schema.TypeList, Optional: true, @@ -319,9 +321,9 @@ func layoutSchema() *schema.Schema { }, }, } -} +}) -func gridLayoutConfigurationSchema() *schema.Schema { +var gridLayoutConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GridLayoutConfiguration.html Type: schema.TypeList, Optional: true, @@ -382,9 +384,9 @@ func gridLayoutConfigurationSchema() *schema.Schema { }, }, } -} +}) -func headerFooterSectionConfigurationSchema() *schema.Schema { +var headerFooterSectionConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_HeaderFooterSectionConfiguration.html Type: schema.TypeList, Required: true, @@ -398,9 +400,9 @@ func headerFooterSectionConfigurationSchema() *schema.Schema { }, }, } -} +}) -func sectionStyleSchema() *schema.Schema { +var sectionStyleSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SectionStyle.html Type: schema.TypeList, Optional: true, @@ -416,9 +418,9 @@ func sectionStyleSchema() *schema.Schema { }, }, } -} +}) -func freeFormLayoutElementsSchema() *schema.Schema { +var freeFormLayoutElementsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FreeFormLayoutElement.html Type: schema.TypeList, Required: true, @@ -517,9 +519,9 @@ func freeFormLayoutElementsSchema() *schema.Schema { }, }, } -} +}) -func sectionLayoutConfigurationSchema() *schema.Schema { +var sectionLayoutConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SectionLayoutConfiguration.html Type: schema.TypeList, Optional: true, @@ -541,9 +543,9 @@ func sectionLayoutConfigurationSchema() *schema.Schema { }, }, } -} +}) -func spacingSchema() *schema.Schema { +var spacingSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_Spacing.html Type: schema.TypeList, Optional: true, @@ -570,7 +572,7 @@ func spacingSchema() *schema.Schema { }, }, } -} +}) func expandAnalysisDefaults(tfList []interface{}) *awstypes.AnalysisDefaults { if len(tfList) == 0 || tfList[0] == nil { diff --git a/internal/service/quicksight/schema/visual.go b/internal/service/quicksight/schema/visual.go index caced11269e1..87fbec0f7803 100644 --- a/internal/service/quicksight/schema/visual.go +++ b/internal/service/quicksight/schema/visual.go @@ -4,6 +4,7 @@ package schema import ( + "sync" "time" "github.com/aws/aws-sdk-go-v2/aws" @@ -16,7 +17,7 @@ const customActionsMaxItems = 10 const referenceLinesMaxItems = 20 const dataPathValueMaxItems = 20 -func visualsSchema() *schema.Schema { +var visualsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SheetControlLayout.html Type: schema.TypeList, MinItems: 1, @@ -50,9 +51,9 @@ func visualsSchema() *schema.Schema { }, }, } -} +}) -func legendOptionsSchema() *schema.Schema { +var legendOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LegendOptions.html Type: schema.TypeList, Optional: true, @@ -74,9 +75,9 @@ func legendOptionsSchema() *schema.Schema { }, }, } -} +}) -func tooltipOptionsSchema() *schema.Schema { +var tooltipOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TooltipOptions.html Type: schema.TypeList, Optional: true, @@ -144,9 +145,9 @@ func tooltipOptionsSchema() *schema.Schema { }, }, } -} +}) -func visualPaletteSchema() *schema.Schema { +var visualPaletteSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisualPalette.html Type: schema.TypeList, Optional: true, @@ -171,7 +172,7 @@ func visualPaletteSchema() *schema.Schema { }, }, } -} +}) func dataPathValueSchema(maxItems int) *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataPathValue.html @@ -188,7 +189,7 @@ func dataPathValueSchema(maxItems int) *schema.Schema { } } -func columnHierarchiesSchema() *schema.Schema { +var columnHierarchiesSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnHierarchy.html Type: schema.TypeList, Optional: true, @@ -259,9 +260,9 @@ func columnHierarchiesSchema() *schema.Schema { }, }, } -} +}) -func visualSubtitleLabelOptionsSchema() *schema.Schema { +var visualSubtitleLabelOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisualSubtitleLabelOptions.html Type: schema.TypeList, Optional: true, @@ -275,7 +276,7 @@ func visualSubtitleLabelOptionsSchema() *schema.Schema { }, }, } -} +}) func longFormatTextSchema() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LongFormatText.html @@ -307,7 +308,7 @@ func shortFormatTextSchema() *schema.Schema { } } -func visualTitleLabelOptionsSchema() *schema.Schema { +var visualTitleLabelOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_VisualTitleLabelOptions.html Type: schema.TypeList, Optional: true, @@ -321,9 +322,9 @@ func visualTitleLabelOptionsSchema() *schema.Schema { }, }, } -} +}) -func comparisonConfigurationSchema() *schema.Schema { +var comparisonConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ComparisonConfiguration.html Type: schema.TypeList, Optional: true, @@ -347,9 +348,9 @@ func comparisonConfigurationSchema() *schema.Schema { }, }, } -} +}) -func colorScaleSchema() *schema.Schema { +var colorScaleSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColorScale.html Type: schema.TypeList, Optional: true, @@ -391,9 +392,9 @@ func colorScaleSchema() *schema.Schema { }, }, } -} +}) -func dataLabelOptionsSchema() *schema.Schema { +var dataLabelOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataLabelOptions.html Type: schema.TypeList, MinItems: 1, @@ -480,7 +481,7 @@ func dataLabelOptionsSchema() *schema.Schema { }, }, } -} +}) func hexColorSchema(handling attrHandling) *schema.Schema { return stringMatchSchema(handling, `^#[0-9A-F]{6}$`, "") diff --git a/internal/service/quicksight/schema/visual_bar_chart.go b/internal/service/quicksight/schema/visual_bar_chart.go index 65428bda6cea..90fc7a389ab2 100644 --- a/internal/service/quicksight/schema/visual_bar_chart.go +++ b/internal/service/quicksight/schema/visual_bar_chart.go @@ -60,8 +60,8 @@ func barCharVisualSchema() *schema.Schema { }, "legend": legendOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LegendOptions.html "orientation": stringEnumSchema[awstypes.BarChartOrientation](attrOptionalComputed), - "reference_lines": referenceLineSchema(referenceLinesMaxItems), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLine.html - "small_multiples_options": smallMultiplesOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SmallMultiplesOptions.html + "reference_lines": referenceLineSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLine.html + "small_multiples_options": smallMultiplesOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SmallMultiplesOptions.html "sort_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_BarChartSortConfiguration.html Type: schema.TypeList, Optional: true, diff --git a/internal/service/quicksight/schema/visual_box_plot.go b/internal/service/quicksight/schema/visual_box_plot.go index 100dedac2cc5..e0e50f52f999 100644 --- a/internal/service/quicksight/schema/visual_box_plot.go +++ b/internal/service/quicksight/schema/visual_box_plot.go @@ -76,10 +76,10 @@ func boxPlotVisualSchema() *schema.Schema { }, }, }, - "legend": legendOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LegendOptions.html - "primary_y_axis_display_options": axisDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AxisDisplayOptions.html - "primary_y_axis_label_options": chartAxisLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html - "reference_lines": referenceLineSchema(referenceLinesMaxItems), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLine.html + "legend": legendOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LegendOptions.html + "primary_y_axis_display_options": axisDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AxisDisplayOptions.html + "primary_y_axis_label_options": chartAxisLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html + "reference_lines": referenceLineSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLine.html "sort_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_BoxPlotSortConfiguration.html Type: schema.TypeList, Optional: true, diff --git a/internal/service/quicksight/schema/visual_chart_configuration.go b/internal/service/quicksight/schema/visual_chart_configuration.go index 465affec4c52..aa659574e512 100644 --- a/internal/service/quicksight/schema/visual_chart_configuration.go +++ b/internal/service/quicksight/schema/visual_chart_configuration.go @@ -4,13 +4,15 @@ package schema import ( + "sync" + "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-aws/names" ) -func axisDisplayOptionsSchema() *schema.Schema { +var axisDisplayOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AxisDisplayOptions.html Type: schema.TypeList, MinItems: 1, @@ -185,9 +187,9 @@ func axisDisplayOptionsSchema() *schema.Schema { }, }, } -} +}) -func chartAxisLabelOptionsSchema() *schema.Schema { +var chartAxisLabelOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html Type: schema.TypeList, MinItems: 1, @@ -227,9 +229,9 @@ func chartAxisLabelOptionsSchema() *schema.Schema { }, }, } -} +}) -func itemsLimitConfigurationSchema() *schema.Schema { +var itemsLimitConfigurationSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html Type: schema.TypeList, Optional: true, @@ -245,9 +247,9 @@ func itemsLimitConfigurationSchema() *schema.Schema { }, }, } -} +}) -func contributionAnalysisDefaultsSchema() *schema.Schema { +var contributionAnalysisDefaultsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ContributionAnalysisDefault.html Type: schema.TypeList, MinItems: 1, @@ -271,14 +273,14 @@ func contributionAnalysisDefaultsSchema() *schema.Schema { }, }, } -} +}) -func referenceLineSchema(maxItems int) *schema.Schema { +var referenceLineSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLine.html Type: schema.TypeList, Optional: true, MinItems: 1, - MaxItems: maxItems, + MaxItems: referenceLinesMaxItems, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "data_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLineDataConfiguration.html @@ -372,9 +374,9 @@ func referenceLineSchema(maxItems int) *schema.Schema { }, }, } -} +}) -func smallMultiplesOptionsSchema() *schema.Schema { +var smallMultiplesOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SmallMultiplesOptions.html Type: schema.TypeList, Optional: true, @@ -424,7 +426,7 @@ func smallMultiplesOptionsSchema() *schema.Schema { }, }, } -} +}) func expandAxisDisplayOptions(tfList []interface{}) *awstypes.AxisDisplayOptions { if len(tfList) == 0 || tfList[0] == nil { diff --git a/internal/service/quicksight/schema/visual_combo_chart.go b/internal/service/quicksight/schema/visual_combo_chart.go index f21384090944..333dbfd84e74 100644 --- a/internal/service/quicksight/schema/visual_combo_chart.go +++ b/internal/service/quicksight/schema/visual_combo_chart.go @@ -57,13 +57,13 @@ func comboChartVisualSchema() *schema.Schema { }, }, }, - "legend": legendOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LegendOptions.html - "line_data_labels": dataLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataLabelOptions.html - "primary_y_axis_display_options": axisDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AxisDisplayOptions.html - "primary_y_axis_label_options": chartAxisLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html - "reference_lines": referenceLineSchema(referenceLinesMaxItems), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLine.html - "secondary_y_axis_display_options": axisDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AxisDisplayOptions.html - "secondary_y_axis_label_options": chartAxisLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html + "legend": legendOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LegendOptions.html + "line_data_labels": dataLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataLabelOptions.html + "primary_y_axis_display_options": axisDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AxisDisplayOptions.html + "primary_y_axis_label_options": chartAxisLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html + "reference_lines": referenceLineSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLine.html + "secondary_y_axis_display_options": axisDisplayOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_AxisDisplayOptions.html + "secondary_y_axis_label_options": chartAxisLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html "sort_configuration": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ComboChartSortConfiguration.html Type: schema.TypeList, Optional: true, diff --git a/internal/service/quicksight/schema/visual_conditional_formatting.go b/internal/service/quicksight/schema/visual_conditional_formatting.go index 0ac6ab760060..9a3688410f68 100644 --- a/internal/service/quicksight/schema/visual_conditional_formatting.go +++ b/internal/service/quicksight/schema/visual_conditional_formatting.go @@ -4,13 +4,15 @@ package schema import ( + "sync" + "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-aws/names" ) -func conditionalFormattingColorSchema() *schema.Schema { +var conditionalFormattingColorSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ConditionalFormattingColor.html Type: schema.TypeList, Required: true, @@ -73,9 +75,9 @@ func conditionalFormattingColorSchema() *schema.Schema { }, }, } -} +}) -func conditionalFormattingIconSchema() *schema.Schema { +var conditionalFormattingIconSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ConditionalFormattingIcon.html Type: schema.TypeList, Optional: true, @@ -132,7 +134,7 @@ func conditionalFormattingIconSchema() *schema.Schema { }, }, } -} +}) func expandConditionalFormattingColor(tfList []interface{}) *awstypes.ConditionalFormattingColor { if len(tfList) == 0 || tfList[0] == nil { diff --git a/internal/service/quicksight/schema/visual_line_chart.go b/internal/service/quicksight/schema/visual_line_chart.go index 67116b76539c..17bd69619dd2 100644 --- a/internal/service/quicksight/schema/visual_line_chart.go +++ b/internal/service/quicksight/schema/visual_line_chart.go @@ -4,6 +4,7 @@ package schema import ( + "sync" "time" "github.com/aws/aws-sdk-go-v2/aws" @@ -165,8 +166,8 @@ func lineChartVisualSchema() *schema.Schema { }, }, }, - "primary_y_axis_label_options": chartAxisLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html - "reference_lines": referenceLineSchema(referenceLinesMaxItems), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLine.html + "primary_y_axis_label_options": chartAxisLabelOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ChartAxisLabelOptions.html + "reference_lines": referenceLineSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ReferenceLine.html "secondary_y_axis_display_options": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LineSeriesAxisDisplayOptions.html Type: schema.TypeList, Optional: true, @@ -285,7 +286,7 @@ func lineChartVisualSchema() *schema.Schema { } } -func lineChartLineStyleSettingsSchema() *schema.Schema { +var lineChartLineStyleSettingsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LineChartLineStyleSettings.html Type: schema.TypeList, Optional: true, @@ -303,9 +304,9 @@ func lineChartLineStyleSettingsSchema() *schema.Schema { }, }, } -} +}) -func lineChartMarkerStyleSettingsSchema() *schema.Schema { +var lineChartMarkerStyleSettingsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_LineChartMarkerStyleSettings.html Type: schema.TypeList, Optional: true, @@ -323,7 +324,7 @@ func lineChartMarkerStyleSettingsSchema() *schema.Schema { }, }, } -} +}) func expandLineChartVisual(tfList []interface{}) *awstypes.LineChartVisual { if len(tfList) == 0 || tfList[0] == nil { diff --git a/internal/service/quicksight/schema/visual_map.go b/internal/service/quicksight/schema/visual_map.go index ad5887a4639d..46505c4a5771 100644 --- a/internal/service/quicksight/schema/visual_map.go +++ b/internal/service/quicksight/schema/visual_map.go @@ -4,12 +4,14 @@ package schema import ( + "sync" + "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func geospatialMapStyleOptionsSchema() *schema.Schema { +var geospatialMapStyleOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GeospatialMapStyleOptions.html Type: schema.TypeList, Optional: true, @@ -21,9 +23,9 @@ func geospatialMapStyleOptionsSchema() *schema.Schema { }, }, } -} +}) -func geospatialWindowOptionsSchema() *schema.Schema { +var geospatialWindowOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GeospatialWindowOptions.html Type: schema.TypeList, Optional: true, @@ -49,7 +51,7 @@ func geospatialWindowOptionsSchema() *schema.Schema { }, }, } -} +}) func expandGeospatialMapStyleOptions(tfList []interface{}) *awstypes.GeospatialMapStyleOptions { if len(tfList) == 0 || tfList[0] == nil { diff --git a/internal/service/quicksight/schema/visual_pivot_table.go b/internal/service/quicksight/schema/visual_pivot_table.go index 50d0935a056b..1d0db32346f3 100644 --- a/internal/service/quicksight/schema/visual_pivot_table.go +++ b/internal/service/quicksight/schema/visual_pivot_table.go @@ -4,6 +4,8 @@ package schema import ( + "sync" + "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" @@ -248,7 +250,7 @@ func pivotTableVisualSchema() *schema.Schema { } } -func tableBorderOptionsSchema() *schema.Schema { +var tableBorderOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableBorderOptions.html Type: schema.TypeList, Required: true, @@ -262,9 +264,9 @@ func tableBorderOptionsSchema() *schema.Schema { }, }, } -} +}) -func tableCellStyleSchema() *schema.Schema { +var tableCellStyleSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TableCellStyle.html Type: schema.TypeList, Optional: true, @@ -309,9 +311,9 @@ func tableCellStyleSchema() *schema.Schema { }, }, } -} +}) -func subtotalOptionsSchema() *schema.Schema { +var subtotalOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_SubtotalOptions.html Type: schema.TypeList, Optional: true, @@ -342,9 +344,9 @@ func subtotalOptionsSchema() *schema.Schema { }, }, } -} +}) -func pivotTotalOptionsSchema() *schema.Schema { +var pivotTotalOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PivotTotalOptions.html Type: schema.TypeList, Optional: true, @@ -365,9 +367,9 @@ func pivotTotalOptionsSchema() *schema.Schema { }, }, } -} +}) -func rowAlternateColorOptionsSchema() *schema.Schema { +var rowAlternateColorOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RowAlternateColorOptions.html Type: schema.TypeList, Optional: true, @@ -386,9 +388,9 @@ func rowAlternateColorOptionsSchema() *schema.Schema { }, }, } -} +}) -func textConditionalFormatSchema() *schema.Schema { +var textConditionalFormatSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_TextConditionalFormat.html Type: schema.TypeList, Optional: true, @@ -402,7 +404,7 @@ func textConditionalFormatSchema() *schema.Schema { }, }, } -} +}) func expandPivotTableVisual(tfList []interface{}) *awstypes.PivotTableVisual { if len(tfList) == 0 || tfList[0] == nil { diff --git a/internal/service/quicksight/schema/visual_sort.go b/internal/service/quicksight/schema/visual_sort.go index 69976a123c81..813f6f0010ff 100644 --- a/internal/service/quicksight/schema/visual_sort.go +++ b/internal/service/quicksight/schema/visual_sort.go @@ -4,6 +4,8 @@ package schema import ( + "sync" + "github.com/aws/aws-sdk-go-v2/aws" awstypes "github.com/aws/aws-sdk-go-v2/service/quicksight/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -26,7 +28,7 @@ func fieldSortOptionsSchema(maxItems int) *schema.Schema { } } -func columnSortSchema() *schema.Schema { +var columnSortSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnSort.html Type: schema.TypeList, Optional: true, @@ -40,9 +42,9 @@ func columnSortSchema() *schema.Schema { }, }, } -} +}) -func fieldSortSchema() *schema.Schema { +var fieldSortSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSort.html Type: schema.TypeList, Optional: true, @@ -55,7 +57,7 @@ func fieldSortSchema() *schema.Schema { }, }, } -} +}) func expandFieldSortOptionsList(tfList []interface{}) []awstypes.FieldSortOptions { if len(tfList) == 0 { From 65192c4242c8c995a72d58c35bf924f37d3dc547 Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Wed, 9 Oct 2024 14:05:57 -0700 Subject: [PATCH 11/12] Caches more schema elements --- internal/service/quicksight/ingestion_test.go | 1 + .../quicksight/schema/visual_bar_chart.go | 12 +- .../quicksight/schema/visual_box_plot.go | 4 +- .../quicksight/schema/visual_combo_chart.go | 8 +- .../quicksight/schema/visual_fields.go | 257 ++++++++++-------- .../quicksight/schema/visual_filled_map.go | 2 +- .../quicksight/schema/visual_funnel_chart.go | 4 +- .../quicksight/schema/visual_heat_map.go | 8 +- .../service/quicksight/schema/visual_kpi.go | 2 +- .../quicksight/schema/visual_line_chart.go | 10 +- .../quicksight/schema/visual_pie_chart.go | 8 +- .../quicksight/schema/visual_radar_chart.go | 8 +- .../schema/visual_sankey_diagram.go | 6 +- .../service/quicksight/schema/visual_sort.go | 6 +- .../service/quicksight/schema/visual_table.go | 2 +- .../quicksight/schema/visual_tree_map.go | 2 +- .../quicksight/schema/visual_waterfall.go | 4 +- .../quicksight/schema/visual_word_cloud.go | 4 +- 18 files changed, 196 insertions(+), 152 deletions(-) diff --git a/internal/service/quicksight/ingestion_test.go b/internal/service/quicksight/ingestion_test.go index e5765f0c0cbe..09fb5a16d8f9 100644 --- a/internal/service/quicksight/ingestion_test.go +++ b/internal/service/quicksight/ingestion_test.go @@ -49,6 +49,7 @@ func TestAccQuickSightIngestion_basic(t *testing.T) { ImportState: true, ImportStateVerify: true, ImportStateVerifyIgnore: []string{ + "ingestion_status", "ingestion_type", }, }, diff --git a/internal/service/quicksight/schema/visual_bar_chart.go b/internal/service/quicksight/schema/visual_bar_chart.go index 90fc7a389ab2..f95831248330 100644 --- a/internal/service/quicksight/schema/visual_bar_chart.go +++ b/internal/service/quicksight/schema/visual_bar_chart.go @@ -70,12 +70,12 @@ func barCharVisualSchema() *schema.Schema { DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "category_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "category_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, - "color_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "color_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html - "small_multiples_limit_configuration": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "small_multiples_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html + "category_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "category_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, + "color_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "color_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html + "small_multiples_limit_configuration": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "small_multiples_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html }, }, }, diff --git a/internal/service/quicksight/schema/visual_box_plot.go b/internal/service/quicksight/schema/visual_box_plot.go index e0e50f52f999..84202c89459e 100644 --- a/internal/service/quicksight/schema/visual_box_plot.go +++ b/internal/service/quicksight/schema/visual_box_plot.go @@ -88,8 +88,8 @@ func boxPlotVisualSchema() *schema.Schema { DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "category_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, - "pagination_configuration": paginationConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PaginationConfiguration.html + "category_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, + "pagination_configuration": paginationConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_PaginationConfiguration.html }, }, }, diff --git a/internal/service/quicksight/schema/visual_combo_chart.go b/internal/service/quicksight/schema/visual_combo_chart.go index 333dbfd84e74..24f38ca55f3e 100644 --- a/internal/service/quicksight/schema/visual_combo_chart.go +++ b/internal/service/quicksight/schema/visual_combo_chart.go @@ -72,10 +72,10 @@ func comboChartVisualSchema() *schema.Schema { DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "category_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "category_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, - "color_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "color_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html + "category_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "category_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, + "color_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "color_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html }, }, }, diff --git a/internal/service/quicksight/schema/visual_fields.go b/internal/service/quicksight/schema/visual_fields.go index 78cd8399e8e3..def231c4a4fa 100644 --- a/internal/service/quicksight/schema/visual_fields.go +++ b/internal/service/quicksight/schema/visual_fields.go @@ -10,135 +10,178 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -const measureFieldsMaxItems5 = 5 -const measureFieldsMaxItems20 = 20 -const measureFieldsMaxItems40 = 40 -const measureFieldsMaxItems200 = 200 -const dimensionsFieldMaxItems10 = 10 -const dimensionsFieldMaxItems40 = 40 -const dimensionsFieldMaxItems200 = 200 - -func dimensionFieldSchema(maxItems int) *schema.Schema { - return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DimensionField.html - Type: schema.TypeList, - MinItems: 1, - MaxItems: maxItems, - Optional: true, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "categorical_dimension_field": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CategoricalDimensionField.html - Type: schema.TypeList, - MinItems: 1, - MaxItems: 1, - Optional: true, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringLenBetweenSchema(attrRequired, 1, 512), - "format_configuration": stringFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_StringFormatConfiguration.html - "hierarchy_id": stringLenBetweenSchema(attrOptional, 1, 512), +type measureFieldsSize int + +const ( + measureFieldsMaxItems5 measureFieldsSize = 5 + measureFieldsMaxItems20 measureFieldsSize = 20 + measureFieldsMaxItems40 measureFieldsSize = 40 + measureFieldsMaxItems200 measureFieldsSize = 200 +) + +type dimensionFieldSize int + +const ( + dimensionsFieldMaxItems10 dimensionFieldSize = 10 + dimensionsFieldMaxItems40 dimensionFieldSize = 40 + dimensionsFieldMaxItems200 dimensionFieldSize = 200 +) + +type dimensionFieldSchemaIdentity dimensionFieldSize + +var dimensionFieldSchemaCache syncMap[dimensionFieldSchemaIdentity, *schema.Schema] + +func dimensionFieldSchema(maxItems dimensionFieldSize) *schema.Schema { + id := dimensionFieldSchemaIdentity(maxItems) + + s, ok := dimensionFieldSchemaCache.Load(id) + if ok { + return s + } + + // Use a separate `LoadOrStore` to avoid allocation if item is already in the cache + // Use `LoadOrStore` instead of `Store` in case there is a race + s, _ = dimensionFieldSchemaCache.LoadOrStore( + id, + &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DimensionField.html + Type: schema.TypeList, + MinItems: 1, + MaxItems: int(maxItems), + Optional: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "categorical_dimension_field": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CategoricalDimensionField.html + Type: schema.TypeList, + MinItems: 1, + MaxItems: 1, + Optional: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), + "format_configuration": stringFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_StringFormatConfiguration.html + "hierarchy_id": stringLenBetweenSchema(attrOptional, 1, 512), + }, }, }, - }, - "date_dimension_field": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateDimensionField.html - Type: schema.TypeList, - MinItems: 1, - MaxItems: 1, - Optional: true, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringLenBetweenSchema(attrRequired, 1, 512), - "date_granularity": stringEnumSchema[awstypes.TimeGranularity](attrOptional), - "format_configuration": dateTimeFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimeFormatConfiguration.html - "hierarchy_id": stringLenBetweenSchema(attrOptional, 1, 512), + "date_dimension_field": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateDimensionField.html + Type: schema.TypeList, + MinItems: 1, + MaxItems: 1, + Optional: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), + "date_granularity": stringEnumSchema[awstypes.TimeGranularity](attrOptional), + "format_configuration": dateTimeFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimeFormatConfiguration.html + "hierarchy_id": stringLenBetweenSchema(attrOptional, 1, 512), + }, }, }, - }, - "numerical_dimension_field": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericalDimensionField.html - Type: schema.TypeList, - MinItems: 1, - MaxItems: 1, - Optional: true, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringLenBetweenSchema(attrRequired, 1, 512), - "format_configuration": numberFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumberFormatConfiguration.html - "hierarchy_id": stringLenBetweenSchema(attrOptional, 1, 512), + "numerical_dimension_field": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericalDimensionField.html + Type: schema.TypeList, + MinItems: 1, + MaxItems: 1, + Optional: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), + "format_configuration": numberFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumberFormatConfiguration.html + "hierarchy_id": stringLenBetweenSchema(attrOptional, 1, 512), + }, }, }, }, }, }, - } + ) + return s } -func measureFieldSchema(maxItems int) *schema.Schema { - return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_MeasureField.html - Type: schema.TypeList, - MinItems: 1, - MaxItems: maxItems, - Optional: true, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "calculated_measure_field": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CalculatedMeasureField.html - Type: schema.TypeList, - MinItems: 1, - MaxItems: 1, - Optional: true, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - names.AttrExpression: stringLenBetweenSchema(attrRequired, 1, 4096), - "field_id": stringLenBetweenSchema(attrRequired, 1, 512), +type meaureFieldSchemaIdentity measureFieldsSize + +var measureFieldSchemaCache syncMap[meaureFieldSchemaIdentity, *schema.Schema] + +func measureFieldSchema(maxItems measureFieldsSize) *schema.Schema { + id := meaureFieldSchemaIdentity(maxItems) + + s, ok := measureFieldSchemaCache.Load(id) + if ok { + return s + } + + // Use a separate `LoadOrStore` to avoid allocation if item is already in the cache + // Use `LoadOrStore` instead of `Store` in case there is a race + s, _ = measureFieldSchemaCache.LoadOrStore( + id, + &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_MeasureField.html + Type: schema.TypeList, + MinItems: 1, + MaxItems: int(maxItems), + Optional: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "calculated_measure_field": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CalculatedMeasureField.html + Type: schema.TypeList, + MinItems: 1, + MaxItems: 1, + Optional: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + names.AttrExpression: stringLenBetweenSchema(attrRequired, 1, 4096), + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), + }, }, }, - }, - "categorical_measure_field": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CategoricalMeasureField.html - Type: schema.TypeList, - MinItems: 1, - MaxItems: 1, - Optional: true, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringLenBetweenSchema(attrRequired, 1, 512), - "aggregation_function": stringEnumSchema[awstypes.CategoricalAggregationFunction](attrOptional), - "format_configuration": stringFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_StringFormatConfiguration.html + "categorical_measure_field": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CategoricalMeasureField.html + Type: schema.TypeList, + MinItems: 1, + MaxItems: 1, + Optional: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), + "aggregation_function": stringEnumSchema[awstypes.CategoricalAggregationFunction](attrOptional), + "format_configuration": stringFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_StringFormatConfiguration.html + }, }, }, - }, - "date_measure_field": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateMeasureField.html - Type: schema.TypeList, - MinItems: 1, - MaxItems: 1, - Optional: true, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringLenBetweenSchema(attrRequired, 1, 512), - "aggregation_function": stringEnumSchema[awstypes.DateAggregationFunction](attrOptional), - "format_configuration": dateTimeFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimeFormatConfiguration.html + "date_measure_field": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateMeasureField.html + Type: schema.TypeList, + MinItems: 1, + MaxItems: 1, + Optional: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), + "aggregation_function": stringEnumSchema[awstypes.DateAggregationFunction](attrOptional), + "format_configuration": dateTimeFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DateTimeFormatConfiguration.html + }, }, }, - }, - "numerical_measure_field": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericalMeasureField.html - Type: schema.TypeList, - MinItems: 1, - MaxItems: 1, - Optional: true, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html - "field_id": stringLenBetweenSchema(attrRequired, 1, 512), - "aggregation_function": numericalAggregationFunctionSchema(false), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericalAggregationFunction.html - "format_configuration": numberFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumberFormatConfiguration.html + "numerical_measure_field": { // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericalMeasureField.html + Type: schema.TypeList, + MinItems: 1, + MaxItems: 1, + Optional: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "column": columnSchema(true), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnIdentifier.html + "field_id": stringLenBetweenSchema(attrRequired, 1, 512), + "aggregation_function": numericalAggregationFunctionSchema(false), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumericalAggregationFunction.html + "format_configuration": numberFormatConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_NumberFormatConfiguration.html + }, }, }, }, }, }, - } + ) + return s } func expandDimensionFields(tfList []interface{}) []awstypes.DimensionField { diff --git a/internal/service/quicksight/schema/visual_filled_map.go b/internal/service/quicksight/schema/visual_filled_map.go index 0e9009bd2475..0f53fbc04b81 100644 --- a/internal/service/quicksight/schema/visual_filled_map.go +++ b/internal/service/quicksight/schema/visual_filled_map.go @@ -60,7 +60,7 @@ func filledMapVisualSchema() *schema.Schema { DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "category_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, + "category_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, }, }, }, diff --git a/internal/service/quicksight/schema/visual_funnel_chart.go b/internal/service/quicksight/schema/visual_funnel_chart.go index 50114ddf58e2..3e1d04403382 100644 --- a/internal/service/quicksight/schema/visual_funnel_chart.go +++ b/internal/service/quicksight/schema/visual_funnel_chart.go @@ -76,8 +76,8 @@ func funnelChartVisualSchema() *schema.Schema { DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "category_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "category_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, + "category_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "category_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, }, }, }, diff --git a/internal/service/quicksight/schema/visual_heat_map.go b/internal/service/quicksight/schema/visual_heat_map.go index 7234b76c8997..e28e122c54ec 100644 --- a/internal/service/quicksight/schema/visual_heat_map.go +++ b/internal/service/quicksight/schema/visual_heat_map.go @@ -64,10 +64,10 @@ func heatMapVisualSchema() *schema.Schema { DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "heat_map_column_items_limit_configuration": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "heat_map_column_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, - "heat_map_row_items_limit_configuration": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "heat_map_row_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html + "heat_map_column_items_limit_configuration": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "heat_map_column_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, + "heat_map_row_items_limit_configuration": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "heat_map_row_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html }, }, }, diff --git a/internal/service/quicksight/schema/visual_kpi.go b/internal/service/quicksight/schema/visual_kpi.go index 8cb17ad25458..662fecc7c965 100644 --- a/internal/service/quicksight/schema/visual_kpi.go +++ b/internal/service/quicksight/schema/visual_kpi.go @@ -131,7 +131,7 @@ func kpiVisualSchema() *schema.Schema { DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "trend_group_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, + "trend_group_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, }, }, }, diff --git a/internal/service/quicksight/schema/visual_line_chart.go b/internal/service/quicksight/schema/visual_line_chart.go index 17bd69619dd2..37c343659488 100644 --- a/internal/service/quicksight/schema/visual_line_chart.go +++ b/internal/service/quicksight/schema/visual_line_chart.go @@ -262,11 +262,11 @@ func lineChartVisualSchema() *schema.Schema { DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "category_items_limit_configuration": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "category_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, - "color_items_limit_configuration": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "small_multiples_limit_configuration": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "small_multiples_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html + "category_items_limit_configuration": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "category_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, + "color_items_limit_configuration": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "small_multiples_limit_configuration": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "small_multiples_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html }, }, }, diff --git a/internal/service/quicksight/schema/visual_pie_chart.go b/internal/service/quicksight/schema/visual_pie_chart.go index 1d4fcb0f05ad..62c5c4bf61df 100644 --- a/internal/service/quicksight/schema/visual_pie_chart.go +++ b/internal/service/quicksight/schema/visual_pie_chart.go @@ -96,10 +96,10 @@ func pieChartVisualSchema() *schema.Schema { DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "category_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "category_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, - "small_multiples_limit_configuration": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "small_multiples_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html + "category_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "category_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, + "small_multiples_limit_configuration": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "small_multiples_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html }, }, }, diff --git a/internal/service/quicksight/schema/visual_radar_chart.go b/internal/service/quicksight/schema/visual_radar_chart.go index 2cc554532f24..19dfed233964 100644 --- a/internal/service/quicksight/schema/visual_radar_chart.go +++ b/internal/service/quicksight/schema/visual_radar_chart.go @@ -89,10 +89,10 @@ func radarChartVisualSchema() *schema.Schema { DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "category_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "category_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, - "color_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "color_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html + "category_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "category_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html, + "color_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "color_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html }, }, }, diff --git a/internal/service/quicksight/schema/visual_sankey_diagram.go b/internal/service/quicksight/schema/visual_sankey_diagram.go index 56d1e2ccdc32..43b03f8e3f2b 100644 --- a/internal/service/quicksight/schema/visual_sankey_diagram.go +++ b/internal/service/quicksight/schema/visual_sankey_diagram.go @@ -60,9 +60,9 @@ func sankeyDiagramVisualSchema() *schema.Schema { DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "destination_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "source_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "weight_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html + "destination_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "source_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "weight_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html }, }, }, diff --git a/internal/service/quicksight/schema/visual_sort.go b/internal/service/quicksight/schema/visual_sort.go index 813f6f0010ff..c412931721fa 100644 --- a/internal/service/quicksight/schema/visual_sort.go +++ b/internal/service/quicksight/schema/visual_sort.go @@ -13,12 +13,12 @@ import ( const fieldSortOptionsMaxItems100 = 100 -func fieldSortOptionsSchema(maxItems int) *schema.Schema { +var fieldSortOptionsSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html Type: schema.TypeList, Optional: true, MinItems: 1, - MaxItems: maxItems, + MaxItems: fieldSortOptionsMaxItems100, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "column_sort": columnSortSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnSort.html @@ -26,7 +26,7 @@ func fieldSortOptionsSchema(maxItems int) *schema.Schema { }, }, } -} +}) var columnSortSchema = sync.OnceValue(func() *schema.Schema { return &schema.Schema{ // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ColumnSort.html diff --git a/internal/service/quicksight/schema/visual_table.go b/internal/service/quicksight/schema/visual_table.go index 1ae7b5dab7cd..a019ae3cd590 100644 --- a/internal/service/quicksight/schema/visual_table.go +++ b/internal/service/quicksight/schema/visual_table.go @@ -222,7 +222,7 @@ func tableVisualSchema() *schema.Schema { }, }, }, - "row_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html + "row_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html }, }, }, diff --git a/internal/service/quicksight/schema/visual_tree_map.go b/internal/service/quicksight/schema/visual_tree_map.go index 95e27c1a5b5f..cbe19741333e 100644 --- a/internal/service/quicksight/schema/visual_tree_map.go +++ b/internal/service/quicksight/schema/visual_tree_map.go @@ -66,7 +66,7 @@ func treeMapVisualSchema() *schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "tree_map_group_items_limit_configuration": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "tree_map_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html + "tree_map_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html }, }, }, diff --git a/internal/service/quicksight/schema/visual_waterfall.go b/internal/service/quicksight/schema/visual_waterfall.go index 14ed00b037ca..1d4a004afa77 100644 --- a/internal/service/quicksight/schema/visual_waterfall.go +++ b/internal/service/quicksight/schema/visual_waterfall.go @@ -65,8 +65,8 @@ func waterfallVisualSchema() *schema.Schema { DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "breakdown_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "category_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html + "breakdown_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "category_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html }, }, }, diff --git a/internal/service/quicksight/schema/visual_word_cloud.go b/internal/service/quicksight/schema/visual_word_cloud.go index 4ccea3dd5109..1d021eea0593 100644 --- a/internal/service/quicksight/schema/visual_word_cloud.go +++ b/internal/service/quicksight/schema/visual_word_cloud.go @@ -59,8 +59,8 @@ func wordCloudVisualSchema() *schema.Schema { DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "category_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html - "category_sort": fieldSortOptionsSchema(fieldSortOptionsMaxItems100), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html + "category_items_limit": itemsLimitConfigurationSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ItemsLimitConfiguration.html + "category_sort": fieldSortOptionsSchema(), // https://docs.aws.amazon.com/quicksight/latest/APIReference/API_FieldSortOptions.html }, }, }, From 78db232d04312a6664c75ce957adc85519eb5bae Mon Sep 17 00:00:00 2001 From: Graham Davison Date: Wed, 9 Oct 2024 17:39:25 -0700 Subject: [PATCH 12/12] Updates `golangci` configuration --- .ci/.golangci2.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.ci/.golangci2.yml b/.ci/.golangci2.yml index 0e068b962891..e1a55fb206fc 100644 --- a/.ci/.golangci2.yml +++ b/.ci/.golangci2.yml @@ -79,6 +79,8 @@ linters-settings: - schema.DefaultTimeout - validation.* # QuickSight schema + - floatBetweenSchema + - intBetweenSchema - stringLenBetweenSchema # Terraform Plugin Framework - int32validator.*