#@ template language="C#" inherits="BaseGenerator" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#
AddLicenseHeader();
#>
using System;
using System.Runtime.ExceptionServices;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Net;
using <#=this.Config.Namespace#>.Model;
using <#=this.Config.Namespace#>.Model.Internal.MarshallTransformations;
using <#=this.Config.Namespace#>.Internal;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
using Amazon.Runtime.Internal.Auth;
using Amazon.Runtime.Internal.Transform;
namespace <#=this.Config.Namespace#>
{
<# this.FormatServiceClientDocumentation(this.Config.ServiceModel.Documentation); #>
public partial class Amazon<#=this.Config.ClassName#>Client : AmazonServiceClient, IAmazon<#=this.Config.ClassName#>
{
private static IServiceMetadata serviceMetadata = new Amazon<#=this.Config.ClassName#>Metadata();
<#
// Generates generic constructors for the service if enabled in the model
if(this.Config.GenerateConstructors)
{
var usesBearerAuth = this.Config.ServiceModel.SignatureVersion == "bearer";
var fallbackToAnonymousCredentials = usesBearerAuth;
#>
#region Constructors
///
/// Constructs Amazon<#=this.Config.ClassName#>Client with the credentials loaded from the application's
/// default configuration, and if unsuccessful from the Instance Profile service on an EC2 instance.
///
/// Example App.config with credentials set.
///
/// <?xml version="1.0" encoding="utf-8" ?>
/// <configuration>
/// <appSettings>
/// <add key="AWSProfileName" value="AWS Default"/>
/// </appSettings>
/// </configuration>
///
///
///
public Amazon<#=this.Config.ClassName#>Client()
: base(FallbackCredentialsFactory.GetCredentials(<#= fallbackToAnonymousCredentials ? "fallbackToAnonymous: true" : ""#>), new Amazon<#=this.Config.ClassName#>Config()) { }
///
/// Constructs Amazon<#=this.Config.ClassName#>Client with the credentials loaded from the application's
/// default configuration, and if unsuccessful from the Instance Profile service on an EC2 instance.
///
/// Example App.config with credentials set.
///
/// <?xml version="1.0" encoding="utf-8" ?>
/// <configuration>
/// <appSettings>
/// <add key="AWSProfileName" value="AWS Default"/>
/// </appSettings>
/// </configuration>
///
///
///
/// The region to connect.
public Amazon<#=this.Config.ClassName#>Client(RegionEndpoint region)
: base(FallbackCredentialsFactory.GetCredentials(<#= fallbackToAnonymousCredentials ? "fallbackToAnonymous: true" : ""#>), new Amazon<#=this.Config.ClassName#>Config{RegionEndpoint = region}) { }
///
/// Constructs Amazon<#=this.Config.ClassName#>Client with the credentials loaded from the application's
/// default configuration, and if unsuccessful from the Instance Profile service on an EC2 instance.
///
/// Example App.config with credentials set.
///
/// <?xml version="1.0" encoding="utf-8" ?>
/// <configuration>
/// <appSettings>
/// <add key="AWSProfileName" value="AWS Default"/>
/// </appSettings>
/// </configuration>
///
///
///
/// The Amazon<#=this.Config.ClassName#>Client Configuration Object
public Amazon<#=this.Config.ClassName#>Client(Amazon<#=this.Config.ClassName#>Config config)
: base(FallbackCredentialsFactory.GetCredentials(config<#= fallbackToAnonymousCredentials ? ", fallbackToAnonymous: true" : ""#>), config){}
///
/// Constructs Amazon<#=this.Config.ClassName#>Client with AWS Credentials
///
/// AWS Credentials
public Amazon<#=this.Config.ClassName#>Client(AWSCredentials credentials)
: this(credentials, new Amazon<#=this.Config.ClassName#>Config())
{
}
///
/// Constructs Amazon<#=this.Config.ClassName#>Client with AWS Credentials
///
/// AWS Credentials
/// The region to connect.
public Amazon<#=this.Config.ClassName#>Client(AWSCredentials credentials, RegionEndpoint region)
: this(credentials, new Amazon<#=this.Config.ClassName#>Config{RegionEndpoint = region})
{
}
///
/// Constructs Amazon<#=this.Config.ClassName#>Client with AWS Credentials and an
/// Amazon<#=this.Config.ClassName#>Client Configuration object.
///
/// AWS Credentials
/// The Amazon<#=this.Config.ClassName#>Client Configuration Object
public Amazon<#=this.Config.ClassName#>Client(AWSCredentials credentials, Amazon<#=this.Config.ClassName#>Config clientConfig)
: base(credentials, clientConfig)
{
}
///
/// Constructs Amazon<#=this.Config.ClassName#>Client with AWS Access Key ID and AWS Secret Key
///
/// AWS Access Key ID
/// AWS Secret Access Key
public Amazon<#=this.Config.ClassName#>Client(string awsAccessKeyId, string awsSecretAccessKey)
: this(awsAccessKeyId, awsSecretAccessKey, new Amazon<#=this.Config.ClassName#>Config())
{
}
///
/// Constructs Amazon<#=this.Config.ClassName#>Client with AWS Access Key ID and AWS Secret Key
///
/// AWS Access Key ID
/// AWS Secret Access Key
/// The region to connect.
public Amazon<#=this.Config.ClassName#>Client(string awsAccessKeyId, string awsSecretAccessKey, RegionEndpoint region)
: this(awsAccessKeyId, awsSecretAccessKey, new Amazon<#=this.Config.ClassName#>Config() {RegionEndpoint=region})
{
}
///
/// Constructs Amazon<#=this.Config.ClassName#>Client with AWS Access Key ID, AWS Secret Key and an
/// Amazon<#=this.Config.ClassName#>Client Configuration object.
///
/// AWS Access Key ID
/// AWS Secret Access Key
/// The Amazon<#=this.Config.ClassName#>Client Configuration Object
public Amazon<#=this.Config.ClassName#>Client(string awsAccessKeyId, string awsSecretAccessKey, Amazon<#=this.Config.ClassName#>Config clientConfig)
: base(awsAccessKeyId, awsSecretAccessKey, clientConfig)
{
}
///
/// Constructs Amazon<#=this.Config.ClassName#>Client with AWS Access Key ID and AWS Secret Key
///
/// AWS Access Key ID
/// AWS Secret Access Key
/// AWS Session Token
public Amazon<#=this.Config.ClassName#>Client(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken)
: this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new Amazon<#=this.Config.ClassName#>Config())
{
}
///
/// Constructs Amazon<#=this.Config.ClassName#>Client with AWS Access Key ID and AWS Secret Key
///
/// AWS Access Key ID
/// AWS Secret Access Key
/// AWS Session Token
/// The region to connect.
public Amazon<#=this.Config.ClassName#>Client(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, RegionEndpoint region)
: this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new Amazon<#=this.Config.ClassName#>Config{RegionEndpoint = region})
{
}
///
/// Constructs Amazon<#=this.Config.ClassName#>Client with AWS Access Key ID, AWS Secret Key and an
/// Amazon<#=this.Config.ClassName#>Client Configuration object.
///
/// AWS Access Key ID
/// AWS Secret Access Key
/// AWS Session Token
/// The Amazon<#=this.Config.ClassName#>Client Configuration Object
public Amazon<#=this.Config.ClassName#>Client(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, Amazon<#=this.Config.ClassName#>Config clientConfig)
: base(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, clientConfig)
{
}
#endregion
<#
}
#>
<#
// Creates paginators for service if available
if (this.Config.ServiceModel.HasPaginators)
{
#>
#if AWS_ASYNC_ENUMERABLES_API
private I<#=this.Config.ServiceNameRoot#>PaginatorFactory _paginators;
///
/// Paginators for the service
///
public I<#=this.Config.ServiceNameRoot#>PaginatorFactory Paginators
{
get
{
if (this._paginators == null)
{
this._paginators = new <#=this.Config.ServiceNameRoot#>PaginatorFactory(this);
}
return this._paginators;
}
}
#endif
<#
}
#>
#region Overrides
///
/// Creates the signer for the service.
///
protected override AbstractAWSSigner CreateSigner()
{
return new <#=GeneratorHelpers.DetermineSigner(this.Config.ServiceModel.SignatureVersion, this.Config.ClassName)#>();
}
<# if(this.Config.ServiceModel.Customizations.PipelineOverride != null || this.Config.EndpointsRuleSet != null) { #>
///
/// Customizes the runtime pipeline.
///
/// Runtime pipeline for the current client.
protected override void CustomizeRuntimePipeline(RuntimePipeline pipeline)
{
<#
var pipelineOverrides = this.Config.ServiceModel.Customizations.PipelineOverride;
if (pipelineOverrides != null)
{
foreach(var o in pipelineOverrides.Overrides )
{
if(!string.IsNullOrEmpty(o.Condition))
{
#>
if(<#=o.Condition#>)
{
<#
if(o.OverrideMethod == "remove")
{
#>
pipeline.<#=o.FormattedOverrideMethod#>();
<#
}
else
{
#>
pipeline.<#=o.FormattedOverrideMethod#>(new <#=o.NewType#>(<#=o.ConstructorInput#>));
<#
}
#>
}
<#
}
else if(o.OverrideMethod == "remove")
{
#>
pipeline.<#=o.FormattedOverrideMethod#>();
<#
}
else
{
#>
pipeline.<#=o.FormattedOverrideMethod#>(new <#=o.NewType#>(<#=o.ConstructorInput#>));
<#
}
}
}
#>
<# if (this.Config.EndpointsRuleSet != null) { #>
pipeline.RemoveHandler();
pipeline.AddHandlerAfter(new Amazon<#=this.Config.ClassName#>EndpointResolver());
<# } #>
}
<#
}
#>
///
/// Capture metadata for the service.
///
protected override IServiceMetadata ServiceMetadata
{
get
{
return serviceMetadata;
}
}
#endregion
#region Dispose
///
/// Disposes the service client.
///
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
#endregion
<#
var endpointOperation = this.Config.ServiceModel.FindEndpointOperation();
if(endpointOperation != null)
{
#>
#region EndpointOperation Override
protected override IEnumerable EndpointOperation(EndpointOperationContextBase context)
{
return EndpointDiscoveryResolver.ResolveEndpoints(context, () =>
{
var request = new <#=endpointOperation.Name#>Request
{
<#
if(endpointOperation.RequestHasOperationEndpointOperationMember)
{
#>
Operation = context.OperationName,
<#
}
if(endpointOperation.RequestHasIdentifiersEndpointOperationMember)
{
#>
Identifiers = new Dictionary(context.EndpointDiscoveryData.Identifiers),
<#
}
#>
};
var response = <#=endpointOperation.Name#>(request);
if(response.HttpStatusCode != HttpStatusCode.OK || response.Endpoints == null)
{
return null;
}
var endpoints = new List();
foreach(var endpoint in response.Endpoints)
{
endpoints.Add(new DiscoveryEndpoint(endpoint.Address, endpoint.CachePeriodInMinutes));
}
return endpoints;
});
}
#endregion
<#
}
// Creates the method code for each operation in the model
foreach(var operation in this.Config.ServiceModel.Operations)
{
#>
#region <#=operation.Name#>
<#
if (this.Config.ServiceModel.Customizations.CreateNoArgOverload(operation.Name))
{
if(operation.IsDeprecated)
{
#>
[Obsolete("<#=operation.DeprecationMessage#>")]
<#
}
#>
internal virtual <#=operation.Name#>Response <#=operation.Name#>()
{
return <#=operation.Name#>(new <#=operation.Name#>Request());
}
<#
}
if(operation.IsDeprecated)
{
#>
[Obsolete("<#=operation.DeprecationMessage#>")]
<#
}
#>
internal virtual <#=operation.Name#>Response <#=operation.Name#>(<#=operation.Name#>Request request)
{
var options = new InvokeOptions();
options.RequestMarshaller = <#=operation.Name#>RequestMarshaller.Instance;
options.ResponseUnmarshaller = <#=operation.Name#>ResponseUnmarshaller.Instance;
<#
if(!operation.IsEndpointOperation && operation.EndpointDiscoveryEnabled)
{
#>
options.EndpointDiscoveryMarshaller = <#=operation.Name#>EndpointDiscoveryMarshaller.Instance;
options.EndpointOperation = EndpointOperation;
<#
}
#>
return Invoke<<#=operation.Name#>Response>(request, options);
}
<#
// Creates a version of the operation that takes no arguments and passes a request with no set members if specified in the customizations
if (this.Config.ServiceModel.Customizations.CreateNoArgOverload(operation.Name))
{
#>
<#
this.FormatOperationDocumentationAsync(operation, false);
if(operation.IsDeprecated)
{
#>
[Obsolete("<#=operation.DeprecationMessage#>")]
<#
}
#>
public virtual Task<<#=operation.Name#>Response> <#=operation.Name#>Async(System.Threading.CancellationToken cancellationToken = default(CancellationToken))
{
return <#=operation.Name#>Async(new <#=operation.Name#>Request(), cancellationToken);
}
<#
}
// Add async simple methods
AddSimpleClientMethods(operation, false);
#>
<#
this.FormatOperationDocumentationAsync(operation, true);
if(operation.IsDeprecated)
{
#>
[Obsolete("<#=operation.DeprecationMessage#>")]
<#
}
#>
<#=operation.IsInternal ? "internal" : "public"#> virtual Task<<#=operation.Name#>Response> <#=operation.Name#>Async(<#=operation.Name#>Request request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
{
var options = new InvokeOptions();
options.RequestMarshaller = <#=operation.Name#>RequestMarshaller.Instance;
options.ResponseUnmarshaller = <#=operation.Name#>ResponseUnmarshaller.Instance;
<#
if(!operation.IsEndpointOperation && operation.EndpointDiscoveryEnabled)
{
#>
options.EndpointDiscoveryMarshaller = <#=operation.Name#>EndpointDiscoveryMarshaller.Instance;
options.EndpointOperation = EndpointOperation;
<#
}
#>
return InvokeAsync<<#=operation.Name#>Response>(request, options, cancellationToken);
}
#endregion
<#
}
#>
}
}