< 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: 36_15743069263
Line coverage
80%
Covered lines: 32
Uncovered lines: 8
Coverable lines: 40
Total lines: 96
Line coverage: 80%
Branch coverage
55%
Covered branches: 11
Total branches: 20
Branch coverage: 55%
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()56.25%18.051680%
NLightning-Domain-Serialization-Interfaces-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.Interfaces;
 7using Domain.Protocol.Messages;
 8using Domain.Protocol.Payloads;
 9using Domain.Protocol.Tlv;
 10using Domain.Serialization.Interfaces;
 11using Exceptions;
 12using Interfaces;
 13
 14public class InitMessageTypeSerializer : IMessageTypeSerializer<InitMessage>
 15{
 16    private readonly IPayloadSerializerFactory _payloadSerializerFactory;
 17    private readonly ITlvConverterFactory _tlvConverterFactory;
 18    private readonly ITlvStreamSerializer _tlvStreamSerializer;
 19
 2020    public InitMessageTypeSerializer(IPayloadSerializerFactory payloadSerializerFactory,
 2021                                     ITlvConverterFactory tlvConverterFactory, ITlvStreamSerializer tlvStreamSerializer)
 22    {
 2023        _payloadSerializerFactory = payloadSerializerFactory;
 2024        _tlvConverterFactory = tlvConverterFactory;
 2025        _tlvStreamSerializer = tlvStreamSerializer;
 2026    }
 27
 28    public async Task SerializeAsync(IMessage message, Stream stream)
 29    {
 830        if (message is not InitMessage initMessage)
 031            throw new SerializationException("Message is not of type InitMessage");
 32
 33        // Get the payload serializer
 834        var payloadTypeSerializer = _payloadSerializerFactory.GetSerializer(message.Type)
 835                                 ?? throw new SerializationException("No serializer found for payload type");
 836        await payloadTypeSerializer.SerializeAsync(message.Payload, stream);
 37
 38        // Serialize the TLV stream
 839        await _tlvStreamSerializer.SerializeAsync(initMessage.Extension, stream);
 840    }
 41
 42    /// <summary>
 43    /// Deserialize an InitMessage from a stream.
 44    /// </summary>
 45    /// <param name="stream">The stream to deserialize from.</param>
 46    /// <returns>The deserialized InitMessage.</returns>
 47    /// <exception cref="MessageSerializationException">Error deserializing InitMessage</exception>
 48    public async Task<InitMessage> DeserializeAsync(Stream stream)
 49    {
 50        try
 51        {
 52            // Deserialize payload
 1253            var payloadSerializer = _payloadSerializerFactory.GetSerializer<InitPayload>()
 1254                                 ?? throw new SerializationException("No serializer found for payload type");
 1255            var payload = await payloadSerializer.DeserializeAsync(stream)
 1256                       ?? throw new SerializationException("Error serializing payload");
 57
 58            // Deserialize extension if available
 1259            if (stream.Position >= stream.Length)
 460                return new InitMessage(payload);
 61
 862            var extension = await _tlvStreamSerializer.DeserializeAsync(stream);
 463            if (extension is null)
 064                return new InitMessage(payload);
 65
 466            NetworksTlv? networksTlv = null;
 467            if (extension.TryGetTlv(TlvConstants.Networks, out var baseNetworkTlv))
 68            {
 469                var tlvConverter = _tlvConverterFactory.GetConverter<NetworksTlv>()
 470                                ?? throw new SerializationException(
 471                                       $"No serializer found for tlv type {nameof(NetworksTlv)}");
 472                networksTlv = tlvConverter.ConvertFromBase(baseNetworkTlv!);
 73            }
 74
 475            RemoteAddressTlv? remoteAddressTlv = null;
 476            if (extension.TryGetTlv(TlvConstants.RemoteAddress, out var baseRemoteAddressTlv))
 77            {
 078                var tlvConverter = _tlvConverterFactory.GetConverter<RemoteAddressTlv>()
 079                                ?? throw new SerializationException(
 080                                       $"No serializer found for tlv type {nameof(RemoteAddressTlv)}");
 081                remoteAddressTlv = tlvConverter.ConvertFromBase(baseRemoteAddressTlv!);
 82            }
 83
 484            return new InitMessage(payload, networksTlv, remoteAddressTlv);
 85        }
 486        catch (SerializationException e)
 87        {
 488            throw new MessageSerializationException("Error deserializing InitMessage", e);
 89        }
 890    }
 91
 92    async Task<IMessage> IMessageTypeSerializer.DeserializeAsync(Stream stream)
 93    {
 094        return await DeserializeAsync(stream);
 095    }
 96}