public static DqliteNodeInfo[] ParseNodesResponse(ResponseTypes type, int size, Memory <byte> data)
        {
            ThrowOnFailure(type, size, data);
            if (type != ResponseTypes.ResponseNodes)
            {
                throw new InvalidOperationException($"Invalid response: expected {ResponseTypes.ResponseNodes}, actually {type}");
            }

            var span = data.Span;

            var count = span.ReadUInt64();
            var nodes = new DqliteNodeInfo[count];

            for (var i = 0UL; i < count; ++i)
            {
                nodes[i]         = new DqliteNodeInfo();
                nodes[i].Id      = span.ReadUInt64();
                nodes[i].Address = span.ReadString();
                if (span.Length > 0)
                {
                    nodes[i].Role = (DqliteNodeRoles)span.ReadUInt64();
                }
            }

            return(nodes);
        }
        public static DqliteNodeInfo ParseNodeResponse(ResponseTypes type, int size, Memory <byte> data)
        {
            ThrowOnFailure(type, size, data);
            if (type != ResponseTypes.ResponseNode)
            {
                throw new InvalidOperationException($"Invalid response: expected {ResponseTypes.ResponseNode}, actually {type}");
            }
            else if (data.Length == 0)
            {
                return(null);
            }

            var span = data.Span;

            var node = new DqliteNodeInfo();

            node.Id      = span.ReadUInt64();
            node.Address = span.ReadString();

            return(node);
        }