< 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: 36_15743069263
Line coverage
79%
Covered lines: 23
Uncovered lines: 6
Coverable lines: 29
Total lines: 73
Line coverage: 79.3%
Branch coverage
50%
Covered branches: 4
Total branches: 8
Branch coverage: 50%
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%6.22681.82%
DeserializeAsync()50%2.01284.62%
NLightning-Domain-Serialization-Interfaces-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.Channels.ValueObjects;
 3using NLightning.Domain.Protocol.Interfaces;
 4using NLightning.Domain.Serialization.Interfaces;
 5
 6namespace NLightning.Infrastructure.Serialization.Payloads;
 7
 8using Converters;
 9using Domain.Protocol.Payloads;
 10using Exceptions;
 11
 12public class ErrorPayloadSerializer : IPayloadSerializer<ErrorPayload>
 13{
 14    private readonly IValueObjectSerializerFactory _valueObjectSerializerFactory;
 15
 816    public ErrorPayloadSerializer(IValueObjectSerializerFactory valueObjectSerializerFactory)
 17    {
 818        _valueObjectSerializerFactory = valueObjectSerializerFactory;
 819    }
 20
 21    public async Task SerializeAsync(IMessagePayload payload, Stream stream)
 22    {
 1223        if (payload is not ErrorPayload errorPayload)
 024            throw new SerializationException($"Payload is not of type {nameof(ErrorPayload)}");
 25
 26        // Get the value object serializer
 1227        var channelIdSerializer =
 1228            _valueObjectSerializerFactory.GetSerializer<ChannelId>()
 1229         ?? throw new SerializationException($"No serializer found for value object type {nameof(ChannelId)}");
 1230        await channelIdSerializer.SerializeAsync(errorPayload.ChannelId, stream);
 31
 32        // Serialize other types
 1233        if (errorPayload.Data is null)
 34        {
 035            await stream.WriteAsync("\0\0"u8.ToArray());
 36        }
 37        else
 38        {
 1239            await stream.WriteAsync(EndianBitConverter.GetBytesBigEndian((ushort)errorPayload.Data.Length));
 1240            await stream.WriteAsync(errorPayload.Data);
 41        }
 1242    }
 43
 44    public async Task<ErrorPayload?> DeserializeAsync(Stream stream)
 45    {
 46        try
 47        {
 48            // Get the value object serializer
 849            var channelIdSerializer =
 850                _valueObjectSerializerFactory.GetSerializer<ChannelId>()
 851             ?? throw new SerializationException($"No serializer found for value object type {nameof(ChannelId)}");
 852            var channelId = await channelIdSerializer.DeserializeAsync(stream);
 53
 854            var buffer = new byte[sizeof(ushort)];
 855            await stream.ReadExactlyAsync(buffer);
 856            var dataLength = EndianBitConverter.ToUInt16BigEndian(buffer);
 57
 858            buffer = new byte[dataLength];
 859            await stream.ReadExactlyAsync(buffer);
 60
 861            return new ErrorPayload(channelId, buffer);
 62        }
 063        catch (Exception e)
 64        {
 065            throw new PayloadSerializationException("Error deserializing ErrorPayload", e);
 66        }
 867    }
 68
 69    async Task<IMessagePayload?> IPayloadSerializer.DeserializeAsync(Stream stream)
 70    {
 071        return await DeserializeAsync(stream);
 072    }
 73}