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; } }
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."); }
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); } }