123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package client
- import (
- "fmt"
- "github.com/aws/aws-sdk-go/aws"
- "github.com/aws/aws-sdk-go/aws/client/metadata"
- "github.com/aws/aws-sdk-go/aws/request"
- )
- type Config struct {
- Config *aws.Config
- Handlers request.Handlers
- Endpoint string
- SigningRegion string
- SigningName string
- }
- type ConfigProvider interface {
- ClientConfig(serviceName string, cfgs ...*aws.Config) Config
- }
- type ConfigNoResolveEndpointProvider interface {
- ClientConfigNoResolveEndpoint(cfgs ...*aws.Config) Config
- }
- type Client struct {
- request.Retryer
- metadata.ClientInfo
- Config aws.Config
- Handlers request.Handlers
- }
- func New(cfg aws.Config, info metadata.ClientInfo, handlers request.Handlers, options ...func(*Client)) *Client {
- svc := &Client{
- Config: cfg,
- ClientInfo: info,
- Handlers: handlers.Copy(),
- }
- switch retryer, ok := cfg.Retryer.(request.Retryer); {
- case ok:
- svc.Retryer = retryer
- case cfg.Retryer != nil && cfg.Logger != nil:
- s := fmt.Sprintf("WARNING: %T does not implement request.Retryer; using DefaultRetryer instead", cfg.Retryer)
- cfg.Logger.Log(s)
- fallthrough
- default:
- maxRetries := aws.IntValue(cfg.MaxRetries)
- if cfg.MaxRetries == nil || maxRetries == aws.UseServiceDefaultRetries {
- maxRetries = 3
- }
- svc.Retryer = DefaultRetryer{NumMaxRetries: maxRetries}
- }
- svc.AddDebugHandlers()
- for _, option := range options {
- option(svc)
- }
- return svc
- }
- func (c *Client) NewRequest(operation *request.Operation, params interface{}, data interface{}) *request.Request {
- return request.New(c.Config, c.ClientInfo, c.Handlers, c.Retryer, operation, params, data)
- }
- func (c *Client) AddDebugHandlers() {
- if !c.Config.LogLevel.AtLeast(aws.LogDebug) {
- return
- }
- c.Handlers.Send.PushFrontNamed(request.NamedHandler{Name: "awssdk.client.LogRequest", Fn: logRequest})
- c.Handlers.Send.PushBackNamed(request.NamedHandler{Name: "awssdk.client.LogResponse", Fn: logResponse})
- }
|