< 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
54%
Covered lines: 17
Uncovered lines: 14
Coverable lines: 31
Total lines: 68
Line coverage: 54.8%
Branch coverage
20%
Covered branches: 2
Total branches: 10
Branch coverage: 20%
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%210%
Read(...)0%4260%
Write(...)50%44100%

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 />
 306918    public OutputJsonConverter(ISerializationTypeRegistry workflowJsonTypeRegistry)
 19    {
 306920        _workflowJsonTypeRegistry = workflowJsonTypeRegistry;
 306921    }
 22
 23    /// <inheritdoc />
 024    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    {
 029        if (!JsonDocument.TryParseValue(ref reader, out var doc))
 030            return null;
 31
 032        if (!doc.RootElement.TryGetProperty("typeName", out _))
 033            return null;
 34
 035        var memoryReferenceElement = doc.RootElement.GetProperty("memoryReference");
 36
 037        if (!memoryReferenceElement.TryGetProperty("id", out var memoryReferenceIdElement))
 038            return default;
 39
 040        var variable = new Variable
 041        {
 042            Id = memoryReferenceIdElement.GetString()!
 043        };
 044        variable.Name = variable.Id;
 45
 046        return (Output<T>)Activator.CreateInstance(typeof(Output<T>), variable)!;
 47    }
 48
 49    /// <inheritdoc />
 50    public override void Write(Utf8JsonWriter writer, Output<T>? value, JsonSerializerOptions options)
 51    {
 50452        var valueType = typeof(T);
 50453        var valueTypeAlias = SerializationTypeResolver.TryGetAlias(_workflowJsonTypeRegistry, valueType, out var alias)
 50454            ? alias
 50455            : valueType.GetSimpleAssemblyQualifiedName();
 56
 50457        var model = new
 50458        {
 50459            TypeName = valueTypeAlias,
 50460            MemoryReference = value == null ? null : new
 50461            {
 50462                Id = value.MemoryBlockReference().Id
 50463            }
 50464        };
 65
 50466        JsonSerializer.Serialize(writer, model, options);
 50467    }
 68}