From 232ef21544cd1a57e1fada7c08f4f703633c4467 Mon Sep 17 00:00:00 2001 From: Anthony Martin <38542602+anthony-c-martin@users.noreply.github.com> Date: Fri, 5 Jul 2024 17:08:24 -0400 Subject: [PATCH] Fixes for issues noticed integrating with https://github.com/anthony-c-martin/bicep-local-providers --- .../GrpcBuiltInLocalExtension.cs | 47 ++++++++++++++----- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/src/Bicep.Local.Deploy/Extensibility/GrpcBuiltInLocalExtension.cs b/src/Bicep.Local.Deploy/Extensibility/GrpcBuiltInLocalExtension.cs index 0f549b86dfe..28979bf1557 100644 --- a/src/Bicep.Local.Deploy/Extensibility/GrpcBuiltInLocalExtension.cs +++ b/src/Bicep.Local.Deploy/Extensibility/GrpcBuiltInLocalExtension.cs @@ -3,6 +3,7 @@ using System.Diagnostics; using System.Text.Json.Nodes; +using Azure.Deployments.Extensibility.Core.V2.Json; using Bicep.Local.Extension.Rpc; using Google.Protobuf.Collections; using Json.Pointer; @@ -88,23 +89,45 @@ public override async Task Preview(Extensib => Convert(await client.PreviewAsync(Convert(request), cancellationToken: cancellationToken)); private static Rpc.ResourceReference Convert(ExtensibilityV2.ResourceReference request) - => new() + { + Rpc.ResourceReference output = new() { - ApiVersion = request.ApiVersion, - Config = request.Config.ToJson(), - Identifiers = request.Identifiers.ToJson(), - Type = request.Type + Type = request.Type, + Identifiers = request.Identifiers.ToJsonString(), }; + if (request.ApiVersion is {}) + { + output.ApiVersion = request.ApiVersion; + } + if (request.Config is {}) + { + output.Config = request.Config.ToJsonString(); + } + + return output; + } + private static Rpc.ResourceSpecification Convert(ExtensibilityV2.ResourceSpecification request) - => new() + { + Rpc.ResourceSpecification output = new() { - ApiVersion = request.ApiVersion, - Config = request.Config.ToJson(), - Properties = request.Properties.ToJson(), - Type = request.Type + Type = request.Type, + Properties = request.Properties.ToJsonString(), }; + if (request.ApiVersion is {}) + { + output.ApiVersion = request.ApiVersion; + } + if (request.Config is {}) + { + output.Config = request.Config.ToJsonString(); + } + + return output; + } + private static ExtensibilityV2.ErrorData Convert(Rpc.ErrorData errorData) => new(new ExtensibilityV2.Error(errorData.Error.Code, errorData.Error.Message, JsonPointer.Empty, Convert(errorData.Error.Details), ConvertInnerError(errorData.Error.InnerError))); @@ -116,8 +139,8 @@ private static ExtensibilityV2.ErrorDetail Convert(Rpc.ErrorDetail detail) private static LocalExtensibilityOperationResponse Convert(Rpc.LocalExtensibilityOperationResponse response) => new( - new ExtensibilityV2.Resource(response.Resource.Type, response.Resource.ApiVersion, ToJsonObject(response.Resource.Identifiers, "Parsing response identifiers failed. Please ensure is non-null or empty and is a valid JSON object."), ToJsonObject(response.Resource.Properties, "Parsing response properties failed. Please ensure is non-null or empty and is ensure is a valid JSON object."), response.Resource.Status), - Convert(response.ErrorData)); + response.Resource is {} ? new(response.Resource.Type, response.Resource.ApiVersion, ToJsonObject(response.Resource.Identifiers, "Parsing response identifiers failed. Please ensure is non-null or empty and is a valid JSON object."), ToJsonObject(response.Resource.Properties, "Parsing response properties failed. Please ensure is non-null or empty and is ensure is a valid JSON object."), response.Resource.Status) : null, + response.ErrorData is {} ? Convert(response.ErrorData) : null); private static JsonObject? ConvertInnerError(string innerError) => innerError is null ? null : ToJsonObject(innerError, "Parsing innerError failed. Please ensure is non-null or empty and is a valid JSON object.");