// Code generated by generators/servicetags/main.go; DO NOT EDIT.

package keyvaluetags

import (
	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/service/acm"
	"github.com/aws/aws-sdk-go/service/acmpca"
	"github.com/aws/aws-sdk-go/service/appmesh"
	"github.com/aws/aws-sdk-go/service/athena"
	"github.com/aws/aws-sdk-go/service/cloud9"
	"github.com/aws/aws-sdk-go/service/cloudformation"
	"github.com/aws/aws-sdk-go/service/cloudfront"
	"github.com/aws/aws-sdk-go/service/cloudhsmv2"
	"github.com/aws/aws-sdk-go/service/cloudtrail"
	"github.com/aws/aws-sdk-go/service/cloudwatch"
	"github.com/aws/aws-sdk-go/service/cloudwatchevents"
	"github.com/aws/aws-sdk-go/service/codebuild"
	"github.com/aws/aws-sdk-go/service/codedeploy"
	"github.com/aws/aws-sdk-go/service/codepipeline"
	"github.com/aws/aws-sdk-go/service/configservice"
	"github.com/aws/aws-sdk-go/service/databasemigrationservice"
	"github.com/aws/aws-sdk-go/service/datapipeline"
	"github.com/aws/aws-sdk-go/service/datasync"
	"github.com/aws/aws-sdk-go/service/dax"
	"github.com/aws/aws-sdk-go/service/devicefarm"
	"github.com/aws/aws-sdk-go/service/directconnect"
	"github.com/aws/aws-sdk-go/service/directoryservice"
	"github.com/aws/aws-sdk-go/service/docdb"
	"github.com/aws/aws-sdk-go/service/dynamodb"
	"github.com/aws/aws-sdk-go/service/ec2"
	"github.com/aws/aws-sdk-go/service/ecr"
	"github.com/aws/aws-sdk-go/service/ecs"
	"github.com/aws/aws-sdk-go/service/efs"
	"github.com/aws/aws-sdk-go/service/elasticache"
	"github.com/aws/aws-sdk-go/service/elasticbeanstalk"
	"github.com/aws/aws-sdk-go/service/elasticsearchservice"
	"github.com/aws/aws-sdk-go/service/elb"
	"github.com/aws/aws-sdk-go/service/elbv2"
	"github.com/aws/aws-sdk-go/service/emr"
	"github.com/aws/aws-sdk-go/service/firehose"
	"github.com/aws/aws-sdk-go/service/fms"
	"github.com/aws/aws-sdk-go/service/fsx"
	"github.com/aws/aws-sdk-go/service/gamelift"
	"github.com/aws/aws-sdk-go/service/globalaccelerator"
	"github.com/aws/aws-sdk-go/service/iam"
	"github.com/aws/aws-sdk-go/service/inspector"
	"github.com/aws/aws-sdk-go/service/iot"
	"github.com/aws/aws-sdk-go/service/iotanalytics"
	"github.com/aws/aws-sdk-go/service/iotevents"
	"github.com/aws/aws-sdk-go/service/kinesis"
	"github.com/aws/aws-sdk-go/service/kinesisanalytics"
	"github.com/aws/aws-sdk-go/service/kinesisanalyticsv2"
	"github.com/aws/aws-sdk-go/service/kms"
	"github.com/aws/aws-sdk-go/service/licensemanager"
	"github.com/aws/aws-sdk-go/service/lightsail"
	"github.com/aws/aws-sdk-go/service/mediastore"
	"github.com/aws/aws-sdk-go/service/neptune"
	"github.com/aws/aws-sdk-go/service/networkmanager"
	"github.com/aws/aws-sdk-go/service/organizations"
	"github.com/aws/aws-sdk-go/service/quicksight"
	"github.com/aws/aws-sdk-go/service/ram"
	"github.com/aws/aws-sdk-go/service/rds"
	"github.com/aws/aws-sdk-go/service/redshift"
	"github.com/aws/aws-sdk-go/service/route53"
	"github.com/aws/aws-sdk-go/service/route53resolver"
	"github.com/aws/aws-sdk-go/service/s3"
	"github.com/aws/aws-sdk-go/service/sagemaker"
	"github.com/aws/aws-sdk-go/service/secretsmanager"
	"github.com/aws/aws-sdk-go/service/serverlessapplicationrepository"
	"github.com/aws/aws-sdk-go/service/servicecatalog"
	"github.com/aws/aws-sdk-go/service/servicediscovery"
	"github.com/aws/aws-sdk-go/service/sfn"
	"github.com/aws/aws-sdk-go/service/sns"
	"github.com/aws/aws-sdk-go/service/ssm"
	"github.com/aws/aws-sdk-go/service/storagegateway"
	"github.com/aws/aws-sdk-go/service/swf"
	"github.com/aws/aws-sdk-go/service/transfer"
	"github.com/aws/aws-sdk-go/service/waf"
	"github.com/aws/aws-sdk-go/service/wafv2"
	"github.com/aws/aws-sdk-go/service/workspaces"
)

// map[string]*string handling

// AccessanalyzerTags returns accessanalyzer service tags.
func (tags KeyValueTags) AccessanalyzerTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// AccessanalyzerKeyValueTags creates KeyValueTags from accessanalyzer service tags.
func AccessanalyzerKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// AmplifyTags returns amplify service tags.
func (tags KeyValueTags) AmplifyTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// AmplifyKeyValueTags creates KeyValueTags from amplify service tags.
func AmplifyKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// ApigatewayTags returns apigateway service tags.
func (tags KeyValueTags) ApigatewayTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// ApigatewayKeyValueTags creates KeyValueTags from apigateway service tags.
func ApigatewayKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// Apigatewayv2Tags returns apigatewayv2 service tags.
func (tags KeyValueTags) Apigatewayv2Tags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// Apigatewayv2KeyValueTags creates KeyValueTags from apigatewayv2 service tags.
func Apigatewayv2KeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// AppstreamTags returns appstream service tags.
func (tags KeyValueTags) AppstreamTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// AppstreamKeyValueTags creates KeyValueTags from appstream service tags.
func AppstreamKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// AppsyncTags returns appsync service tags.
func (tags KeyValueTags) AppsyncTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// AppsyncKeyValueTags creates KeyValueTags from appsync service tags.
func AppsyncKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// BackupTags returns backup service tags.
func (tags KeyValueTags) BackupTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// BackupKeyValueTags creates KeyValueTags from backup service tags.
func BackupKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// BatchTags returns batch service tags.
func (tags KeyValueTags) BatchTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// BatchKeyValueTags creates KeyValueTags from batch service tags.
func BatchKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// CloudwatchlogsTags returns cloudwatchlogs service tags.
func (tags KeyValueTags) CloudwatchlogsTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// CloudwatchlogsKeyValueTags creates KeyValueTags from cloudwatchlogs service tags.
func CloudwatchlogsKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// CodecommitTags returns codecommit service tags.
func (tags KeyValueTags) CodecommitTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// CodecommitKeyValueTags creates KeyValueTags from codecommit service tags.
func CodecommitKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// CodestarnotificationsTags returns codestarnotifications service tags.
func (tags KeyValueTags) CodestarnotificationsTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// CodestarnotificationsKeyValueTags creates KeyValueTags from codestarnotifications service tags.
func CodestarnotificationsKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// CognitoidentityTags returns cognitoidentity service tags.
func (tags KeyValueTags) CognitoidentityTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// CognitoidentityKeyValueTags creates KeyValueTags from cognitoidentity service tags.
func CognitoidentityKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// CognitoidentityproviderTags returns cognitoidentityprovider service tags.
func (tags KeyValueTags) CognitoidentityproviderTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// CognitoidentityproviderKeyValueTags creates KeyValueTags from cognitoidentityprovider service tags.
func CognitoidentityproviderKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// DataexchangeTags returns dataexchange service tags.
func (tags KeyValueTags) DataexchangeTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// DataexchangeKeyValueTags creates KeyValueTags from dataexchange service tags.
func DataexchangeKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// DlmTags returns dlm service tags.
func (tags KeyValueTags) DlmTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// DlmKeyValueTags creates KeyValueTags from dlm service tags.
func DlmKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// EksTags returns eks service tags.
func (tags KeyValueTags) EksTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// EksKeyValueTags creates KeyValueTags from eks service tags.
func EksKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// GlacierTags returns glacier service tags.
func (tags KeyValueTags) GlacierTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// GlacierKeyValueTags creates KeyValueTags from glacier service tags.
func GlacierKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// GlueTags returns glue service tags.
func (tags KeyValueTags) GlueTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// GlueKeyValueTags creates KeyValueTags from glue service tags.
func GlueKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// GreengrassTags returns greengrass service tags.
func (tags KeyValueTags) GreengrassTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// GreengrassKeyValueTags creates KeyValueTags from greengrass service tags.
func GreengrassKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// GuarddutyTags returns guardduty service tags.
func (tags KeyValueTags) GuarddutyTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// GuarddutyKeyValueTags creates KeyValueTags from guardduty service tags.
func GuarddutyKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// ImagebuilderTags returns imagebuilder service tags.
func (tags KeyValueTags) ImagebuilderTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// ImagebuilderKeyValueTags creates KeyValueTags from imagebuilder service tags.
func ImagebuilderKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// KafkaTags returns kafka service tags.
func (tags KeyValueTags) KafkaTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// KafkaKeyValueTags creates KeyValueTags from kafka service tags.
func KafkaKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// KinesisvideoTags returns kinesisvideo service tags.
func (tags KeyValueTags) KinesisvideoTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// KinesisvideoKeyValueTags creates KeyValueTags from kinesisvideo service tags.
func KinesisvideoKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// LambdaTags returns lambda service tags.
func (tags KeyValueTags) LambdaTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// LambdaKeyValueTags creates KeyValueTags from lambda service tags.
func LambdaKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// MediaconnectTags returns mediaconnect service tags.
func (tags KeyValueTags) MediaconnectTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// MediaconnectKeyValueTags creates KeyValueTags from mediaconnect service tags.
func MediaconnectKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// MediaconvertTags returns mediaconvert service tags.
func (tags KeyValueTags) MediaconvertTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// MediaconvertKeyValueTags creates KeyValueTags from mediaconvert service tags.
func MediaconvertKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// MedialiveTags returns medialive service tags.
func (tags KeyValueTags) MedialiveTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// MedialiveKeyValueTags creates KeyValueTags from medialive service tags.
func MedialiveKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// MediapackageTags returns mediapackage service tags.
func (tags KeyValueTags) MediapackageTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// MediapackageKeyValueTags creates KeyValueTags from mediapackage service tags.
func MediapackageKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// MqTags returns mq service tags.
func (tags KeyValueTags) MqTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// MqKeyValueTags creates KeyValueTags from mq service tags.
func MqKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// OpsworksTags returns opsworks service tags.
func (tags KeyValueTags) OpsworksTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// OpsworksKeyValueTags creates KeyValueTags from opsworks service tags.
func OpsworksKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// PinpointTags returns pinpoint service tags.
func (tags KeyValueTags) PinpointTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// PinpointKeyValueTags creates KeyValueTags from pinpoint service tags.
func PinpointKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// QldbTags returns qldb service tags.
func (tags KeyValueTags) QldbTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// QldbKeyValueTags creates KeyValueTags from qldb service tags.
func QldbKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// ResourcegroupsTags returns resourcegroups service tags.
func (tags KeyValueTags) ResourcegroupsTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// ResourcegroupsKeyValueTags creates KeyValueTags from resourcegroups service tags.
func ResourcegroupsKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// SecurityhubTags returns securityhub service tags.
func (tags KeyValueTags) SecurityhubTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// SecurityhubKeyValueTags creates KeyValueTags from securityhub service tags.
func SecurityhubKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// SqsTags returns sqs service tags.
func (tags KeyValueTags) SqsTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// SqsKeyValueTags creates KeyValueTags from sqs service tags.
func SqsKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// SyntheticsTags returns synthetics service tags.
func (tags KeyValueTags) SyntheticsTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// SyntheticsKeyValueTags creates KeyValueTags from synthetics service tags.
func SyntheticsKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// WorklinkTags returns worklink service tags.
func (tags KeyValueTags) WorklinkTags() map[string]*string {
	return aws.StringMap(tags.Map())
}

// WorklinkKeyValueTags creates KeyValueTags from worklink service tags.
func WorklinkKeyValueTags(tags map[string]*string) KeyValueTags {
	return New(tags)
}

// []*SERVICE.Tag handling

// AcmTags returns acm service tags.
func (tags KeyValueTags) AcmTags() []*acm.Tag {
	result := make([]*acm.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &acm.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// AcmKeyValueTags creates KeyValueTags from acm service tags.
func AcmKeyValueTags(tags []*acm.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// AcmpcaTags returns acmpca service tags.
func (tags KeyValueTags) AcmpcaTags() []*acmpca.Tag {
	result := make([]*acmpca.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &acmpca.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// AcmpcaKeyValueTags creates KeyValueTags from acmpca service tags.
func AcmpcaKeyValueTags(tags []*acmpca.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// AppmeshTags returns appmesh service tags.
func (tags KeyValueTags) AppmeshTags() []*appmesh.TagRef {
	result := make([]*appmesh.TagRef, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &appmesh.TagRef{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// AppmeshKeyValueTags creates KeyValueTags from appmesh service tags.
func AppmeshKeyValueTags(tags []*appmesh.TagRef) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// AthenaTags returns athena service tags.
func (tags KeyValueTags) AthenaTags() []*athena.Tag {
	result := make([]*athena.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &athena.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// AthenaKeyValueTags creates KeyValueTags from athena service tags.
func AthenaKeyValueTags(tags []*athena.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// Cloud9Tags returns cloud9 service tags.
func (tags KeyValueTags) Cloud9Tags() []*cloud9.Tag {
	result := make([]*cloud9.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &cloud9.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// Cloud9KeyValueTags creates KeyValueTags from cloud9 service tags.
func Cloud9KeyValueTags(tags []*cloud9.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// CloudformationTags returns cloudformation service tags.
func (tags KeyValueTags) CloudformationTags() []*cloudformation.Tag {
	result := make([]*cloudformation.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &cloudformation.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// CloudformationKeyValueTags creates KeyValueTags from cloudformation service tags.
func CloudformationKeyValueTags(tags []*cloudformation.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// CloudfrontTags returns cloudfront service tags.
func (tags KeyValueTags) CloudfrontTags() []*cloudfront.Tag {
	result := make([]*cloudfront.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &cloudfront.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// CloudfrontKeyValueTags creates KeyValueTags from cloudfront service tags.
func CloudfrontKeyValueTags(tags []*cloudfront.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// Cloudhsmv2Tags returns cloudhsmv2 service tags.
func (tags KeyValueTags) Cloudhsmv2Tags() []*cloudhsmv2.Tag {
	result := make([]*cloudhsmv2.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &cloudhsmv2.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// Cloudhsmv2KeyValueTags creates KeyValueTags from cloudhsmv2 service tags.
func Cloudhsmv2KeyValueTags(tags []*cloudhsmv2.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// CloudtrailTags returns cloudtrail service tags.
func (tags KeyValueTags) CloudtrailTags() []*cloudtrail.Tag {
	result := make([]*cloudtrail.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &cloudtrail.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// CloudtrailKeyValueTags creates KeyValueTags from cloudtrail service tags.
func CloudtrailKeyValueTags(tags []*cloudtrail.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// CloudwatchTags returns cloudwatch service tags.
func (tags KeyValueTags) CloudwatchTags() []*cloudwatch.Tag {
	result := make([]*cloudwatch.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &cloudwatch.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// CloudwatchKeyValueTags creates KeyValueTags from cloudwatch service tags.
func CloudwatchKeyValueTags(tags []*cloudwatch.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// CloudwatcheventsTags returns cloudwatchevents service tags.
func (tags KeyValueTags) CloudwatcheventsTags() []*cloudwatchevents.Tag {
	result := make([]*cloudwatchevents.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &cloudwatchevents.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// CloudwatcheventsKeyValueTags creates KeyValueTags from cloudwatchevents service tags.
func CloudwatcheventsKeyValueTags(tags []*cloudwatchevents.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// CodebuildTags returns codebuild service tags.
func (tags KeyValueTags) CodebuildTags() []*codebuild.Tag {
	result := make([]*codebuild.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &codebuild.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// CodebuildKeyValueTags creates KeyValueTags from codebuild service tags.
func CodebuildKeyValueTags(tags []*codebuild.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// CodedeployTags returns codedeploy service tags.
func (tags KeyValueTags) CodedeployTags() []*codedeploy.Tag {
	result := make([]*codedeploy.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &codedeploy.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// CodedeployKeyValueTags creates KeyValueTags from codedeploy service tags.
func CodedeployKeyValueTags(tags []*codedeploy.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// CodepipelineTags returns codepipeline service tags.
func (tags KeyValueTags) CodepipelineTags() []*codepipeline.Tag {
	result := make([]*codepipeline.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &codepipeline.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// CodepipelineKeyValueTags creates KeyValueTags from codepipeline service tags.
func CodepipelineKeyValueTags(tags []*codepipeline.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// ConfigserviceTags returns configservice service tags.
func (tags KeyValueTags) ConfigserviceTags() []*configservice.Tag {
	result := make([]*configservice.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &configservice.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// ConfigserviceKeyValueTags creates KeyValueTags from configservice service tags.
func ConfigserviceKeyValueTags(tags []*configservice.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// DatabasemigrationserviceTags returns databasemigrationservice service tags.
func (tags KeyValueTags) DatabasemigrationserviceTags() []*databasemigrationservice.Tag {
	result := make([]*databasemigrationservice.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &databasemigrationservice.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// DatabasemigrationserviceKeyValueTags creates KeyValueTags from databasemigrationservice service tags.
func DatabasemigrationserviceKeyValueTags(tags []*databasemigrationservice.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// DatapipelineTags returns datapipeline service tags.
func (tags KeyValueTags) DatapipelineTags() []*datapipeline.Tag {
	result := make([]*datapipeline.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &datapipeline.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// DatapipelineKeyValueTags creates KeyValueTags from datapipeline service tags.
func DatapipelineKeyValueTags(tags []*datapipeline.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// DatasyncTags returns datasync service tags.
func (tags KeyValueTags) DatasyncTags() []*datasync.TagListEntry {
	result := make([]*datasync.TagListEntry, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &datasync.TagListEntry{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// DatasyncKeyValueTags creates KeyValueTags from datasync service tags.
func DatasyncKeyValueTags(tags []*datasync.TagListEntry) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// DaxTags returns dax service tags.
func (tags KeyValueTags) DaxTags() []*dax.Tag {
	result := make([]*dax.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &dax.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// DaxKeyValueTags creates KeyValueTags from dax service tags.
func DaxKeyValueTags(tags []*dax.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// DevicefarmTags returns devicefarm service tags.
func (tags KeyValueTags) DevicefarmTags() []*devicefarm.Tag {
	result := make([]*devicefarm.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &devicefarm.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// DevicefarmKeyValueTags creates KeyValueTags from devicefarm service tags.
func DevicefarmKeyValueTags(tags []*devicefarm.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// DirectconnectTags returns directconnect service tags.
func (tags KeyValueTags) DirectconnectTags() []*directconnect.Tag {
	result := make([]*directconnect.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &directconnect.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// DirectconnectKeyValueTags creates KeyValueTags from directconnect service tags.
func DirectconnectKeyValueTags(tags []*directconnect.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// DirectoryserviceTags returns directoryservice service tags.
func (tags KeyValueTags) DirectoryserviceTags() []*directoryservice.Tag {
	result := make([]*directoryservice.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &directoryservice.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// DirectoryserviceKeyValueTags creates KeyValueTags from directoryservice service tags.
func DirectoryserviceKeyValueTags(tags []*directoryservice.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// DocdbTags returns docdb service tags.
func (tags KeyValueTags) DocdbTags() []*docdb.Tag {
	result := make([]*docdb.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &docdb.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// DocdbKeyValueTags creates KeyValueTags from docdb service tags.
func DocdbKeyValueTags(tags []*docdb.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// DynamodbTags returns dynamodb service tags.
func (tags KeyValueTags) DynamodbTags() []*dynamodb.Tag {
	result := make([]*dynamodb.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &dynamodb.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// DynamodbKeyValueTags creates KeyValueTags from dynamodb service tags.
func DynamodbKeyValueTags(tags []*dynamodb.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// Ec2Tags returns ec2 service tags.
func (tags KeyValueTags) Ec2Tags() []*ec2.Tag {
	result := make([]*ec2.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &ec2.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// Ec2KeyValueTags creates KeyValueTags from ec2 service tags.
// Accepts []*ec2.Tag and []*ec2.TagDescription.
func Ec2KeyValueTags(tags interface{}) KeyValueTags {
	switch tags := tags.(type) {
	case []*ec2.Tag:
		m := make(map[string]*string, len(tags))

		for _, tag := range tags {
			m[aws.StringValue(tag.Key)] = tag.Value
		}

		return New(m)
	case []*ec2.TagDescription:
		m := make(map[string]*string, len(tags))

		for _, tag := range tags {
			m[aws.StringValue(tag.Key)] = tag.Value
		}

		return New(m)
	default:
		return New(nil)
	}
}

// EcrTags returns ecr service tags.
func (tags KeyValueTags) EcrTags() []*ecr.Tag {
	result := make([]*ecr.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &ecr.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// EcrKeyValueTags creates KeyValueTags from ecr service tags.
func EcrKeyValueTags(tags []*ecr.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// EcsTags returns ecs service tags.
func (tags KeyValueTags) EcsTags() []*ecs.Tag {
	result := make([]*ecs.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &ecs.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// EcsKeyValueTags creates KeyValueTags from ecs service tags.
func EcsKeyValueTags(tags []*ecs.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// EfsTags returns efs service tags.
func (tags KeyValueTags) EfsTags() []*efs.Tag {
	result := make([]*efs.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &efs.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// EfsKeyValueTags creates KeyValueTags from efs service tags.
func EfsKeyValueTags(tags []*efs.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// ElasticacheTags returns elasticache service tags.
func (tags KeyValueTags) ElasticacheTags() []*elasticache.Tag {
	result := make([]*elasticache.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &elasticache.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// ElasticacheKeyValueTags creates KeyValueTags from elasticache service tags.
func ElasticacheKeyValueTags(tags []*elasticache.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// ElasticbeanstalkTags returns elasticbeanstalk service tags.
func (tags KeyValueTags) ElasticbeanstalkTags() []*elasticbeanstalk.Tag {
	result := make([]*elasticbeanstalk.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &elasticbeanstalk.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// ElasticbeanstalkKeyValueTags creates KeyValueTags from elasticbeanstalk service tags.
func ElasticbeanstalkKeyValueTags(tags []*elasticbeanstalk.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// ElasticsearchserviceTags returns elasticsearchservice service tags.
func (tags KeyValueTags) ElasticsearchserviceTags() []*elasticsearchservice.Tag {
	result := make([]*elasticsearchservice.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &elasticsearchservice.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// ElasticsearchserviceKeyValueTags creates KeyValueTags from elasticsearchservice service tags.
func ElasticsearchserviceKeyValueTags(tags []*elasticsearchservice.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// ElbTagKeys returns elb service tag keys.
func (tags KeyValueTags) ElbTagKeys() []*elb.TagKeyOnly {
	result := make([]*elb.TagKeyOnly, 0, len(tags))

	for k := range tags.Map() {
		tagKey := &elb.TagKeyOnly{
			Key: aws.String(k),
		}

		result = append(result, tagKey)
	}

	return result
}

// ElbTags returns elb service tags.
func (tags KeyValueTags) ElbTags() []*elb.Tag {
	result := make([]*elb.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &elb.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// ElbKeyValueTags creates KeyValueTags from elb service tags.
func ElbKeyValueTags(tags []*elb.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// Elbv2Tags returns elbv2 service tags.
func (tags KeyValueTags) Elbv2Tags() []*elbv2.Tag {
	result := make([]*elbv2.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &elbv2.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// Elbv2KeyValueTags creates KeyValueTags from elbv2 service tags.
func Elbv2KeyValueTags(tags []*elbv2.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// EmrTags returns emr service tags.
func (tags KeyValueTags) EmrTags() []*emr.Tag {
	result := make([]*emr.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &emr.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// EmrKeyValueTags creates KeyValueTags from emr service tags.
func EmrKeyValueTags(tags []*emr.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// FirehoseTags returns firehose service tags.
func (tags KeyValueTags) FirehoseTags() []*firehose.Tag {
	result := make([]*firehose.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &firehose.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// FirehoseKeyValueTags creates KeyValueTags from firehose service tags.
func FirehoseKeyValueTags(tags []*firehose.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// FmsTags returns fms service tags.
func (tags KeyValueTags) FmsTags() []*fms.ResourceTag {
	result := make([]*fms.ResourceTag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &fms.ResourceTag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// FmsKeyValueTags creates KeyValueTags from fms service tags.
func FmsKeyValueTags(tags []*fms.ResourceTag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// FsxTags returns fsx service tags.
func (tags KeyValueTags) FsxTags() []*fsx.Tag {
	result := make([]*fsx.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &fsx.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// FsxKeyValueTags creates KeyValueTags from fsx service tags.
func FsxKeyValueTags(tags []*fsx.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// GameliftTags returns gamelift service tags.
func (tags KeyValueTags) GameliftTags() []*gamelift.Tag {
	result := make([]*gamelift.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &gamelift.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// GameliftKeyValueTags creates KeyValueTags from gamelift service tags.
func GameliftKeyValueTags(tags []*gamelift.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// GlobalacceleratorTags returns globalaccelerator service tags.
func (tags KeyValueTags) GlobalacceleratorTags() []*globalaccelerator.Tag {
	result := make([]*globalaccelerator.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &globalaccelerator.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// GlobalacceleratorKeyValueTags creates KeyValueTags from globalaccelerator service tags.
func GlobalacceleratorKeyValueTags(tags []*globalaccelerator.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// IamTags returns iam service tags.
func (tags KeyValueTags) IamTags() []*iam.Tag {
	result := make([]*iam.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &iam.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// IamKeyValueTags creates KeyValueTags from iam service tags.
func IamKeyValueTags(tags []*iam.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// InspectorTags returns inspector service tags.
func (tags KeyValueTags) InspectorTags() []*inspector.Tag {
	result := make([]*inspector.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &inspector.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// InspectorKeyValueTags creates KeyValueTags from inspector service tags.
func InspectorKeyValueTags(tags []*inspector.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// IotTags returns iot service tags.
func (tags KeyValueTags) IotTags() []*iot.Tag {
	result := make([]*iot.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &iot.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// IotKeyValueTags creates KeyValueTags from iot service tags.
func IotKeyValueTags(tags []*iot.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// IotanalyticsTags returns iotanalytics service tags.
func (tags KeyValueTags) IotanalyticsTags() []*iotanalytics.Tag {
	result := make([]*iotanalytics.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &iotanalytics.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// IotanalyticsKeyValueTags creates KeyValueTags from iotanalytics service tags.
func IotanalyticsKeyValueTags(tags []*iotanalytics.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// IoteventsTags returns iotevents service tags.
func (tags KeyValueTags) IoteventsTags() []*iotevents.Tag {
	result := make([]*iotevents.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &iotevents.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// IoteventsKeyValueTags creates KeyValueTags from iotevents service tags.
func IoteventsKeyValueTags(tags []*iotevents.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// KinesisTags returns kinesis service tags.
func (tags KeyValueTags) KinesisTags() []*kinesis.Tag {
	result := make([]*kinesis.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &kinesis.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// KinesisKeyValueTags creates KeyValueTags from kinesis service tags.
func KinesisKeyValueTags(tags []*kinesis.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// KinesisanalyticsTags returns kinesisanalytics service tags.
func (tags KeyValueTags) KinesisanalyticsTags() []*kinesisanalytics.Tag {
	result := make([]*kinesisanalytics.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &kinesisanalytics.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// KinesisanalyticsKeyValueTags creates KeyValueTags from kinesisanalytics service tags.
func KinesisanalyticsKeyValueTags(tags []*kinesisanalytics.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// Kinesisanalyticsv2Tags returns kinesisanalyticsv2 service tags.
func (tags KeyValueTags) Kinesisanalyticsv2Tags() []*kinesisanalyticsv2.Tag {
	result := make([]*kinesisanalyticsv2.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &kinesisanalyticsv2.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// Kinesisanalyticsv2KeyValueTags creates KeyValueTags from kinesisanalyticsv2 service tags.
func Kinesisanalyticsv2KeyValueTags(tags []*kinesisanalyticsv2.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// KmsTags returns kms service tags.
func (tags KeyValueTags) KmsTags() []*kms.Tag {
	result := make([]*kms.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &kms.Tag{
			TagKey:   aws.String(k),
			TagValue: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// KmsKeyValueTags creates KeyValueTags from kms service tags.
func KmsKeyValueTags(tags []*kms.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.TagKey)] = tag.TagValue
	}

	return New(m)
}

// LicensemanagerTags returns licensemanager service tags.
func (tags KeyValueTags) LicensemanagerTags() []*licensemanager.Tag {
	result := make([]*licensemanager.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &licensemanager.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// LicensemanagerKeyValueTags creates KeyValueTags from licensemanager service tags.
func LicensemanagerKeyValueTags(tags []*licensemanager.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// LightsailTags returns lightsail service tags.
func (tags KeyValueTags) LightsailTags() []*lightsail.Tag {
	result := make([]*lightsail.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &lightsail.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// LightsailKeyValueTags creates KeyValueTags from lightsail service tags.
func LightsailKeyValueTags(tags []*lightsail.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// MediastoreTags returns mediastore service tags.
func (tags KeyValueTags) MediastoreTags() []*mediastore.Tag {
	result := make([]*mediastore.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &mediastore.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// MediastoreKeyValueTags creates KeyValueTags from mediastore service tags.
func MediastoreKeyValueTags(tags []*mediastore.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// NeptuneTags returns neptune service tags.
func (tags KeyValueTags) NeptuneTags() []*neptune.Tag {
	result := make([]*neptune.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &neptune.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// NeptuneKeyValueTags creates KeyValueTags from neptune service tags.
func NeptuneKeyValueTags(tags []*neptune.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// NetworkmanagerTags returns networkmanager service tags.
func (tags KeyValueTags) NetworkmanagerTags() []*networkmanager.Tag {
	result := make([]*networkmanager.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &networkmanager.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// NetworkmanagerKeyValueTags creates KeyValueTags from networkmanager service tags.
func NetworkmanagerKeyValueTags(tags []*networkmanager.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// OrganizationsTags returns organizations service tags.
func (tags KeyValueTags) OrganizationsTags() []*organizations.Tag {
	result := make([]*organizations.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &organizations.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// OrganizationsKeyValueTags creates KeyValueTags from organizations service tags.
func OrganizationsKeyValueTags(tags []*organizations.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// QuicksightTags returns quicksight service tags.
func (tags KeyValueTags) QuicksightTags() []*quicksight.Tag {
	result := make([]*quicksight.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &quicksight.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// QuicksightKeyValueTags creates KeyValueTags from quicksight service tags.
func QuicksightKeyValueTags(tags []*quicksight.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// RamTags returns ram service tags.
func (tags KeyValueTags) RamTags() []*ram.Tag {
	result := make([]*ram.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &ram.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// RamKeyValueTags creates KeyValueTags from ram service tags.
func RamKeyValueTags(tags []*ram.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// RdsTags returns rds service tags.
func (tags KeyValueTags) RdsTags() []*rds.Tag {
	result := make([]*rds.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &rds.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// RdsKeyValueTags creates KeyValueTags from rds service tags.
func RdsKeyValueTags(tags []*rds.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// RedshiftTags returns redshift service tags.
func (tags KeyValueTags) RedshiftTags() []*redshift.Tag {
	result := make([]*redshift.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &redshift.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// RedshiftKeyValueTags creates KeyValueTags from redshift service tags.
func RedshiftKeyValueTags(tags []*redshift.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// Route53Tags returns route53 service tags.
func (tags KeyValueTags) Route53Tags() []*route53.Tag {
	result := make([]*route53.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &route53.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// Route53KeyValueTags creates KeyValueTags from route53 service tags.
func Route53KeyValueTags(tags []*route53.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// Route53resolverTags returns route53resolver service tags.
func (tags KeyValueTags) Route53resolverTags() []*route53resolver.Tag {
	result := make([]*route53resolver.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &route53resolver.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// Route53resolverKeyValueTags creates KeyValueTags from route53resolver service tags.
func Route53resolverKeyValueTags(tags []*route53resolver.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// S3Tags returns s3 service tags.
func (tags KeyValueTags) S3Tags() []*s3.Tag {
	result := make([]*s3.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &s3.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// S3KeyValueTags creates KeyValueTags from s3 service tags.
func S3KeyValueTags(tags []*s3.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// SagemakerTags returns sagemaker service tags.
func (tags KeyValueTags) SagemakerTags() []*sagemaker.Tag {
	result := make([]*sagemaker.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &sagemaker.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// SagemakerKeyValueTags creates KeyValueTags from sagemaker service tags.
func SagemakerKeyValueTags(tags []*sagemaker.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// SecretsmanagerTags returns secretsmanager service tags.
func (tags KeyValueTags) SecretsmanagerTags() []*secretsmanager.Tag {
	result := make([]*secretsmanager.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &secretsmanager.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// SecretsmanagerKeyValueTags creates KeyValueTags from secretsmanager service tags.
func SecretsmanagerKeyValueTags(tags []*secretsmanager.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// ServerlessapplicationrepositoryTags returns serverlessapplicationrepository service tags.
func (tags KeyValueTags) ServerlessapplicationrepositoryTags() []*serverlessapplicationrepository.Tag {
	result := make([]*serverlessapplicationrepository.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &serverlessapplicationrepository.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// ServerlessapplicationrepositoryKeyValueTags creates KeyValueTags from serverlessapplicationrepository service tags.
func ServerlessapplicationrepositoryKeyValueTags(tags []*serverlessapplicationrepository.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// ServicecatalogTags returns servicecatalog service tags.
func (tags KeyValueTags) ServicecatalogTags() []*servicecatalog.Tag {
	result := make([]*servicecatalog.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &servicecatalog.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// ServicecatalogKeyValueTags creates KeyValueTags from servicecatalog service tags.
func ServicecatalogKeyValueTags(tags []*servicecatalog.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// ServicediscoveryTags returns servicediscovery service tags.
func (tags KeyValueTags) ServicediscoveryTags() []*servicediscovery.Tag {
	result := make([]*servicediscovery.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &servicediscovery.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// ServicediscoveryKeyValueTags creates KeyValueTags from servicediscovery service tags.
func ServicediscoveryKeyValueTags(tags []*servicediscovery.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// SfnTags returns sfn service tags.
func (tags KeyValueTags) SfnTags() []*sfn.Tag {
	result := make([]*sfn.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &sfn.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// SfnKeyValueTags creates KeyValueTags from sfn service tags.
func SfnKeyValueTags(tags []*sfn.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// SnsTags returns sns service tags.
func (tags KeyValueTags) SnsTags() []*sns.Tag {
	result := make([]*sns.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &sns.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// SnsKeyValueTags creates KeyValueTags from sns service tags.
func SnsKeyValueTags(tags []*sns.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// SsmTags returns ssm service tags.
func (tags KeyValueTags) SsmTags() []*ssm.Tag {
	result := make([]*ssm.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &ssm.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// SsmKeyValueTags creates KeyValueTags from ssm service tags.
func SsmKeyValueTags(tags []*ssm.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// StoragegatewayTags returns storagegateway service tags.
func (tags KeyValueTags) StoragegatewayTags() []*storagegateway.Tag {
	result := make([]*storagegateway.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &storagegateway.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// StoragegatewayKeyValueTags creates KeyValueTags from storagegateway service tags.
func StoragegatewayKeyValueTags(tags []*storagegateway.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// SwfTags returns swf service tags.
func (tags KeyValueTags) SwfTags() []*swf.ResourceTag {
	result := make([]*swf.ResourceTag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &swf.ResourceTag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// SwfKeyValueTags creates KeyValueTags from swf service tags.
func SwfKeyValueTags(tags []*swf.ResourceTag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// TransferTags returns transfer service tags.
func (tags KeyValueTags) TransferTags() []*transfer.Tag {
	result := make([]*transfer.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &transfer.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// TransferKeyValueTags creates KeyValueTags from transfer service tags.
func TransferKeyValueTags(tags []*transfer.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// WafTags returns waf service tags.
func (tags KeyValueTags) WafTags() []*waf.Tag {
	result := make([]*waf.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &waf.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// WafKeyValueTags creates KeyValueTags from waf service tags.
func WafKeyValueTags(tags []*waf.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// WafregionalTags returns wafregional service tags.
func (tags KeyValueTags) WafregionalTags() []*waf.Tag {
	result := make([]*waf.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &waf.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// WafregionalKeyValueTags creates KeyValueTags from wafregional service tags.
func WafregionalKeyValueTags(tags []*waf.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// Wafv2Tags returns wafv2 service tags.
func (tags KeyValueTags) Wafv2Tags() []*wafv2.Tag {
	result := make([]*wafv2.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &wafv2.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// Wafv2KeyValueTags creates KeyValueTags from wafv2 service tags.
func Wafv2KeyValueTags(tags []*wafv2.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}

// WorkspacesTags returns workspaces service tags.
func (tags KeyValueTags) WorkspacesTags() []*workspaces.Tag {
	result := make([]*workspaces.Tag, 0, len(tags))

	for k, v := range tags.Map() {
		tag := &workspaces.Tag{
			Key:   aws.String(k),
			Value: aws.String(v),
		}

		result = append(result, tag)
	}

	return result
}

// WorkspacesKeyValueTags creates KeyValueTags from workspaces service tags.
func WorkspacesKeyValueTags(tags []*workspaces.Tag) KeyValueTags {
	m := make(map[string]*string, len(tags))

	for _, tag := range tags {
		m[aws.StringValue(tag.Key)] = tag.Value
	}

	return New(m)
}
