< Summary - Combined Code Coverage

Information
Class: NLightning.Infrastructure.Serialization.Payloads.ErrorPayloadSerializer
Assembly: NLightning.Infrastructure.Serialization
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Serialization/Payloads/ErrorPayloadSerializer.cs
Tag: 30_15166811759
Line coverage
82%
Covered lines: 24
Uncovered lines: 5
Coverable lines: 29
Total lines: 74
Line coverage: 82.7%
Branch coverage
62%
Covered branches: 5
Total branches: 8
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()66.67%6.03690.91%
DeserializeAsync()50%2.01284.62%
NLightning-Domain-Serialization-Payloads-IPayloadSerializer-DeserializeAsync()100%210%

File(s)

/home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Serialization/Payloads/ErrorPayloadSerializer.cs

#LineLine coverage
 1using System.Runtime.Serialization;
 2using NLightning.Domain.Serialization.Payloads;
 3
 4namespace NLightning.Infrastructure.Serialization.Payloads;
 5
 6using Converters;
 7using Domain.Protocol.Payloads;
 8using Domain.Protocol.Payloads.Interfaces;
 9using Domain.Serialization.Factories;
 10using Domain.ValueObjects;
 11using Exceptions;
 12
 13public class ErrorPayloadSerializer : IPayloadSerializer<ErrorPayload>
 14{
 15    private readonly IValueObjectSerializerFactory _valueObjectSerializerFactory;
 16
 817    public ErrorPayloadSerializer(IValueObjectSerializerFactory valueObjectSerializerFactory)
 18    {
 819        _valueObjectSerializerFactory = valueObjectSerializerFactory;
 820    }
 21
 22    public async Task SerializeAsync(IMessagePayload payload, Stream stream)
 23    {
 1224        if (payload is not ErrorPayload errorPayload)
 025            throw new SerializationException($"Payload is not of type {nameof(ErrorPayload)}");
 26
 27        // Get the value object serializer
 1228        var channelIdSerializer =
 1229            _valueObjectSerializerFactory.GetSerializer<ChannelId>()
 1230            ?? throw new SerializationException($"No serializer found for value object type {nameof(ChannelId)}");
 1231        await channelIdSerializer.SerializeAsync(errorPayload.ChannelId, stream);
 32
 33        // Serialize other types
 1234        if (errorPayload.Data is null)
 35        {
 436            await stream.WriteAsync("\0\0"u8.ToArray());
 37        }
 38        else
 39        {
 840            await stream.WriteAsync(EndianBitConverter.GetBytesBigEndian((ushort)errorPayload.Data.Length));
 841            await stream.WriteAsync(errorPayload.Data);
 42        }
 1243    }
 44
 45    public async Task<ErrorPayload?> DeserializeAsync(Stream stream)
 46    {
 47        try
 48        {
 49            // Get the value object serializer
 850            var channelIdSerializer =
 851                _valueObjectSerializerFactory.GetSerializer<ChannelId>()
 852                ?? throw new SerializationException($"No serializer found for value object type {nameof(ChannelId)}");
 853            var channelId = await channelIdSerializer.DeserializeAsync(stream);
 54
 855            var buffer = new byte[sizeof(ushort)];
 856            await stream.ReadExactlyAsync(buffer);
 857            var dataLength = EndianBitConverter.ToUInt16BigEndian(buffer);
 58
 859            buffer = new byte[dataLength];
 860            await stream.ReadExactlyAsync(buffer);
 61
 862            return new ErrorPayload(channelId, buffer);
 63        }
 064        catch (Exception e)
 65        {
 066            throw new PayloadSerializationException("Error deserializing ErrorPayload", e);
 67        }
 868    }
 69
 70    async Task<IMessagePayload?> IPayloadSerializer.DeserializeAsync(Stream stream)
 71    {
 072        return await DeserializeAsync(stream);
 073    }
 74}