endpoints.go raw

   1  package configsources
   2  
   3  import (
   4  	"context"
   5  )
   6  
   7  // ServiceBaseEndpointProvider is needed to search for all providers
   8  // that provide a configured service endpoint
   9  type ServiceBaseEndpointProvider interface {
  10  	GetServiceBaseEndpoint(ctx context.Context, sdkID string) (string, bool, error)
  11  }
  12  
  13  // IgnoreConfiguredEndpointsProvider is needed to search for all providers
  14  // that provide a flag to disable configured endpoints.
  15  //
  16  // Currently duplicated from github.com/aws/aws-sdk-go-v2/config because
  17  // service packages cannot import github.com/aws/aws-sdk-go-v2/config
  18  // due to result import cycle error.
  19  type IgnoreConfiguredEndpointsProvider interface {
  20  	GetIgnoreConfiguredEndpoints(ctx context.Context) (bool, bool, error)
  21  }
  22  
  23  // GetIgnoreConfiguredEndpoints is used in knowing when to disable configured
  24  // endpoints feature.
  25  //
  26  // Currently duplicated from github.com/aws/aws-sdk-go-v2/config because
  27  // service packages cannot import github.com/aws/aws-sdk-go-v2/config
  28  // due to result import cycle error.
  29  func GetIgnoreConfiguredEndpoints(ctx context.Context, configs []interface{}) (value bool, found bool, err error) {
  30  	for _, cfg := range configs {
  31  		if p, ok := cfg.(IgnoreConfiguredEndpointsProvider); ok {
  32  			value, found, err = p.GetIgnoreConfiguredEndpoints(ctx)
  33  			if err != nil || found {
  34  				break
  35  			}
  36  		}
  37  	}
  38  	return
  39  }
  40  
  41  // ResolveServiceBaseEndpoint is used to retrieve service endpoints from configured sources
  42  // while allowing for configured endpoints to be disabled
  43  func ResolveServiceBaseEndpoint(ctx context.Context, sdkID string, configs []interface{}) (value string, found bool, err error) {
  44  	if val, found, _ := GetIgnoreConfiguredEndpoints(ctx, configs); found && val {
  45  		return "", false, nil
  46  	}
  47  
  48  	for _, cs := range configs {
  49  		if p, ok := cs.(ServiceBaseEndpointProvider); ok {
  50  			value, found, err = p.GetServiceBaseEndpoint(context.Background(), sdkID)
  51  			if err != nil || found {
  52  				break
  53  			}
  54  		}
  55  	}
  56  	return
  57  }
  58