< Summary

Information
Class: Elsa.Workflows.Serialization.Converters.OutputJsonConverter<T>
Assembly: Elsa.Workflows.Core
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Core/Serialization/Converters/OutputJsonConverter.cs
Line coverage
92%
Covered lines: 46
Uncovered lines: 4
Coverable lines: 50
Total lines: 102
Line coverage: 92%
Branch coverage
67%
Covered branches: 19
Total branches: 28
Branch coverage: 67.8%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
CanConvert(...)100%11100%
Read(...)66.66%191887.5%
Write(...)70%101095.45%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Core/Serialization/Converters/OutputJsonConverter.cs

#LineLine coverage
 1using System.Text.Json;
 2using System.Text.Json.Serialization;
 3using Elsa.Extensions;
 4using Elsa.Workflows.Memory;
 5using Elsa.Workflows.Models;
 6using Elsa.Common.Serialization;
 7
 8namespace Elsa.Workflows.Serialization.Converters;
 9
 10/// <summary>
 11/// Serializes <see cref="Input"/> objects.
 12/// </summary>
 13public class OutputJsonConverter<T> : JsonConverter<Output<T>?>
 14{
 15    private readonly ISerializationTypeRegistry _workflowJsonTypeRegistry;
 16
 17    /// <inheritdoc />
 294618    public OutputJsonConverter(ISerializationTypeRegistry workflowJsonTypeRegistry)
 19    {
 294620        _workflowJsonTypeRegistry = workflowJsonTypeRegistry;
 294621    }
 22
 23    /// <inheritdoc />
 224    public override bool CanConvert(Type typeToConvert) => typeof(Output).IsAssignableFrom(typeToConvert);
 25
 26    /// <inheritdoc />
 27    public override Output<T>? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
 28    {
 229        if (!JsonDocument.TryParseValue(ref reader, out var doc))
 030            return null;
 31
 232        if (!doc.RootElement.TryGetProperty("typeName", out _))
 033            return null;
 34
 235        var memoryReferenceElement = doc.RootElement.GetProperty("memoryReference");
 36
 237        if (!memoryReferenceElement.TryGetProperty("id", out var memoryReferenceIdElement))
 038            return default;
 39
 240        var variable = new Variable
 241        {
 242            Id = memoryReferenceIdElement.GetString()!
 243        };
 244        variable.Name = variable.Id;
 45
 246        var output = (Output<T>)Activator.CreateInstance(typeof(Output<T>), variable)!;
 47
 248        if (doc.RootElement.TryGetProperty("converter", out var converterElement) &&
 249            converterElement.ValueKind == JsonValueKind.Object &&
 250            converterElement.TryGetProperty("id", out var converterIdElement))
 51        {
 152            var settings = converterElement.TryGetProperty("settings", out var settingsElement)
 153                ? settingsElement
 154                : (JsonElement?)null;
 155            var converterId = converterIdElement.ValueKind == JsonValueKind.String
 156                ? converterIdElement.GetString()
 157                : null;
 158            output.Converter = new(converterId ?? string.Empty, settings);
 59        }
 60
 261        return output;
 62    }
 63
 64    /// <inheritdoc />
 65    public override void Write(Utf8JsonWriter writer, Output<T>? value, JsonSerializerOptions options)
 66    {
 50667        var valueType = typeof(T);
 50668        var valueTypeAlias = SerializationTypeResolver.TryGetAlias(_workflowJsonTypeRegistry, valueType, out var alias)
 50669            ? alias
 50670            : valueType.GetSimpleAssemblyQualifiedName();
 71
 50672        writer.WriteStartObject();
 50673        writer.WriteString("typeName", valueTypeAlias);
 50674        writer.WritePropertyName("memoryReference");
 75
 50676        if (value == null)
 077            writer.WriteNullValue();
 78        else
 79        {
 50680            writer.WriteStartObject();
 50681            writer.WriteString("id", value.MemoryBlockReference().Id);
 50682            writer.WriteEndObject();
 83        }
 84
 50685        if (value?.Converter != null)
 86        {
 187            writer.WritePropertyName("converter");
 188            writer.WriteStartObject();
 189            writer.WriteString("id", value.Converter.Id);
 90
 191            if (value.Converter.Settings is { } settings)
 92            {
 193                writer.WritePropertyName("settings");
 194                settings.WriteTo(writer);
 95            }
 96
 197            writer.WriteEndObject();
 98        }
 99
 506100        writer.WriteEndObject();
 506101    }
 102}