Esempio n. 1
0
        /// <inheritsdoc />
        public override void Encode(EncodingContext context)
        {
            if (Payload != null)
            {
                int payloadLength = Utf8.GetMaxByteCount(Payload.Length);
                byte[]? payloadToReturnToPool = null;
                Span <byte> encodedPayload = payloadLength > Constants.MaxStackallocBytes
                                 ? (payloadToReturnToPool = ArrayPool <byte> .Shared.Rent(payloadLength))
                                 : stackalloc byte[payloadLength];

                try
                {
                    int bytesWritten = Utf8.GetBytes(Payload, encodedPayload);
                    EncryptToken(encodedPayload.Slice(0, bytesWritten), context);
                }
                finally
                {
                    if (payloadToReturnToPool != null)
                    {
                        ArrayPool <byte> .Shared.Return(payloadToReturnToPool);
                    }
                }
            }
            else
            {
                ThrowHelper.ThrowInvalidOperationException_UndefinedPayload();
            }
        }
        /// <inheritdoc/>
        public override void Encode(EncodingContext context)
        {
            using var bufferWriter = new PooledByteBufferWriter();
            var ctx = new EncodingContext(bufferWriter, context);

            if (Payload is null)
            {
                ThrowHelper.ThrowInvalidOperationException_UndefinedPayload();
            }

            using var writer = new Utf8JsonWriter(ctx.BufferWriter);
            Payload.WriteTo(writer);
            EncryptToken(bufferWriter.WrittenSpan, context);
        }