1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
//go:build codegen
// +build codegen
package main
import (
"flag"
"fmt"
"os"
"sort"
"text/template"
)
const (
sharedConfigType = "&SharedConfig{}"
envConfigType = "&EnvConfig{}"
awsConfigType = "&awsConfig{}"
ec2IMDSRegionType = "&UseEC2IMDSRegion{}"
loadOptionsType = "&LoadOptions{}"
)
var implAsserts = map[string][]string{
"sharedConfigProfileProvider": {envConfigType, loadOptionsType},
"sharedConfigFilesProvider": {envConfigType, loadOptionsType},
"customCABundleProvider": {envConfigType, sharedConfigType, loadOptionsType},
"regionProvider": {envConfigType, sharedConfigType, loadOptionsType, ec2IMDSRegionType},
"credentialsProviderProvider": {loadOptionsType},
"defaultRegionProvider": {loadOptionsType},
"credentialsCacheOptionsProvider": {loadOptionsType},
"bearerAuthTokenProviderProvider": {loadOptionsType},
"bearerAuthTokenCacheOptionsProvider": {loadOptionsType},
"ssoTokenProviderOptionsProvider": {loadOptionsType},
"processCredentialOptions": {loadOptionsType},
"ec2RoleCredentialOptionsProvider": {loadOptionsType},
"endpointCredentialOptionsProvider": {loadOptionsType},
"assumeRoleCredentialOptionsProvider": {loadOptionsType},
"webIdentityRoleCredentialOptionsProvider": {loadOptionsType},
"httpClientProvider": {loadOptionsType},
"apiOptionsProvider": {loadOptionsType},
"retryProvider": {loadOptionsType},
"endpointResolverProvider": {loadOptionsType},
"loggerProvider": {loadOptionsType},
"clientLogModeProvider": {loadOptionsType},
"logConfigurationWarningsProvider": {loadOptionsType},
"ec2IMDSRegionProvider": {loadOptionsType},
"defaultsModeProvider": {envConfigType, sharedConfigType, loadOptionsType},
"defaultsModeIMDSClientProvider": {loadOptionsType},
"retryMaxAttemptsProvider": {envConfigType, sharedConfigType, loadOptionsType},
"retryModeProvider": {envConfigType, sharedConfigType, loadOptionsType},
}
var tplProviderTests = template.Must(template.New("tplProviderTests").Funcs(map[string]interface{}{
"SortKeys": func(m map[string][]string) []string {
var keys []string
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
return keys
},
}).Parse(`
// Code generated by github.com/aws/aws-sdk-go-v2/config. DO NOT EDIT.
package config
{{ $sortedKeys := SortKeys . }}
{{- range $_, $provider := $sortedKeys }}
{{- $implementors := index $ $provider -}}
// {{ $provider }} implementor assertions
var (
{{- range $_, $impl := $implementors }}
_ {{ $provider }} = {{ $impl }}
{{- end }}
)
{{ end -}}
`))
var config = struct {
OutputPath string
}{}
func init() {
flag.StringVar(&config.OutputPath, "output", "", "output file path")
flag.Parse()
}
func main() {
if len(config.OutputPath) == 0 {
panic(fmt.Errorf("output path must be specified"))
}
file, err := os.OpenFile(config.OutputPath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0744)
if err != nil {
panic(fmt.Errorf("failed to open file: %v", err))
}
defer file.Close()
err = tplProviderTests.Execute(file, implAsserts)
if err != nil {
panic(fmt.Errorf("failed to execute template: %v", err))
}
}
|