public bool TryGetBufferedStringValue(IJsonNavigatorNode stringNode, out IReadOnlyList <byte> bufferedStringValue)
 {
     bufferedStringValue = null;
     return(false);
 }
Example #2
0
 /// <inheritdoc />
 public abstract double GetFloat64Value(IJsonNavigatorNode numberNode);
Example #3
0
 /// <inheritdoc />
 public abstract Guid GetGuidValue(IJsonNavigatorNode guidNode);
Example #4
0
 /// <inheritdoc />
 public abstract sbyte GetInt8Value(IJsonNavigatorNode numberNode);
Example #5
0
 /// <inheritdoc />
 public abstract long GetInt64Value(IJsonNavigatorNode numberNode);
Example #6
0
 /// <inheritdoc />
 public abstract JsonNodeType GetNodeType(IJsonNavigatorNode node);
Example #7
0
 /// <inheritdoc />
 public abstract bool TryGetBufferedStringValue(
     IJsonNavigatorNode stringNode,
     out ReadOnlyMemory <byte> bufferedStringValue);
Example #8
0
        private DocumentFeedResponse <CosmosElement> GetFeedResponse(
            DocumentServiceRequest documentServiceRequest,
            DocumentServiceResponse documentServiceResponse)
        {
            // Execute the callback an each element of the page
            // For example just could get a response like this
            // {
            //    "_rid": "qHVdAImeKAQ=",
            //    "Documents": [{
            //        "id": "03230",
            //        "_rid": "qHVdAImeKAQBAAAAAAAAAA==",
            //        "_self": "dbs\/qHVdAA==\/colls\/qHVdAImeKAQ=\/docs\/qHVdAImeKAQBAAAAAAAAAA==\/",
            //        "_etag": "\"410000b0-0000-0000-0000-597916b00000\"",
            //        "_attachments": "attachments\/",
            //        "_ts": 1501107886
            //    }],
            //    "_count": 1
            // }
            // And you should execute the callback on each document in "Documents".
            MemoryStream memoryStream = new MemoryStream();

            documentServiceResponse.ResponseBody.CopyTo(memoryStream);
            long responseLengthBytes = memoryStream.Length;

            ReadOnlyMemory <byte> content;

            if (memoryStream.TryGetBuffer(out ArraySegment <byte> buffer))
            {
                content = buffer;
            }
            else
            {
                content = memoryStream.ToArray();
            }

            IJsonNavigator jsonNavigator = null;

            // Use the users custom navigator first. If it returns null back try the
            // internal navigator.
            if (this.feedOptions.CosmosSerializationFormatOptions != null)
            {
                jsonNavigator = this.feedOptions.CosmosSerializationFormatOptions.CreateCustomNavigatorCallback(content);
                if (jsonNavigator == null)
                {
                    throw new InvalidOperationException("The CosmosSerializationOptions did not return a JSON navigator.");
                }
            }
            else
            {
                jsonNavigator = JsonNavigator.Create(content);
            }

            string resourceName = this.GetRootNodeName(documentServiceRequest.ResourceType);

            if (!jsonNavigator.TryGetObjectProperty(
                    jsonNavigator.GetRootNode(),
                    resourceName,
                    out ObjectProperty objectProperty))
            {
                throw new InvalidOperationException($"Response Body Contract was violated. QueryResponse did not have property: {resourceName}");
            }

            IJsonNavigatorNode cosmosElements = objectProperty.ValueNode;

            if (!(CosmosElement.Dispatch(
                      jsonNavigator,
                      cosmosElements) is CosmosArray cosmosArray))
            {
                throw new InvalidOperationException($"QueryResponse did not have an array of : {resourceName}");
            }

            int itemCount = cosmosArray.Count;

            return(new DocumentFeedResponse <CosmosElement>(
                       cosmosArray,
                       itemCount,
                       documentServiceResponse.Headers,
                       documentServiceResponse.RequestStats,
                       responseLengthBytes));
        }
Example #9
0
        private static void PerformRoundTrip(
            SerializationFormat sourceFormat,
            SerializationFormat destinationFormat,
            string json,
            bool writeAsRootNode)
        {
            IJsonReader reader = sourceFormat switch
            {
                SerializationFormat.Text => JsonReader.Create(Encoding.UTF8.GetBytes(json)),
                SerializationFormat.Binary => JsonReader.Create(JsonTestUtils.ConvertTextToBinary(json)),
                SerializationFormat.NewtonsoftText => NewtonsoftToCosmosDBReader.CreateFromString(json),
                _ => throw new ArgumentException($"Unexpected {nameof(sourceFormat)} of type: {sourceFormat}"),
            };

            IJsonNavigator navigator = sourceFormat switch
            {
                SerializationFormat.Text => JsonNavigator.Create(Encoding.UTF8.GetBytes(json)),
                SerializationFormat.Binary => JsonNavigator.Create(JsonTestUtils.ConvertTextToBinary(json)),
                SerializationFormat.NewtonsoftText => new JsonNewtonsoftNavigator(json),
                _ => throw new ArgumentException($"Unexpected {nameof(sourceFormat)} of type: {sourceFormat}"),
            };

            foreach (object source in new object[] { reader, navigator })
            {
                IJsonWriter writer = destinationFormat switch
                {
                    SerializationFormat.Text => JsonWriter.Create(JsonSerializationFormat.Text),
                    SerializationFormat.Binary => JsonWriter.Create(JsonSerializationFormat.Binary),
                    SerializationFormat.NewtonsoftText => NewtonsoftToCosmosDBWriter.CreateTextWriter(),
                    _ => throw new ArgumentException($"Unexpected {nameof(destinationFormat)} of type: {destinationFormat}"),
                };

                switch (source)
                {
                case IJsonReader sourceReader:
                    sourceReader.WriteAll(writer);
                    break;

                case IJsonNavigator sourceNavigator:
                    if (writeAsRootNode)
                    {
                        sourceNavigator.WriteNode(sourceNavigator.GetRootNode(), writer);
                    }
                    else
                    {
                        IJsonNavigatorNode rootNode     = sourceNavigator.GetRootNode();
                        JsonNodeType       jsonNodeType = sourceNavigator.GetNodeType(rootNode);
                        switch (jsonNodeType)
                        {
                        case JsonNodeType.Array:
                            writer.WriteArrayStart();

                            foreach (IJsonNavigatorNode arrayItem in sourceNavigator.GetArrayItems(rootNode))
                            {
                                sourceNavigator.WriteNode(arrayItem, writer);
                            }

                            writer.WriteArrayEnd();
                            break;

                        case JsonNodeType.Object:
                            writer.WriteObjectStart();

                            foreach (ObjectProperty objectProperty in sourceNavigator.GetObjectProperties(rootNode))
                            {
                                sourceNavigator.WriteNode(objectProperty.NameNode, writer);
                                sourceNavigator.WriteNode(objectProperty.ValueNode, writer);
                            }

                            writer.WriteObjectEnd();
                            break;

                        default:
                            sourceNavigator.WriteNode(sourceNavigator.GetRootNode(), writer);
                            break;
                        }
                    }
                    break;

                default:
                    Assert.Fail("Failed to downcast source type.");
                    break;
                }

                string result = writer.SerializationFormat switch
                {
                    JsonSerializationFormat.Text => Utf8String.UnsafeFromUtf8BytesNoValidation(writer.GetResult()).ToString(),
                    JsonSerializationFormat.Binary => JsonTestUtils.ConvertBinaryToText(writer.GetResult()),
                    _ => throw new ArgumentException(),
                };
                string normalizedResult = JsonRoundTripsTests.NewtonsoftFormat(result);
                string normalizedJson   = JsonRoundTripsTests.NewtonsoftFormat(json);

                Assert.AreEqual(normalizedJson, normalizedResult);
            }
        }
 public static CosmosNumber64 Create(
     IJsonNavigator jsonNavigator,
     IJsonNavigatorNode jsonNavigatorNode)
 {
     return(new LazyCosmosNumber64(jsonNavigator, jsonNavigatorNode));
 }
 public static CosmosObject Create(
     IJsonNavigator jsonNavigator,
     IJsonNavigatorNode jsonNavigatorNode)
 {
     return(new LazyCosmosObject(jsonNavigator, jsonNavigatorNode));
 }
        public int GetArrayItemCount(IJsonNavigatorNode arrayNode)
        {
            JArray jArray = ((NewtonsoftNode)arrayNode).JToken as JArray;

            return(jArray.Count);
        }
        public IJsonNavigatorNode GetArrayItemAt(IJsonNavigatorNode arrayNode, int index)
        {
            JArray jArray = ((NewtonsoftNode)arrayNode).JToken as JArray;

            return(new NewtonsoftNode(jArray[index], this.JTokenToJsonNodeType(jArray[index])));
        }
 public bool TryGetBufferedRawJson(IJsonNavigatorNode jsonNode, out IReadOnlyList <byte> bufferedRawJson)
 {
     bufferedRawJson = null;
     return(false);
 }
Example #15
0
 /// <inheritdoc />
 public abstract IEnumerable <ObjectProperty> GetObjectProperties(IJsonNavigatorNode objectNode);
Example #16
0
 /// <inheritdoc />
 public abstract ReadOnlyMemory <byte> GetBinaryValue(IJsonNavigatorNode binaryNode);
Example #17
0
 /// <inheritdoc />
 public abstract bool TryGetBufferedRawJson(
     IJsonNavigatorNode jsonNode,
     out ReadOnlyMemory <byte> bufferedRawJson);
Example #18
0
 /// <inheritdoc />
 public abstract bool TryGetBufferedBinaryValue(
     IJsonNavigatorNode binaryNode,
     out ReadOnlyMemory <byte> bufferedBinaryValue);
Example #19
0
 /// <inheritdoc />
 public abstract Number64 GetNumberValue(IJsonNavigatorNode numberNode);
Example #20
0
 /// <inheritdoc />
 public abstract int GetArrayItemCount(IJsonNavigatorNode arrayNode);
Example #21
0
 /// <inheritdoc />
 public abstract string GetStringValue(IJsonNavigatorNode stringNode);
Example #22
0
 /// <inheritdoc />
 public abstract IJsonNavigatorNode GetArrayItemAt(IJsonNavigatorNode arrayNode, int index);
Example #23
0
 /// <inheritdoc />
 public abstract short GetInt16Value(IJsonNavigatorNode numberNode);
Example #24
0
 /// <inheritdoc />
 public abstract IEnumerable <IJsonNavigatorNode> GetArrayItems(IJsonNavigatorNode arrayNode);
Example #25
0
 /// <inheritdoc />
 public abstract float GetFloat32Value(IJsonNavigatorNode numberNode);
Example #26
0
 /// <inheritdoc />
 public abstract int GetObjectPropertyCount(IJsonNavigatorNode objectNode);
Example #27
0
 /// <inheritdoc />
 public abstract uint GetUInt32Value(IJsonNavigatorNode numberNode);
Example #28
0
 /// <inheritdoc />
 public abstract bool TryGetObjectProperty(
     IJsonNavigatorNode objectNode,
     string propertyName,
     out ObjectProperty objectProperty);
 public static CosmosInt32 Create(
     IJsonNavigator jsonNavigator,
     IJsonNavigatorNode jsonNavigatorNode)
 {
     return(new LazyCosmosInt32(jsonNavigator, jsonNavigatorNode));
 }
 public string GetStringValue(IJsonNavigatorNode stringNode)
 {
     return((string)((NewtonsoftNode)stringNode).JToken);
 }