< Summary - Combined Code Coverage

Information
Class: NLightning.Infrastructure.Serialization.Messages.Types.InitMessageTypeSerializer
Assembly: NLightning.Infrastructure.Serialization
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Serialization/Messages/Types/InitMessageTypeSerializer.cs
Tag: 30_15166811759
Line coverage
88%
Covered lines: 30
Uncovered lines: 4
Coverable lines: 34
Total lines: 88
Line coverage: 88.2%
Branch coverage
62%
Covered branches: 10
Total branches: 16
Branch coverage: 62.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
SerializeAsync()50%4.05485.71%
DeserializeAsync()66.67%12.021294.74%
NLightning-Domain-Serialization-Messages-Types-IMessageTypeSerializer-DeserializeAsync()100%210%

File(s)

/home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Serialization/Messages/Types/InitMessageTypeSerializer.cs

#LineLine coverage
 1using System.Runtime.Serialization;
 2
 3namespace NLightning.Infrastructure.Serialization.Messages.Types;
 4
 5using Domain.Protocol.Constants;
 6using Domain.Protocol.Factories;
 7using Domain.Protocol.Messages;
 8using Domain.Protocol.Messages.Interfaces;
 9using Domain.Protocol.Payloads;
 10using Domain.Protocol.Tlv;
 11using Domain.Serialization.Factories;
 12using Domain.Serialization.Messages.Types;
 13using Exceptions;
 14using Interfaces;
 15
 16public class InitMessageTypeSerializer : IMessageTypeSerializer<InitMessage>
 17{
 18    private readonly IPayloadSerializerFactory _payloadSerializerFactory;
 19    private readonly ITlvConverterFactory _tlvConverterFactory;
 20    private readonly ITlvStreamSerializer _tlvStreamSerializer;
 21
 2022    public InitMessageTypeSerializer(IPayloadSerializerFactory payloadSerializerFactory,
 2023                                     ITlvConverterFactory tlvConverterFactory, ITlvStreamSerializer tlvStreamSerializer)
 24    {
 2025        _payloadSerializerFactory = payloadSerializerFactory;
 2026        _tlvConverterFactory = tlvConverterFactory;
 2027        _tlvStreamSerializer = tlvStreamSerializer;
 2028    }
 29
 30    public async Task SerializeAsync(IMessage message, Stream stream)
 31    {
 832        if (message is not InitMessage initMessage)
 033            throw new SerializationException("Message is not of type InitMessage");
 34
 35        // Get the payload serializer
 836        var payloadTypeSerializer = _payloadSerializerFactory.GetSerializer(message.Type)
 837                                    ?? throw new SerializationException("No serializer found for payload type");
 838        await payloadTypeSerializer.SerializeAsync(message.Payload, stream);
 39
 40        // Serialize the TLV stream
 841        await _tlvStreamSerializer.SerializeAsync(initMessage.Extension, stream);
 842    }
 43
 44    /// <summary>
 45    /// Deserialize an InitMessage from a stream.
 46    /// </summary>
 47    /// <param name="stream">The stream to deserialize from.</param>
 48    /// <returns>The deserialized InitMessage.</returns>
 49    /// <exception cref="MessageSerializationException">Error deserializing InitMessage</exception>
 50    public async Task<InitMessage> DeserializeAsync(Stream stream)
 51    {
 52        try
 53        {
 54            // Deserialize payload
 1255            var payloadSerializer = _payloadSerializerFactory.GetSerializer<InitPayload>()
 1256                                    ?? throw new SerializationException("No serializer found for payload type");
 1257            var payload = await payloadSerializer.DeserializeAsync(stream)
 1258                          ?? throw new SerializationException("Error serializing payload");
 59
 60            // Deserialize extension if available
 1261            if (stream.Position >= stream.Length)
 462                return new InitMessage(payload);
 63
 864            var extension = await _tlvStreamSerializer.DeserializeAsync(stream);
 465            if (extension is null)
 066                return new InitMessage(payload);
 67
 468            NetworksTlv? networksTlv = null;
 469            if (extension.TryGetTlv(TlvConstants.NETWORKS, out var baseNetworkTlv))
 70            {
 471                var tlvConverter = _tlvConverterFactory.GetConverter<NetworksTlv>()
 472                                   ?? throw new SerializationException(
 473                                       $"No serializer found for tlv type {nameof(NetworksTlv)}");
 474                networksTlv = tlvConverter.ConvertFromBase(baseNetworkTlv!);
 75            }
 76
 477            return new InitMessage(payload, networksTlv);
 78        }
 479        catch (SerializationException e)
 80        {
 481            throw new MessageSerializationException("Error deserializing InitMessage", e);
 82        }
 883    }
 84    async Task<IMessage> IMessageTypeSerializer.DeserializeAsync(Stream stream)
 85    {
 086        return await DeserializeAsync(stream);
 087    }
 88}