Exemple #1
0
        private async Task DispatchRequestsAsync(
            IList <BufferedRequest> requests,
            DocumentNode mergedQuery,
            NameNode operationName,
            IReadOnlyDictionary <string, object> variableValues,
            CancellationToken cancellationToken)
        {
            int index = 0;

            try
            {
                IReadOnlyQueryRequest mergedRequest =
                    QueryRequestBuilder.New()
                    .SetQuery(mergedQuery)
                    .SetOperation(operationName.Value)
                    .SetVariableValues(variableValues)
                    .SetServices(_services)
                    .Create();

                var mergedResult = (IReadOnlyQueryResult)await _queryExecutor
                                   .ExecuteAsync(mergedRequest, cancellationToken)
                                   .ConfigureAwait(false);

                var handledErrors = new HashSet <IError>();

                for (int i = 0; i < requests.Count; i++)
                {
                    index = i;

                    QueryResultBuilder result = ExtractResult(
                        requests[i].Aliases,
                        mergedResult,
                        handledErrors);

                    IReadOnlyList <IError> mergedErrors = mergedResult.Errors ?? Array.Empty <IError>();

                    if (handledErrors.Count < mergedErrors.Count &&
                        i == requests.Count - 1)
                    {
                        foreach (IError error in mergedErrors.Except(handledErrors))
                        {
                            result.AddError(error);
                        }
                    }

                    requests[i].Promise.SetResult(result.Create());
                }
            }
            catch (Exception ex)
            {
                for (int i = index; i < requests.Count; i++)
                {
                    requests[i].Promise.SetException(ex);
                }
            }
        }
Exemple #2
0
        public static IQueryResult Deserialize(
            IReadOnlyDictionary <string, object?> serializedResult)
        {
            var result = new QueryResultBuilder();

            if (serializedResult.TryGetValue(_data, out object?data))
            {
                result.SetData(data as IReadOnlyDictionary <string, object?>);
            }

            if (serializedResult.TryGetValue(_extensions, out object?extensionData))
            {
                result.SetExtensions(extensionData as IReadOnlyDictionary <string, object?>);
            }

            DeserializeErrors(result, serializedResult);

            return(result.Create());
        }
        public static IReadOnlyQueryResult Deserialize(
            IReadOnlyDictionary <string, object> serializedResult)
        {
            var result        = new QueryResultBuilder();
            var data          = new OrderedDictionary();
            var extensionData = new ExtensionData();

            DeserializeRootField(
                data,
                serializedResult,
                _data);
            result.SetData(data);

            DeserializeRootField(
                extensionData,
                serializedResult,
                _extensions);
            result.SetExtensions(extensionData);

            DeserializeErrors(result, serializedResult);

            return(result.Create());
        }