< Summary - Combined Code Coverage

Information
Class: NLightning.Infrastructure.Serialization.Messages.MessageSerializer
Assembly: NLightning.Infrastructure.Serialization
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Serialization/Messages/MessageSerializer.cs
Tag: 36_15743069263
Line coverage
0%
Covered lines: 0
Uncovered lines: 32
Coverable lines: 32
Total lines: 76
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 10
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
SerializeAsync()0%620%
DeserializeMessageAsync()0%2040%
DeserializeMessageAsync()0%2040%

File(s)

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

#LineLine coverage
 1using Microsoft.Extensions.Logging;
 2using NLightning.Domain.Protocol.Interfaces;
 3using NLightning.Domain.Serialization.Interfaces;
 4
 5namespace NLightning.Infrastructure.Serialization.Messages;
 6
 7using Converters;
 8using Domain.Protocol.Constants;
 9using Exceptions;
 10
 11public class MessageSerializer : IMessageSerializer
 12{
 13    private readonly ILogger<MessageSerializer> _logger;
 14    private readonly IMessageTypeSerializerFactory _messageTypeSerializerFactory;
 15
 016    public MessageSerializer(ILogger<MessageSerializer> logger,
 017                             IMessageTypeSerializerFactory messageTypeSerializerFactory)
 18    {
 019        _logger = logger;
 020        _messageTypeSerializerFactory = messageTypeSerializerFactory;
 021    }
 22
 23    public async Task SerializeAsync(IMessage message, Stream stream)
 24    {
 025        var messageTypeSerializer =
 026            _messageTypeSerializerFactory.GetSerializer(message.Type)
 027         ?? throw new InvalidOperationException($"No serializer found for message type {message.Type}");
 28
 29        // Write the message type to the stream
 030        await stream.WriteAsync(EndianBitConverter.GetBytesBigEndian((ushort)message.Type));
 31
 32        // Serialize the message
 033        await messageTypeSerializer.SerializeAsync(message, stream);
 034    }
 35
 36    public async Task<TMessage?> DeserializeMessageAsync<TMessage>(Stream stream) where TMessage : class, IMessage
 37    {
 38        // Get the type of the message
 039        var typeBytes = new byte[2];
 040        await stream.ReadExactlyAsync(typeBytes);
 041        var type = EndianBitConverter.ToUInt16BigEndian(typeBytes);
 42
 43        // Try to get the serializer for the message type
 044        var messageTypeSerializer = _messageTypeSerializerFactory.GetSerializer<TMessage>();
 045        if (messageTypeSerializer is not null)
 046            return await messageTypeSerializer.DeserializeAsync(stream);
 47
 48        // If the type is unknown and even, throw an exception
 049        if (type % 2 == 0)
 50        {
 051            throw new InvalidMessageException($"Unknown message type {type}");
 52        }
 53
 054        return null;
 055    }
 56
 57    public async Task<IMessage?> DeserializeMessageAsync(Stream stream)
 58    {
 59        // Get the type of the message
 060        var typeBytes = new byte[2];
 061        await stream.ReadExactlyAsync(typeBytes);
 062        var type = EndianBitConverter.ToUInt16BigEndian(typeBytes);
 63
 64        // Try to get the serializer for the message type
 065        var messageTypeSerializer = _messageTypeSerializerFactory.GetSerializer((MessageTypes)type);
 066        if (messageTypeSerializer is not null)
 067            return await messageTypeSerializer.DeserializeAsync(stream);
 68
 69        // If the type is unknown and even, throw an exception
 070        if (type % 2 != 0)
 071            return null;
 72
 073        _logger.LogError("Unknown message type {type}", type);
 074        throw new InvalidMessageException($"Unknown message type {type}");
 075    }
 76}