コード例 #1
0
        public virtual async ValueTask SerializeAsync(
            IExecutionResult result,
            Stream stream,
            CancellationToken cancellationToken)
        {
            switch (result)
            {
            case IQueryResult queryResult:
                await _jsonSerializer
                .SerializeAsync(queryResult, stream, cancellationToken)
                .ConfigureAwait(false);

                break;

            case DeferredQueryResult deferredResult
                when _deferSerialization == HttpResultSerialization.JsonArray:
                await _jsonArraySerializer
                .SerializeAsync(deferredResult, stream, cancellationToken)
                .ConfigureAwait(false);

                break;

            case DeferredQueryResult deferredResult:
                await _multiPartSerializer
                .SerializeAsync(deferredResult, stream, cancellationToken)
                .ConfigureAwait(false);

                break;

            case BatchQueryResult batchResult
                when _batchSerialization == HttpResultSerialization.JsonArray:
                await _jsonArraySerializer
                .SerializeAsync(batchResult, stream, cancellationToken)
                .ConfigureAwait(false);

                break;

            case BatchQueryResult batchResult:
                await _multiPartSerializer
                .SerializeAsync(batchResult, stream, cancellationToken)
                .ConfigureAwait(false);

                break;

            default:
                await _jsonSerializer
                .SerializeAsync(ResponseTypeNotSupported(), stream, cancellationToken)
                .ConfigureAwait(false);

                break;
            }
        }
コード例 #2
0
        public static async ValueTask<string> ToJsonAsync(
            this IExecutionResult result,
            bool withIndentations = true)
        {
            if (result is null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            if (result is IReadOnlyQueryResult queryResult)
            {
                if (withIndentations)
                {
                    return _serializerIndented.Serialize(queryResult);
                }
                return _serializer.Serialize(queryResult);
            }

            if (result is IResponseStream responseStream)
            {
                // TODO : lets rework the serializer to align it with the query result serializer
                using (var stream = new MemoryStream())
                {
                    await _streamSerializer
                        .SerializeAsync(responseStream, stream)
                        .ConfigureAwait(false);
                    return Encoding.UTF8.GetString(stream.ToArray());
                }
            }

            // TODO : resources / throw helper
            throw new NotSupportedException(
                "Only query results are supported.");
        }
コード例 #3
0
        public async ValueTask SerializeAsync(
            IExecutionResult result,
            Stream stream,
            CancellationToken cancellationToken)
        {
            if (result is IReadOnlyQueryResult q)
            {
                await _queryResultSerializer.SerializeAsync(
                    q, stream, cancellationToken);
            }

            if (result is IResponseStream r)
            {
                await _responseStreamSerializer.SerializeAsync(
                    r, stream, cancellationToken);
            }
        }