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: ''}) -%> <% });} -%> } }