text: // Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
  
  package iam
  
  import (
  	"github.com/aws/aws-sdk-go/aws"
  	"github.com/aws/aws-sdk-go/aws/client"
  	"github.com/aws/aws-sdk-go/aws/client/metadata"
  	"github.com/aws/aws-sdk-go/aws/request"
  	"github.com/aws/aws-sdk-go/aws/signer/v4"
  	"github.com/aws/aws-sdk-go/private/protocol/query"
  )
  
  // IAM provides the API operation methods for making requests to
  // AWS Identity and Access Management. See this package's package overview docs
  // for details on the service.
  //
  // IAM methods are safe to use concurrently. It is not safe to
  // modify mutate any of the struct's properties though.
  type IAM struct {
  	*client.Client
  }
  
  // Used for custom client initialization logic
  var initClient func(*client.Client)
  
  // Used for custom request initialization logic
  var initRequest func(*request.Request)
  
  // Service information constants
  const (
  	ServiceName = "iam"       // Name of service.
  	EndpointsID = ServiceName // ID to lookup a service endpoint with.
  	ServiceID   = "IAM"       // ServiceID is a unique identifer of a specific service.
  )
  
  // New creates a new instance of the IAM client with a session.
  // If additional configuration is needed for the client instance use the optional
  // aws.Config parameter to add your extra config.
  //
  // Example:
  //     // Create a IAM client from just a session.
  //     svc := iam.New(mySession)
  //
  //     // Create a IAM client with additional configuration
  //     svc := iam.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
  func New(p client.ConfigProvider, cfgs ...*aws.Config) *IAM {
  	c := p.ClientConfig(EndpointsID, cfgs...)
  	return newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion, c.SigningName)
  }
  
  // newClient creates, initializes and returns a new service client instance.
  func newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion, signingName string) *IAM {
  	svc := &IAM{
  		Client: client.New(
  			cfg,
  			metadata.ClientInfo{
  				ServiceName:   ServiceName,
  				ServiceID:     ServiceID,
  				SigningName:   signingName,
  				SigningRegion: signingRegion,
  				Endpoint:      endpoint,
  				APIVersion:    "2010-05-08",
  			},
  			handlers,
  		),
  	}
  
  	// Handlers
  	svc.Handlers.Sign.PushBackNamed(v4.SignRequestHandler)
  	svc.Handlers.Build.PushBackNamed(query.BuildHandler)
  	svc.Handlers.Unmarshal.PushBackNamed(query.UnmarshalHandler)
  	svc.Handlers.UnmarshalMeta.PushBackNamed(query.UnmarshalMetaHandler)
  	svc.Handlers.UnmarshalError.PushBackNamed(query.UnmarshalErrorHandler)
  
  	// Run custom client initialization if present
  	if initClient != nil {
  		initClient(svc.Client)
  	}
  
  	return svc
  }
  
  // newRequest creates a new request for a IAM operation and runs any
  // custom request initialization.
  func (c *IAM) newRequest(op *request.Operation, params, data interface{}) *request.Request {
  	req := c.NewRequest(op, params, data)
  
  	// Run custom request initialization if present
  	if initRequest != nil {
  		initRequest(req)
  	}
  
  	return req
  }
  