1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package api
- import (
- "path/filepath"
- "strings"
- )
- // customizationPasses Executes customization logic for the API by package name.
- func (a *API) customizationPasses() {
- var svcCustomizations = map[string]func(*API){
- "s3": s3Customizations,
- "cloudfront": cloudfrontCustomizations,
- "dynamodbstreams": dynamodbstreamsCustomizations,
- }
- if fn := svcCustomizations[a.PackageName()]; fn != nil {
- fn(a)
- }
- }
- // s3Customizations customizes the API generation to replace values specific to S3.
- func s3Customizations(a *API) {
- var strExpires *Shape
- for name, s := range a.Shapes {
- // Remove ContentMD5 members
- if _, ok := s.MemberRefs["ContentMD5"]; ok {
- delete(s.MemberRefs, "ContentMD5")
- }
- // Expires should be a string not time.Time since the format is not
- // enforced by S3, and any value can be set to this field outside of the SDK.
- if strings.HasSuffix(name, "Output") {
- if ref, ok := s.MemberRefs["Expires"]; ok {
- if strExpires == nil {
- newShape := *ref.Shape
- strExpires = &newShape
- strExpires.Type = "string"
- strExpires.refs = []*ShapeRef{}
- }
- ref.Shape.removeRef(ref)
- ref.Shape = strExpires
- ref.Shape.refs = append(ref.Shape.refs, &s.MemberRef)
- }
- }
- }
- // Rename "Rule" to "LifecycleRule"
- if s, ok := a.Shapes["Rule"]; ok {
- s.Rename("LifecycleRule")
- }
- }
- // cloudfrontCustomizations customized the API generation to replace values
- // specific to CloudFront.
- func cloudfrontCustomizations(a *API) {
- // MaxItems members should always be integers
- for _, s := range a.Shapes {
- if ref, ok := s.MemberRefs["MaxItems"]; ok {
- ref.ShapeName = "Integer"
- ref.Shape = a.Shapes["Integer"]
- }
- }
- }
- // dynamodbstreamsCustomizations references any duplicate shapes from DynamoDB
- func dynamodbstreamsCustomizations(a *API) {
- p := strings.Replace(a.path, "streams.dynamodb", "dynamodb", -1)
- file := filepath.Join(p, "api-2.json")
- dbAPI := API{}
- dbAPI.Attach(file)
- dbAPI.Setup()
- for n := range a.Shapes {
- if _, ok := dbAPI.Shapes[n]; ok {
- a.Shapes[n].resolvePkg = "github.com/aws/aws-sdk-go/service/dynamodb"
- }
- }
- }
|