< Summary - Combined Code Coverage

Information
Class: NLightning.Infrastructure.Serialization.Payloads.StfuPayloadSerializer
Assembly: NLightning.Infrastructure.Serialization
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Serialization/Payloads/StfuPayloadSerializer.cs
Tag: 30_15166811759
Line coverage
79%
Covered lines: 19
Uncovered lines: 5
Coverable lines: 24
Total lines: 66
Line coverage: 79.1%
Branch coverage
50%
Covered branches: 3
Total branches: 6
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%4.03487.5%
DeserializeAsync()50%2.02281.82%
NLightning-Domain-Serialization-Payloads-IPayloadSerializer-DeserializeAsync()100%210%

File(s)

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

#LineLine coverage
 1using System.Buffers;
 2using System.Runtime.Serialization;
 3using NLightning.Domain.Serialization.Payloads;
 4
 5namespace NLightning.Infrastructure.Serialization.Payloads;
 6
 7using Domain.Protocol.Payloads;
 8using Domain.Protocol.Payloads.Interfaces;
 9using Domain.Serialization.Factories;
 10using Domain.ValueObjects;
 11using Exceptions;
 12
 13public class StfuPayloadSerializer : IPayloadSerializer<StfuPayload>
 14{
 15    private readonly IValueObjectSerializerFactory _valueObjectSerializerFactory;
 16
 417    public StfuPayloadSerializer(IValueObjectSerializerFactory valueObjectSerializerFactory)
 18    {
 419        _valueObjectSerializerFactory = valueObjectSerializerFactory;
 420    }
 21
 22    public async Task SerializeAsync(IMessagePayload payload, Stream stream)
 23    {
 424        if (payload is not StfuPayload stfuPayload)
 025            throw new SerializationException($"Payload is not of type {nameof(StfuPayload)}");
 26
 27        // Get the value object serializer
 428        var channelIdSerializer =
 429            _valueObjectSerializerFactory.GetSerializer<ChannelId>()
 430            ?? throw new SerializationException($"No serializer found for value object type {nameof(ChannelId)}");
 431        await channelIdSerializer.SerializeAsync(stfuPayload.ChannelId, stream);
 32
 433        await stream.WriteAsync(new ReadOnlyMemory<byte>([(byte)(stfuPayload.Initiator ? 1 : 0)]));
 434    }
 35
 36    public async Task<StfuPayload?> DeserializeAsync(Stream stream)
 37    {
 438        var buffer = ArrayPool<byte>.Shared.Rent(1);
 39
 40        try
 41        {
 42            // Get the value object serializer
 443            var channelIdSerializer =
 444                _valueObjectSerializerFactory.GetSerializer<ChannelId>()
 445                ?? throw new SerializationException($"No serializer found for value object type {nameof(ChannelId)}");
 446            var channelId = await channelIdSerializer.DeserializeAsync(stream);
 47
 448            await stream.ReadExactlyAsync(buffer.AsMemory()[..1]);
 49
 450            return new StfuPayload(channelId, buffer[0] == 1);
 51        }
 052        catch (Exception e)
 53        {
 054            throw new PayloadSerializationException($"Error deserializing {nameof(StfuPayload)}", e);
 55        }
 56        finally
 57        {
 458            ArrayPool<byte>.Shared.Return(buffer);
 59        }
 460    }
 61
 62    async Task<IMessagePayload?> IPayloadSerializer.DeserializeAsync(Stream stream)
 63    {
 064        return await DeserializeAsync(stream);
 065    }
 66}