< Summary

Information
Class: AsiBackbone.Core.Results.BackboneResult
Assembly: AsiBackbone.Core
File(s): /home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/Results/BackboneResult.cs
Line coverage
100%
Covered lines: 23
Uncovered lines: 0
Coverable lines: 23
Total lines: 98
Line coverage: 100%
Branch coverage
100%
Covered branches: 8
Total branches: 8
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
.ctor(...)100%11100%
get_Succeeded()100%11100%
get_Failed()100%11100%
get_Messages()100%11100%
Success()100%11100%
Success(...)100%11100%
Success(...)100%11100%
Failure(...)100%11100%
Failure(...)100%11100%
NormalizeMessages(...)100%88100%

File(s)

/home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/Results/BackboneResult.cs

#LineLine coverage
 1namespace AsiBackbone.Core.Results;
 2
 3/// <summary>
 4/// Represents the outcome of an ASI Backbone operation.
 5/// </summary>
 6public sealed class BackboneResult
 7{
 8    private const string DefaultFailureMessage = "Operation failed.";
 9
 110    private static readonly IReadOnlyList<string> EmptyMessages =
 111        Array.AsReadOnly(Array.Empty<string>());
 12
 1313    private BackboneResult(bool succeeded, IReadOnlyList<string> messages)
 14    {
 1315        Succeeded = succeeded;
 1316        Messages = messages;
 1317    }
 18
 19    /// <summary>
 20    /// Gets a value indicating whether the operation succeeded.
 21    /// </summary>
 2322    public bool Succeeded { get; }
 23
 24    /// <summary>
 25    /// Gets a value indicating whether the operation failed.
 26    /// </summary>
 1027    public bool Failed => !Succeeded;
 28
 29    /// <summary>
 30    /// Gets the messages associated with the operation result.
 31    /// </summary>
 2032    public IReadOnlyList<string> Messages { get; }
 33
 34    /// <summary>
 35    /// Creates a successful result with no messages.
 36    /// </summary>
 37    /// <returns>A successful operation result.</returns>
 38    public static BackboneResult Success()
 39    {
 140        return new BackboneResult(true, EmptyMessages);
 41    }
 42
 43    /// <summary>
 44    /// Creates a successful result with one message.
 45    /// </summary>
 46    /// <param name="message">The message associated with the successful result.</param>
 47    /// <returns>A successful operation result.</returns>
 48    public static BackboneResult Success(string message)
 49    {
 250        return new BackboneResult(true, NormalizeMessages([message]));
 51    }
 52
 53    /// <summary>
 54    /// Creates a successful result with one or more messages.
 55    /// </summary>
 56    /// <param name="messages">The messages associated with the successful result.</param>
 57    /// <returns>A successful operation result.</returns>
 58    public static BackboneResult Success(IEnumerable<string> messages)
 59    {
 460        return new BackboneResult(true, NormalizeMessages(messages));
 61    }
 62
 63    /// <summary>
 64    /// Creates a failed result with one message.
 65    /// </summary>
 66    /// <param name="message">The message associated with the failed result.</param>
 67    /// <returns>A failed operation result.</returns>
 68    public static BackboneResult Failure(string message)
 69    {
 270        return new BackboneResult(false, NormalizeMessages([message], DefaultFailureMessage));
 71    }
 72
 73    /// <summary>
 74    /// Creates a failed result with one or more messages.
 75    /// </summary>
 76    /// <param name="messages">The messages associated with the failed result.</param>
 77    /// <returns>A failed operation result.</returns>
 78    public static BackboneResult Failure(IEnumerable<string> messages)
 79    {
 480        return new BackboneResult(false, NormalizeMessages(messages, DefaultFailureMessage));
 81    }
 82
 83    private static IReadOnlyList<string> NormalizeMessages(
 84        IEnumerable<string>? messages,
 85        string? fallbackMessage = null)
 86    {
 1287        string[] normalizedMessages = messages?
 1788            .Where(message => !string.IsNullOrWhiteSpace(message))
 889            .Select(message => message.Trim())
 1290            .ToArray() ?? [];
 91
 1292        return normalizedMessages.Length == 0
 1293            ? fallbackMessage is null
 1294                ? EmptyMessages
 1295                : Array.AsReadOnly([fallbackMessage])
 1296            : Array.AsReadOnly(normalizedMessages);
 97    }
 98}