private static async ValueTask WriteInternalAsync(this Stream stream, object obj, CancellationToken cancellation)
        {
            byte[] data;
            using (var dataStream = new MemoryStream())
            {
                _configuration.Serialize(dataStream, obj);
                dataStream.Position = 0;
                data = dataStream.ToArray();
            }

            long size = data.LongLength;

            byte[] sizeData = BitConverter.GetBytes(size);

            var datatype = obj is Exception ? (byte)1 : (byte)0;

            stream.WriteByte(datatype);
            await stream.WriteAsync(sizeData, 0, sizeData.Length, cancellation).ConfigureAwait(false);

            await stream.WriteAsync(data, 0, data.Length, cancellation).ConfigureAwait(false);
        }