< Summary

Information
Class: Elsa.Common.Serialization.SerializationTypeRegistry
Assembly: Elsa.Common
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Common/Serialization/SerializationTypeRegistry.cs
Line coverage
95%
Covered lines: 21
Uncovered lines: 1
Coverable lines: 22
Total lines: 60
Line coverage: 95.4%
Branch coverage
100%
Covered branches: 12
Total branches: 12
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%44100%
CreateDefault()100%11100%
RegisterType(...)100%11100%
TryGetAlias(...)100%11100%
TryGetType(...)100%11100%
ListTypes()100%210%
RegisterTypeName(...)100%88100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Common/Serialization/SerializationTypeRegistry.cs

#LineLine coverage
 1using Microsoft.Extensions.Options;
 2
 3namespace Elsa.Common.Serialization;
 4
 5/// <inheritdoc />
 6public class SerializationTypeRegistry : ISerializationTypeRegistry
 7{
 101658    private readonly Dictionary<string, Type> _aliasTypeDictionary = new(StringComparer.OrdinalIgnoreCase);
 101659    private readonly Dictionary<Type, string> _typeAliasDictionary = new();
 10
 11    /// <summary>
 12    /// Creates a default registry.
 13    /// </summary>
 14    public static ISerializationTypeRegistry CreateDefault()
 15    {
 1016216        return new SerializationTypeRegistry(Microsoft.Extensions.Options.Options.Create(new SerializationTypeOptions())
 17    }
 18
 19    /// <summary>
 20    /// Initializes a new instance of the <see cref="SerializationTypeRegistry"/> class.
 21    /// </summary>
 1016522    public SerializationTypeRegistry(IOptions<SerializationTypeOptions> options)
 23    {
 52939024        foreach (var entry in options.Value.AliasTypeDictionary)
 25453025            RegisterTypeName(entry.Value, entry.Key);
 26
 50901227        foreach (var entry in options.Value.TypeAliasDictionary)
 24434128            RegisterType(entry.Key, entry.Value);
 1016529    }
 30
 31    /// <inheritdoc />
 32    public void RegisterType(Type type, string alias)
 33    {
 24434134        _typeAliasDictionary[type] = alias;
 24434135        RegisterTypeName(type, alias);
 24434136    }
 37
 38    /// <inheritdoc />
 2804339    public bool TryGetAlias(Type type, out string alias) => _typeAliasDictionary.TryGetValue(type, out alias!);
 40
 41    /// <inheritdoc />
 1015142    public bool TryGetType(string alias, out Type type) => _aliasTypeDictionary.TryGetValue(alias, out type!);
 43
 44    /// <inheritdoc />
 045    public IEnumerable<Type> ListTypes() => _aliasTypeDictionary.Values.Distinct();
 46
 47    private void RegisterTypeName(Type type, string alias)
 48    {
 49887149        _aliasTypeDictionary[alias] = type;
 50
 49887151        if (type.IsPrimitive || type.IsValueType && Nullable.GetUnderlyingType(type) == null)
 52        {
 25414353            var nullableType = typeof(Nullable<>).MakeGenericType(type);
 25414354            _aliasTypeDictionary[$"{alias}?"] = nullableType;
 55
 25414356            if (_typeAliasDictionary.ContainsKey(type))
 12198657                _typeAliasDictionary[nullableType] = $"{alias}?";
 58        }
 49887159    }
 60}