< Summary

Information
Class: Elsa.Diagnostics.ConsoleLogs.Contracts.ConsoleStreamJsonConverter
Assembly: Elsa.Diagnostics.ConsoleLogs
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Diagnostics.ConsoleLogs/Contracts/ConsoleStreamJsonConverter.cs
Line coverage
37%
Covered lines: 10
Uncovered lines: 17
Coverable lines: 27
Total lines: 56
Line coverage: 37%
Branch coverage
43%
Covered branches: 13
Total branches: 30
Branch coverage: 43.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Read(...)16.66%9657.14%
Write(...)0%4260%
ReadString(...)85.71%151485.71%
ReadNumber(...)0%2040%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Diagnostics.ConsoleLogs/Contracts/ConsoleStreamJsonConverter.cs

#LineLine coverage
 1using System.Text.Json;
 2using System.Text.Json.Serialization;
 3
 4namespace Elsa.Diagnostics.ConsoleLogs.Contracts;
 5
 6/// <summary>
 7/// Converts the public console stream filter contract values.
 8/// </summary>
 9public sealed class ConsoleStreamJsonConverter : JsonConverter<ConsoleStream?>
 10{
 11    public override ConsoleStream? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
 12    {
 413        return reader.TokenType switch
 414        {
 015            JsonTokenType.Null => null,
 416            JsonTokenType.String => ReadString(reader.GetString()),
 017            JsonTokenType.Number => ReadNumber(ref reader),
 018            _ => throw new JsonException("The console log stream filter must be 'stdout', 'stderr', or null.")
 419        };
 20    }
 21
 22    public override void Write(Utf8JsonWriter writer, ConsoleStream? value, JsonSerializerOptions options)
 23    {
 024        if (value == null)
 25        {
 026            writer.WriteNullValue();
 027            return;
 28        }
 29
 030        writer.WriteStringValue(value.Value switch
 031        {
 032            ConsoleStream.Stdout => "stdout",
 033            ConsoleStream.Stderr => "stderr",
 034            _ => throw new JsonException($"Unsupported console stream value '{value}'.")
 035        });
 036    }
 37
 38    private static ConsoleStream? ReadString(string? value)
 39    {
 440        return value?.Trim().ToLowerInvariant() switch
 441        {
 242            null or "" or "all" => null,
 143            "stdout" => ConsoleStream.Stdout,
 144            "stderr" => ConsoleStream.Stderr,
 045            _ => throw new JsonException("The console log stream filter must be 'stdout', 'stderr', or null.")
 446        };
 47    }
 48
 49    private static ConsoleStream ReadNumber(ref Utf8JsonReader reader)
 50    {
 051        if (!reader.TryGetInt32(out var value) || !Enum.IsDefined(typeof(ConsoleStream), value))
 052            throw new JsonException("The console log stream filter has an unsupported numeric value.");
 53
 054        return (ConsoleStream)value;
 55    }
 56}