public record ExtensibleResourceMetadata()

in src/Azure.Deployments.Extensibility.Core/Models.cs [34:103]


    public record ExtensibleResourceMetadata(
        IEnumerable<JsonPath>? ReadOnlyProperties,
        IEnumerable<JsonPath>? ImmutableProperties,
        IEnumerable<JsonPath>? DynamicProperties);

    /// <summary>
    /// Provides error details of a failed extensibility operation.
    /// </summary>
    /// <param name="Code">The error code.</param>
    /// <param name="Target">
    /// The JSON Pointer to the property causing the error. Must start with "/import" or "/resource" depending on
    /// which top level request property the error is on. When the error response is received by the deployments
    /// extensibility host, the JSON Pointer will be augumented with the import alias or resource symbolic name
    /// to make it easier for users to map the error to a location in the deployment template. For example,
    /// "/resource/properties/foo" will be converted to "resources/myResource/properties/foo".
    /// </param>
    /// <param name="Message">The error message.</param>
    /// <param name="SanitizedMessage">Optional. The sanitized error message for logging.</param>
    public record ExtensibilityError(string Code, JsonPointer Target, string Message, string? SanitizedMessage = null);

    /// <summary>
    /// Provides information about an extensibility operation.
    /// </summary>
    /// <typeparam name="TConfig">The extensible config type parameter.</typeparam>
    /// <typeparam name="TProperties">The extensible resource properties type parameter.</typeparam>
    /// <param name="Import">The extensible import.</param>
    /// <param name="Resource">The extensible resource.</param>
    public record ExtensibilityOperationRequest<TConfig, TProperties>(ExtensibleImport<TConfig> Import, ExtensibleResource<TProperties> Resource);

    /// <summary>
    /// Provides information about an extensibility operation request.
    /// </summary>
    /// <param name="Import">The extensible import.</param>
    /// <param name="Resource">The extensible resource.</param>
    public record ExtensibilityOperationRequest(ExtensibleImport<JsonElement> Import, ExtensibleResource<JsonElement> Resource)
        : ExtensibilityOperationRequest<JsonElement, JsonElement>(Import, Resource);

    public abstract record ExtensibilityOperationResponse();

    /// <summary>
    /// Provides information about a successful extensibility operation.
    /// </summary>
    /// <param name="Resource">The updated extensible resource after the operation is complete.</param>
    /// <param name="ResourceMetadata">The extensible resource metadata. The metadata is needed by ARM template What-If to produce clean results. It should only be set for the "previewSave" operation.</param>
    public record ExtensibilityOperationSuccessResponse(ExtensibleResource<JsonElement> Resource, ExtensibleResourceMetadata? ResourceMetadata = null)
        : ExtensibilityOperationResponse();

    /// <summary>
    /// Provides information about a failed extensibility operation.
    /// </summary>
    public record ExtensibilityOperationErrorResponse : ExtensibilityOperationResponse
    {
        [JsonConstructor]
        public ExtensibilityOperationErrorResponse(IEnumerable<ExtensibilityError> errors)
        {
            this.Errors = errors;
        }

        /// <summary>
        /// The extensibility operation error response.
        /// </summary>
        /// <param name="error">The error to return.</param>
        /// <param name="additionalErrors">Additional errors to return.</param>
        public ExtensibilityOperationErrorResponse(ExtensibilityError error, params ExtensibilityError[] additionalErrors)
            : this((new[] { error }).Concat(additionalErrors))
        {
        }

        public IEnumerable<ExtensibilityError> Errors { get; }
    }