powershell/resources/templates/azureServiceClient.ejs (84 lines of code) (raw):
<%- project.commentHeader %>
namespace <%- project.namespace %>
{
using System.Linq;
using Microsoft.Rest;
<% project.model.usings.forEach(function(using){ -%>
using <%- using %>;
<% }); -%>
<% if (project.model.info.description) { -%>
/// <summary>
/// <%=project.helper.wrapComments(' ', '/// ', project.model.info.description)%>
/// </summary>
<% } -%>
<% var client = project.model.info.title -%>
public partial class <%- client %> : Microsoft.Rest.ServiceClient<<%- client %>>, I<%- client %>, IAzureClient
{
<%# ToDo: add ServiceClientBodyTemplate -%>
<%- include('serviceClientBody', {project: project}) -%>
/// <summary>
/// An optional partial-method to perform custom initialization.
/// </summary>
partial void CustomInitialize();
/// <summary>
/// Initializes client properties.
/// </summary>
private void Initialize()
{
<% project.model.operationGroups.filter(methodGroup => methodGroup.$key != '').forEach(function(methodGroup){ -%>
<% var key = project.helper.ConvertToValidMethodGroupKey(methodGroup.$key)-%>
this.<%- project.helper.PascalCase(methodGroup.$key) %> = new <%- project.helper.PascalCase(key) %>Operations(this);
<% }); -%>
this.BaseUri = new System.Uri("https://management.azure.com");
<% (project.model.globalParameters || []).filter(p => p.language.default.name != '$host' && !!p.clientDefaultValue).forEach(function(parameter){ -%>
this.<%- parameter.language.default.name %> = <%- parameter.schema.type == 'string' || (parameter.schema.type == 'constant' && parameter.schema.valueType.type == 'string') ? `"${parameter.clientDefaultValue}"`: parameter.clientDefaultValue %>;
<%}); -%>
SerializationSettings = new Newtonsoft.Json.JsonSerializerSettings
{
Formatting = Newtonsoft.Json.Formatting.Indented,
DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc,
NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore,
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize,
ContractResolver = new Microsoft.Rest.Serialization.ReadOnlyJsonContractResolver(),
Converters = new System.Collections.Generic.List<Newtonsoft.Json.JsonConverter>
{
new Microsoft.Rest.Serialization.Iso8601TimeSpanConverter()
}
};
<% if(project.needsTransformationConverter()) {-%>
SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.TransformationJsonConverter());
<% } -%>
DeserializationSettings = new Newtonsoft.Json.JsonSerializerSettings
{
DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc,
NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore,
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize,
ContractResolver = new Microsoft.Rest.Serialization.ReadOnlyJsonContractResolver(),
Converters = new System.Collections.Generic.List<Newtonsoft.Json.JsonConverter>
{
new Microsoft.Rest.Serialization.Iso8601TimeSpanConverter()
}
};
<%# ToDo: need support for polymorphicType -%>
<%(project.model.schemas.objects||[]).filter(m => m.discriminator).forEach(function(m){-%>
SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter<<%-m.language.default.name%>>("<%-m.discriminator.property.serializedName%>"));
DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter<<%-m.language.default.name%>>("<%-m.discriminator.property.serializedName%>"));
<%});-%>
CustomInitialize();
<% if(project.needsTransformationConverter()) {-%>
DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.TransformationJsonConverter());
<% } -%>
DeserializationSettings.Converters.Add(new Microsoft.Rest.Azure.CloudErrorJsonConverter());
}
<%# ToDo: Add method whose group is empty, and need to check in which case the group is empty.-%>
<% var methodGroupWithoutKey = (project.state.model.operationGroups || []).filter(op => op.$key == '')
if (methodGroupWithoutKey.length > 0) {
var methodGroup = methodGroupWithoutKey[0]
methodGroup.operations.forEach(function(method){
-%>
<%- include('azureMethod', {method: method, clientPrefix: ''}) -%>
<% });} -%>
}
}