From 2bd66521af6b3b5f81e7c1d39d3a892a2f4cd253 Mon Sep 17 00:00:00 2001 From: Sean McGrail <549813+skmcgrail@users.noreply.github.com> Date: Mon, 6 Jun 2022 09:18:44 -0700 Subject: [PATCH] Switch to the modeled serviceId for newly generated clients (#4424) * Support for strict generation of clients using modeled serviceId * Backfill missing serviceIds --- .../cloudsearchdomain/2013-01-01/api-2.json | 1 + .../2017-01-11/api-2.json | 1 + .../apis/importexport/2010-06-01/api-2.json | 1 + models/apis/mobile/2017-07-01/api-2.json | 1 + .../mobileanalytics/2014-06-05/api-2.json | 1 + models/apis/sdb/2009-04-15/api-2.json | 1 + private/model/api/api.go | 43 ++- private/model/api/customization_passes.go | 13 +- private/model/api/legacy_struct_names.go | 312 ++++++++++++++++++ private/model/api/load.go | 12 +- private/model/cli/gen-api/main.go | 10 +- service/generate.go | 2 +- 12 files changed, 378 insertions(+), 20 deletions(-) create mode 100644 private/model/api/legacy_struct_names.go diff --git a/models/apis/cloudsearchdomain/2013-01-01/api-2.json b/models/apis/cloudsearchdomain/2013-01-01/api-2.json index e22e35ec24..c26c34e5d4 100644 --- a/models/apis/cloudsearchdomain/2013-01-01/api-2.json +++ b/models/apis/cloudsearchdomain/2013-01-01/api-2.json @@ -6,6 +6,7 @@ "jsonVersion":"1.1", "protocol":"rest-json", "serviceFullName":"Amazon CloudSearch Domain", + "serviceId":"CloudSearch Domain", "signatureVersion":"v4", "signingName":"cloudsearch", "uid":"cloudsearchdomain-2013-01-01" diff --git a/models/apis/entitlement.marketplace/2017-01-11/api-2.json b/models/apis/entitlement.marketplace/2017-01-11/api-2.json index bf13c17535..967a2c789d 100644 --- a/models/apis/entitlement.marketplace/2017-01-11/api-2.json +++ b/models/apis/entitlement.marketplace/2017-01-11/api-2.json @@ -6,6 +6,7 @@ "jsonVersion":"1.1", "protocol":"json", "serviceFullName":"AWS Marketplace Entitlement Service", + "serviceId":"Marketplace Entitlement Service", "signatureVersion":"v4", "signingName":"aws-marketplace", "targetPrefix":"AWSMPEntitlementService", diff --git a/models/apis/importexport/2010-06-01/api-2.json b/models/apis/importexport/2010-06-01/api-2.json index 0c2a8ddf4c..25147ba838 100644 --- a/models/apis/importexport/2010-06-01/api-2.json +++ b/models/apis/importexport/2010-06-01/api-2.json @@ -5,6 +5,7 @@ "apiVersion":"2010-06-01", "endpointPrefix":"importexport", "globalEndpoint":"importexport.amazonaws.com", + "serviceId": "Import Export", "serviceFullName":"AWS Import/Export", "signatureVersion":"v2", "xmlNamespace":"http://importexport.amazonaws.com/doc/2010-06-01/", diff --git a/models/apis/mobile/2017-07-01/api-2.json b/models/apis/mobile/2017-07-01/api-2.json index 6ef48111b3..9d63e8d2dc 100644 --- a/models/apis/mobile/2017-07-01/api-2.json +++ b/models/apis/mobile/2017-07-01/api-2.json @@ -6,6 +6,7 @@ "jsonVersion":"1.1", "protocol":"rest-json", "serviceFullName":"AWS Mobile", + "serviceId":"Mobile", "signatureVersion":"v4", "signingName":"AWSMobileHubService", "uid":"mobile-2017-07-01" diff --git a/models/apis/mobileanalytics/2014-06-05/api-2.json b/models/apis/mobileanalytics/2014-06-05/api-2.json index c593da2a98..c7bd5582d8 100644 --- a/models/apis/mobileanalytics/2014-06-05/api-2.json +++ b/models/apis/mobileanalytics/2014-06-05/api-2.json @@ -3,6 +3,7 @@ "metadata":{ "apiVersion":"2014-06-05", "endpointPrefix":"mobileanalytics", + "serviceId": "Mobile Analytics", "serviceFullName":"Amazon Mobile Analytics", "signatureVersion":"v4", "protocol":"rest-json" diff --git a/models/apis/sdb/2009-04-15/api-2.json b/models/apis/sdb/2009-04-15/api-2.json index 3eb686d6d5..e681515e85 100644 --- a/models/apis/sdb/2009-04-15/api-2.json +++ b/models/apis/sdb/2009-04-15/api-2.json @@ -3,6 +3,7 @@ "metadata":{ "apiVersion":"2009-04-15", "endpointPrefix":"sdb", + "serviceId": "SimpleDB", "serviceFullName":"Amazon SimpleDB", "signatureVersion":"v2", "xmlNamespace":"http://sdb.amazonaws.com/doc/2009-04-15/", diff --git a/private/model/api/api.go b/private/model/api/api.go index 4d52db3339..b3bf35728b 100644 --- a/private/model/api/api.go +++ b/private/model/api/api.go @@ -74,6 +74,9 @@ type API struct { HasAccountIdWithARN bool `json:"-"` WithGeneratedTypedErrors bool + + // Set to true to strictly enforce usage of the serviceId for the package naming + StrictServiceId bool } // A Metadata is the metadata about an API's definition. @@ -127,21 +130,29 @@ func (a *API) StructName() string { return a.name } - name := a.Metadata.ServiceAbbreviation - if len(name) == 0 { - name = a.Metadata.ServiceFullName + var name string + if a.StrictServiceId { + name = a.Metadata.ServiceID + if len(name) == 0 { + panic("expect serviceId to be set, but was not") + } + if legacyName, ok := legacyStructNames[strings.ToLower(name)]; ok { + // The legacy names come from service abbreviations or service full names, + // so we will want to apply the old procedure to them. + name = makeLikeServiceId(legacyName) + } + } else { + name = a.Metadata.ServiceAbbreviation + if len(name) == 0 { + name = a.Metadata.ServiceFullName + } + // If we aren't using the strictly modeled service id, then + // strip out prefix names not reflected in service client symbol names. + name = makeLikeServiceId(name) } name = strings.TrimSpace(name) - // Strip out prefix names not reflected in service client symbol names. - for _, prefix := range stripServiceNamePrefixes { - if strings.HasPrefix(name, prefix) { - name = name[len(prefix):] - break - } - } - // Replace all Non-letter/number values with space runes := []rune(name) for i := 0; i < len(runes); i++ { @@ -1065,3 +1076,13 @@ func getDeprecatedMessage(msg string, name string) string { return msg } + +func makeLikeServiceId(name string) string { + for _, prefix := range stripServiceNamePrefixes { + if strings.HasPrefix(name, prefix) { + name = name[len(prefix):] + break + } + } + return name +} diff --git a/private/model/api/customization_passes.go b/private/model/api/customization_passes.go index 0b7b8e6950..a39c48e5b2 100644 --- a/private/model/api/customization_passes.go +++ b/private/model/api/customization_passes.go @@ -413,7 +413,18 @@ func mergeServicesCustomizations(a *API) error { file := filepath.Join(p, "api-2.json") - serviceAPI := API{} + serviceAPI := API{ + IgnoreUnsupportedAPIs: a.IgnoreUnsupportedAPIs, + NoRemoveUnusedShapes: a.NoRemoveUnusedShapes, + NoRenameToplevelShapes: a.NoRenameToplevelShapes, + NoInitMethods: a.NoInitMethods, + NoStringerMethods: a.NoStringerMethods, + NoConstServiceNames: a.NoConstServiceNames, + NoValidataShapeMethods: a.NoValidataShapeMethods, + NoGenStructFieldAccessors: a.NoGenStructFieldAccessors, + NoRemoveUnsupportedJSONValue: a.NoRemoveUnsupportedJSONValue, + StrictServiceId: a.StrictServiceId, + } serviceAPI.Attach(file) serviceAPI.Setup() diff --git a/private/model/api/legacy_struct_names.go b/private/model/api/legacy_struct_names.go new file mode 100644 index 0000000000..a9c25c783d --- /dev/null +++ b/private/model/api/legacy_struct_names.go @@ -0,0 +1,312 @@ +package api + +var legacyStructNames = map[string]string{ + "accessanalyzer": "Access Analyzer", + "account": "AWS Account", + "acm": "ACM", + "acm pca": "ACM-PCA", + "alexa for business": "Alexa For Business", + "amp": "Amazon Prometheus Service", + "amplify": "Amplify", + "amplifybackend": "AmplifyBackend", + "amplifyuibuilder": "AWS Amplify UI Builder", + "api gateway": "Amazon API Gateway", + "apigatewaymanagementapi": "AmazonApiGatewayManagementApi", + "apigatewayv2": "AmazonApiGatewayV2", + "app mesh": "AWS App Mesh", + "appconfig": "AppConfig", + "appconfigdata": "AWS AppConfig Data", + "appflow": "Amazon Appflow", + "appintegrations": "Amazon AppIntegrations Service", + "application auto scaling": "Application Auto Scaling", + "application discovery service": "AWS Application Discovery Service", + "application insights": "Application Insights", + "applicationcostprofiler": "AWS Application Cost Profiler", + "apprunner": "AWS App Runner", + "appstream": "Amazon AppStream", + "appsync": "AWSAppSync", + "athena": "Amazon Athena", + "auditmanager": "AWS Audit Manager", + "auto scaling": "Auto Scaling", + "auto scaling plans": "AWS Auto Scaling Plans", + "backup": "AWS Backup", + "backup gateway": "AWS Backup Gateway", + "batch": "AWS Batch", + "billingconductor": "AWSBillingConductor", + "braket": "Braket", + "budgets": "AWSBudgets", + "chime": "Amazon Chime", + "chime sdk identity": "Amazon Chime SDK Identity", + "chime sdk media pipelines": "Amazon Chime SDK Media Pipelines", + "chime sdk meetings": "Amazon Chime SDK Meetings", + "chime sdk messaging": "Amazon Chime SDK Messaging", + "cloud9": "AWS Cloud9", + "cloudcontrol": "CloudControlApi", + "clouddirectory": "Amazon CloudDirectory", + "cloudformation": "AWS CloudFormation", + "cloudfront": "CloudFront", + "cloudhsm": "CloudHSM", + "cloudhsm v2": "CloudHSM V2", + "cloudsearch": "Amazon CloudSearch", + "cloudsearch domain": "Amazon CloudSearch Domain", + "cloudtrail": "CloudTrail", + "cloudwatch": "CloudWatch", + "cloudwatch events": "Amazon CloudWatch Events", + "cloudwatch logs": "Amazon CloudWatch Logs", + "codeartifact": "CodeArtifact", + "codebuild": "AWS CodeBuild", + "codecommit": "CodeCommit", + "codedeploy": "CodeDeploy", + "codeguru reviewer": "CodeGuruReviewer", + "codeguruprofiler": "Amazon CodeGuru Profiler", + "codepipeline": "CodePipeline", + "codestar": "CodeStar", + "codestar connections": "AWS CodeStar connections", + "codestar notifications": "AWS CodeStar Notifications", + "cognito identity": "Amazon Cognito Identity", + "cognito identity provider": "Amazon Cognito Identity Provider", + "cognito sync": "Amazon Cognito Sync", + "comprehend": "Amazon Comprehend", + "comprehendmedical": "ComprehendMedical", + "compute optimizer": "AWS Compute Optimizer", + "config service": "Config Service", + "connect": "Amazon Connect", + "connect contact lens": "Amazon Connect Contact Lens", + "connectparticipant": "Amazon Connect Participant", + "cost and usage report service": "AWS Cost and Usage Report Service", + "cost explorer": "AWS Cost Explorer", + "customer profiles": "Customer Profiles", + "data pipeline": "AWS Data Pipeline", + "database migration service": "AWS Database Migration Service", + "databrew": "AWS Glue DataBrew", + "dataexchange": "AWS Data Exchange", + "datasync": "DataSync", + "dax": "Amazon DAX", + "detective": "Amazon Detective", + "device farm": "AWS Device Farm", + "devops guru": "Amazon DevOps Guru", + "direct connect": "AWS Direct Connect", + "directory service": "Directory Service", + "dlm": "Amazon DLM", + "docdb": "Amazon DocDB", + "drs": "drs", + "dynamodb": "DynamoDB", + "dynamodb streams": "Amazon DynamoDB Streams", + "ebs": "Amazon EBS", + "ec2": "Amazon EC2", + "ec2 instance connect": "EC2 Instance Connect", + "ecr": "Amazon ECR", + "ecr public": "Amazon ECR Public", + "ecs": "Amazon ECS", + "efs": "EFS", + "eks": "Amazon EKS", + "elastic beanstalk": "Elastic Beanstalk", + "elastic inference": "Amazon Elastic Inference", + "elastic load balancing": "Elastic Load Balancing", + "elastic load balancing v2": "Elastic Load Balancing v2", + "elastic transcoder": "Amazon Elastic Transcoder", + "elasticache": "Amazon ElastiCache", + "elasticsearch service": "Amazon Elasticsearch Service", + "emr": "Amazon EMR", + "emr containers": "Amazon EMR Containers", + "emr serverless": "EMR Serverless", + "eventbridge": "Amazon EventBridge", + "evidently": "Amazon CloudWatch Evidently", + "finspace": "finspace", + "finspace data": "FinSpace Data", + "firehose": "Firehose", + "fis": "FIS", + "fms": "FMS", + "forecast": "Amazon Forecast Service", + "forecastquery": "Amazon Forecast Query Service", + "frauddetector": "Amazon Fraud Detector", + "fsx": "Amazon FSx", + "gamelift": "Amazon GameLift", + "gamesparks": "GameSparks", + "glacier": "Amazon Glacier", + "global accelerator": "AWS Global Accelerator", + "glue": "AWS Glue", + "grafana": "Amazon Managed Grafana", + "greengrass": "AWS Greengrass", + "greengrassv2": "AWS GreengrassV2", + "groundstation": "AWS Ground Station", + "guardduty": "Amazon GuardDuty", + "health": "AWSHealth", + "healthlake": "HealthLake", + "honeycode": "Honeycode", + "iam": "IAM", + "identitystore": "IdentityStore", + "imagebuilder": "imagebuilder", + "import export": "AWS Import/Export", + "inspector": "Amazon Inspector", + "inspector2": "Inspector2", + "iot": "AWS IoT", + "iot 1click devices service": "AWS IoT 1-Click Devices Service", + "iot 1click projects": "AWS IoT 1-Click Projects", + "iot data plane": "AWS IoT Data Plane", + "iot events": "AWS IoT Events", + "iot events data": "AWS IoT Events Data", + "iot jobs data plane": "AWS IoT Jobs Data Plane", + "iot wireless": "AWS IoT Wireless", + "iotanalytics": "AWS IoT Analytics", + "iotdeviceadvisor": "AWSIoTDeviceAdvisor", + "iotfleethub": "AWS IoT Fleet Hub", + "iotsecuretunneling": "AWS IoT Secure Tunneling", + "iotsitewise": "AWS IoT SiteWise", + "iotthingsgraph": "AWS IoT Things Graph", + "iottwinmaker": "AWS IoT TwinMaker", + "ivs": "Amazon IVS", + "ivschat": "ivschat", + "kafka": "Kafka", + "kafkaconnect": "Kafka Connect", + "kendra": "kendra", + "keyspaces": "Amazon Keyspaces", + "kinesis": "Kinesis", + "kinesis analytics": "Kinesis Analytics", + "kinesis analytics v2": "Kinesis Analytics V2", + "kinesis video": "Kinesis Video", + "kinesis video archived media": "Kinesis Video Archived Media", + "kinesis video media": "Kinesis Video Media", + "kinesis video signaling": "Amazon Kinesis Video Signaling Channels", + "kms": "KMS", + "lakeformation": "AWS Lake Formation", + "lambda": "AWS Lambda", + "lex model building service": "Amazon Lex Model Building Service", + "lex models v2": "Lex Models V2", + "lex runtime service": "Amazon Lex Runtime Service", + "lex runtime v2": "Lex Runtime V2", + "license manager": "AWS License Manager", + "lightsail": "Amazon Lightsail", + "location": "Amazon Location Service", + "lookoutequipment": "LookoutEquipment", + "lookoutmetrics": "LookoutMetrics", + "lookoutvision": "Amazon Lookout for Vision", + "machine learning": "Amazon Machine Learning", + "macie": "Amazon Macie", + "macie2": "Amazon Macie 2", + "managedblockchain": "ManagedBlockchain", + "marketplace catalog": "AWS Marketplace Catalog", + "marketplace commerce analytics": "AWS Marketplace Commerce Analytics", + "marketplace entitlement service": "AWS Marketplace Entitlement Service", + "marketplace metering": "AWSMarketplace Metering", + "mediaconnect": "AWS MediaConnect", + "mediaconvert": "MediaConvert", + "medialive": "MediaLive", + "mediapackage": "MediaPackage", + "mediapackage vod": "MediaPackage Vod", + "mediastore": "MediaStore", + "mediastore data": "MediaStore Data", + "mediatailor": "MediaTailor", + "memorydb": "Amazon MemoryDB", + "mgn": "mgn", + "migration hub": "AWS Migration Hub", + "migration hub refactor spaces": "AWS Migration Hub Refactor Spaces", + "migrationhub config": "AWS Migration Hub Config", + "migrationhubstrategy": "Migration Hub Strategy Recommendations", + "mobile": "AWS Mobile", + "mobile analytics": "Amazon Mobile Analytics", + "mq": "AmazonMQ", + "mturk": "Amazon MTurk", + "mwaa": "AmazonMWAA", + "neptune": "Amazon Neptune", + "network firewall": "Network Firewall", + "networkmanager": "NetworkManager", + "nimble": "AmazonNimbleStudio", + "opensearch": "Amazon OpenSearch Service", + "opsworks": "AWS OpsWorks", + "opsworkscm": "OpsWorksCM", + "organizations": "Organizations", + "outposts": "Outposts", + "panorama": "Panorama", + "personalize": "Amazon Personalize", + "personalize events": "Amazon Personalize Events", + "personalize runtime": "Amazon Personalize Runtime", + "pi": "AWS PI", + "pinpoint": "Amazon Pinpoint", + "pinpoint email": "Pinpoint Email", + "pinpoint sms voice": "Pinpoint SMS Voice", + "pinpoint sms voice v2": "Amazon Pinpoint SMS Voice V2", + "polly": "Amazon Polly", + "pricing": "AWS Pricing", + "proton": "AWS Proton", + "qldb": "QLDB", + "qldb session": "QLDB Session", + "quicksight": "Amazon QuickSight", + "ram": "RAM", + "rbin": "Amazon Recycle Bin", + "rds": "Amazon RDS", + "rds data": "AWS RDS DataService", + "redshift": "Amazon Redshift", + "redshift data": "Redshift Data API Service", + "rekognition": "Amazon Rekognition", + "resiliencehub": "AWS Resilience Hub", + "resource groups": "Resource Groups", + "resource groups tagging api": "AWS Resource Groups Tagging API", + "robomaker": "RoboMaker", + "route 53": "Route 53", + "route 53 domains": "Amazon Route 53 Domains", + "route53 recovery cluster": "Route53 Recovery Cluster", + "route53 recovery control config": "AWS Route53 Recovery Control Config", + "route53 recovery readiness": "AWS Route53 Recovery Readiness", + "route53resolver": "Route53Resolver", + "rum": "CloudWatch RUM", + "s3": "Amazon S3", + "s3 control": "AWS S3 Control", + "s3outposts": "Amazon S3 Outposts", + "sagemaker": "SageMaker", + "sagemaker a2i runtime": "Amazon Augmented AI Runtime", + "sagemaker edge": "Amazon Sagemaker Edge Manager", + "sagemaker featurestore runtime": "Amazon SageMaker Feature Store Runtime", + "sagemaker runtime": "Amazon SageMaker Runtime", + "savingsplans": "AWSSavingsPlans", + "schemas": "Schemas", + "secrets manager": "AWS Secrets Manager", + "securityhub": "AWS SecurityHub", + "serverlessapplicationrepository": "AWSServerlessApplicationRepository", + "service catalog": "AWS Service Catalog", + "service catalog appregistry": "AppRegistry", + "service quotas": "Service Quotas", + "servicediscovery": "ServiceDiscovery", + "ses": "Amazon SES", + "sesv2": "Amazon SES V2", + "sfn": "AWS SFN", + "shield": "AWS Shield", + "signer": "signer", + "simpledb": "Amazon SimpleDB", + "sms": "SMS", + "snow device management": "AWS Snow Device Management", + "snowball": "Amazon Snowball", + "sns": "Amazon SNS", + "sqs": "Amazon SQS", + "ssm": "Amazon SSM", + "ssm contacts": "SSM Contacts", + "ssm incidents": "SSM Incidents", + "sso": "SSO", + "sso admin": "SSO Admin", + "sso oidc": "SSO OIDC", + "storage gateway": "AWS Storage Gateway", + "sts": "AWS STS", + "support": "AWS Support", + "swf": "Amazon SWF", + "synthetics": "Synthetics", + "textract": "Amazon Textract", + "timestream query": "Timestream Query", + "timestream write": "Timestream Write", + "transcribe": "Amazon Transcribe Service", + "transcribe streaming": "Amazon Transcribe Streaming Service", + "transfer": "AWS Transfer", + "translate": "Amazon Translate", + "voice id": "Amazon Voice ID", + "waf": "WAF", + "waf regional": "WAF Regional", + "wafv2": "WAFV2", + "wellarchitected": "Well-Architected", + "wisdom": "Amazon Connect Wisdom Service", + "workdocs": "Amazon WorkDocs", + "worklink": "WorkLink", + "workmail": "Amazon WorkMail", + "workmailmessageflow": "Amazon WorkMail Message Flow", + "workspaces": "Amazon WorkSpaces", + "workspaces web": "Amazon WorkSpaces Web", + "xray": "AWS X-Ray", +} diff --git a/private/model/api/load.go b/private/model/api/load.go index dca116bf5c..2ff3614d1c 100644 --- a/private/model/api/load.go +++ b/private/model/api/load.go @@ -24,6 +24,9 @@ type Loader struct { // Allows ignoring API models that are unsupported by the SDK without // failing the load of other supported APIs. IgnoreUnsupportedAPIs bool + + // Set to true to strictly enforce usage of the serviceId for the package naming + StrictServiceId bool } // Load loads the API model files from disk returning the map of API package. @@ -33,6 +36,7 @@ func (l Loader) Load(modelPaths []string) (APIs, error) { for _, modelPath := range modelPaths { a, err := loadAPI(modelPath, l.BaseImport, func(a *API) { a.IgnoreUnsupportedAPIs = l.IgnoreUnsupportedAPIs + a.StrictServiceId = l.StrictServiceId }) if err != nil { return nil, fmt.Errorf("failed to load API, %v, %v", modelPath, err) @@ -66,6 +70,10 @@ func loadAPI(modelPath, baseImport string, opts ...func(*API)) (*API, error) { BaseCrosslinkURL: "https://docs.aws.amazon.com", } + for _, opt := range opts { + opt(a) + } + modelFile := filepath.Base(modelPath) modelDir := filepath.Dir(modelPath) err := attachModelFiles(modelDir, @@ -80,10 +88,6 @@ func loadAPI(modelPath, baseImport string, opts ...func(*API)) (*API, error) { return nil, err } - for _, opt := range opts { - opt(a) - } - if err = a.Setup(); err != nil { return nil, err } diff --git a/private/model/cli/gen-api/main.go b/private/model/cli/gen-api/main.go index d95cd7cc95..5bb58b08a3 100644 --- a/private/model/cli/gen-api/main.go +++ b/private/model/cli/gen-api/main.go @@ -10,15 +10,14 @@ package main import ( "flag" "fmt" + "github.com/aws/aws-sdk-go/private/model/api" + "github.com/aws/aws-sdk-go/private/util" "io/ioutil" "os" "path/filepath" "runtime/debug" "strings" "sync" - - "github.com/aws/aws-sdk-go/private/model/api" - "github.com/aws/aws-sdk-go/private/util" ) func usage() { @@ -59,6 +58,10 @@ func main() { true, "Ignores API models that use unsupported features", ) + + var strictServiceId bool + flag.BoolVar(&strictServiceId, "use-service-id", false, "enforce strict usage of the serviceId from the model") + flag.Usage = usage flag.Parse() @@ -83,6 +86,7 @@ func main() { loader := api.Loader{ BaseImport: svcImportPath, IgnoreUnsupportedAPIs: ignoreUnsupportedAPIs, + StrictServiceId: strictServiceId, } apis, err := loader.Load(modelPaths) diff --git a/service/generate.go b/service/generate.go index 3ffc9fcc5f..852e98e687 100644 --- a/service/generate.go +++ b/service/generate.go @@ -1,5 +1,5 @@ // Package service contains automatically generated AWS clients. package service -//go:generate go run -tags codegen ../private/model/cli/gen-api/main.go -path=../service ../models/apis/*/*/api-2.json +//go:generate go run -tags codegen ../private/model/cli/gen-api/main.go -use-service-id -path=../service ../models/apis/*/*/api-2.json //go:generate gofmt -s -w ../service