File: ApplicationModel\RequiredCommandValidationResult.cs
Web Access
Project: src\src\Aspire.Hosting\Aspire.Hosting.csproj (Aspire.Hosting)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Diagnostics.CodeAnalysis;
 
namespace Aspire.Hosting.ApplicationModel;
 
/// <summary>
/// Represents the result of validating a required command.
/// </summary>
[Experimental("ASPIRECOMMAND001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
public sealed class RequiredCommandValidationResult
{
    private RequiredCommandValidationResult(bool isValid, string? validationMessage)
    {
        if (!isValid && validationMessage is null)
        {
            throw new ArgumentException("A validation message must be provided for a failed validation.", nameof(validationMessage));
        }
 
        IsValid = isValid;
        ValidationMessage = validationMessage;
    }
 
    /// <summary>
    /// Gets a value indicating whether the command validation succeeded.
    /// </summary>
    [MemberNotNullWhen(false, nameof(ValidationMessage))]
    public bool IsValid { get; }
 
    /// <summary>
    /// Gets an optional validation message describing why validation failed.
    /// </summary>
    public string? ValidationMessage { get; }
 
    /// <summary>
    /// Creates a successful validation result.
    /// </summary>
    /// <returns>A successful validation result.</returns>
    public static RequiredCommandValidationResult Success() => new(true, null);
 
    /// <summary>
    /// Creates a failed validation result with the specified message.
    /// </summary>
    /// <param name="message">A message describing why validation failed.</param>
    /// <returns>A failed validation result.</returns>
    public static RequiredCommandValidationResult Failure(string message) => new(false, message);
}