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
|
//go:build codegen
// +build codegen
package api
import (
"fmt"
"text/template"
)
func setupEndpointHostPrefix(op *Operation) {
op.API.AddSDKImport("private/protocol")
buildHandler := fmt.Sprintf("protocol.NewHostPrefixHandler(%q, ",
op.Endpoint.HostPrefix)
if op.InputRef.Shape.HasHostLabelMembers() {
buildHandler += "input.hostLabels"
} else {
buildHandler += "nil"
}
buildHandler += ")"
op.CustomBuildHandlers = append(op.CustomBuildHandlers,
buildHandler,
"protocol.ValidateEndpointHostHandler",
)
}
// HasHostLabelMembers returns true if the shape contains any members which are
// decorated with the hostLabel trait.
func (s *Shape) HasHostLabelMembers() bool {
for _, ref := range s.MemberRefs {
if ref.HostLabel {
return true
}
}
return false
}
var hostLabelsShapeTmpl = template.Must(
template.New("hostLabelsShapeTmpl").
Parse(hostLabelsShapeTmplDef),
)
const hostLabelsShapeTmplDef = `
{{- define "hostLabelsShapeTmpl" }}
func (s *{{ $.ShapeName }}) hostLabels() map[string]string {
return map[string]string{
{{- range $name, $ref := $.MemberRefs }}
{{- if $ref.HostLabel }}
"{{ $name }}": aws.StringValue(s.{{ $name }}),
{{- end }}
{{- end }}
}
}
{{- end }}
`
|