private void WriteClientCtor(CodeWriter writer, RestClient restClient, CSharpType cs) { writer.WriteXmlDocumentationSummary($"Initializes a new instance of {cs.Name}"); writer.WriteXmlDocumentationParameter(ClientDiagnosticsVariable, "The handler for diagnostic messaging in the client."); writer.WriteXmlDocumentationParameter(PipelineVariable, "The HTTP pipeline for sending and receiving REST requests and responses."); foreach (Parameter parameter in restClient.Parameters) { writer.WriteXmlDocumentationParameter(parameter.Name, parameter.Description); } if (restClient.Parameters.HasAnyNullCheck()) { writer.WriteXmlDocumentationException(typeof(ArgumentNullException), "This occurs when one of the required arguments is null."); } writer.Append($"public {cs.Name:D}({typeof(ClientDiagnostics)} {ClientDiagnosticsVariable}, {typeof(HttpPipeline)} {PipelineVariable},"); foreach (Parameter clientParameter in restClient.Parameters) { writer.WriteParameter(clientParameter); } writer.RemoveTrailingComma(); writer.Line($")"); using (writer.Scope()) { writer.WriteParameterNullChecks(restClient.Parameters); foreach (Parameter clientParameter in restClient.Parameters) { writer.Line($"this.{clientParameter.Name} = {clientParameter.Name};"); } writer.Line($"{ClientDiagnosticsField} = {ClientDiagnosticsVariable};"); writer.Line($"{PipelineField} = {PipelineVariable};"); } writer.Line(); }
public static void WriteAggregateClient(CodeWriter writer, BuildContext context) { var title = context.Configuration.LibraryName; using (writer.Scope($"namespace {context.Configuration.Namespace}")) { Dictionary <string, Parameter> allParameters = new Dictionary <string, Parameter>(); foreach (var parameter in context.Library.Clients.SelectMany(p => p.RestClient.Parameters)) { if (ManagementClientWriterHelpers.IsApiVersionParameter(parameter)) { continue; } allParameters[parameter.Name] = parameter; } writer.WriteXmlDocumentationSummary($"{title} service management client."); using (writer.Scope($"public class {title}ManagementClient")) { writer.Line($"private readonly {typeof(ClientDiagnostics)} {ClientDiagnosticsField};"); writer.Line($"private readonly {typeof(HttpPipeline)} {PipelineField};"); foreach (var parameter in allParameters.Values) { writer.Line($"private readonly {parameter.Type} _{parameter.Name};"); } writer.Line(); writer.WriteXmlDocumentationSummary($"Initializes a new instance of {title}ManagementClient for mocking."); using (writer.Scope($"protected {title}ManagementClient()")) { } writer.Line(); writer.WriteXmlDocumentationSummary($"Initializes a new instance of {title}ManagementClient"); foreach (Parameter parameter in allParameters.Values) { if (ManagementClientWriterHelpers.IsEndpointParameter(parameter)) { continue; } writer.WriteXmlDocumentationParameter(parameter.Name, parameter.Description); } writer.WriteXmlDocumentationParameter(TokenCredentialVariable, "The OAuth token for making client requests."); writer.WriteXmlDocumentationParameter(OptionsVariable, "The options for configuring the client."); writer.Append($"public {title}ManagementClient("); foreach (Parameter parameter in allParameters.Values) { if (ManagementClientWriterHelpers.IsEndpointParameter(parameter)) { continue; } writer.WriteParameter(parameter); } writer.Append($"{typeof(TokenCredential)} {TokenCredentialVariable}, {title}ManagementClientOptions {OptionsVariable} = null) : this("); foreach (Parameter parameter in allParameters.Values) { // Pass the default host if (ManagementClientWriterHelpers.IsEndpointParameter(parameter)) { writer.Append($"null, "); continue; } writer.Append($"{parameter.Name},"); } writer.Line($"{TokenCredentialVariable}, {OptionsVariable})"); using (writer.Scope()) { } writer.WriteXmlDocumentationSummary($"Initializes a new instance of {title}ManagementClient"); foreach (Parameter parameter in allParameters.Values) { writer.WriteXmlDocumentationParameter(parameter.Name, parameter.Description); } writer.WriteXmlDocumentationParameter(TokenCredentialVariable, "The OAuth token for making client requests."); writer.WriteXmlDocumentationParameter(OptionsVariable, "The options for configuring the client."); if (allParameters.Values.HasAnyNullCheck()) { writer.WriteXmlDocumentationException(typeof(ArgumentNullException), "This occurs when one of the required arguments is null."); } writer.Append($"public {title}ManagementClient("); foreach (Parameter parameter in allParameters.Values) { writer.WriteParameter(parameter, false); } writer.Append($"{typeof(TokenCredential)} {TokenCredentialVariable}, {title}ManagementClientOptions {OptionsVariable} = null)"); using (writer.Scope()) { writer.WriteParameterNullChecks(allParameters.Values); writer.Line($"{OptionsVariable} ??= new {title}ManagementClientOptions();"); writer.Line($"{ClientDiagnosticsField} = new {typeof(ClientDiagnostics)}({OptionsVariable});"); writer.Line($"{PipelineField} = {typeof(ManagementPipelineBuilder)}.Build({TokenCredentialVariable}, endpoint, {OptionsVariable});"); foreach (Parameter parameter in allParameters.Values) { writer.Line($"_{parameter.Name} = {parameter.Name};"); } } writer.Line(); foreach (var client in context.Library.Clients) { writer.WriteXmlDocumentationSummary($"Creates a new instance of {client.Type.Name}"); using (writer.Scope($"public virtual {client.Type} Get{client.Type.Name}()")) { writer.Append($"return new {client.Type}({ClientDiagnosticsField}, {PipelineField}, "); foreach (var parameter in client.RestClient.Parameters) { if (ManagementClientWriterHelpers.IsApiVersionParameter(parameter)) { continue; } writer.Append($"_{parameter.Name}, "); } writer.RemoveTrailingComma(); writer.Line($");"); } writer.Line(); } } } }