public override async Task <object> ReadValueAsync(Stream stream, GraphBinaryReader reader, bool nullable)
        {
            if (nullable)
            {
                var valueFlag = await stream.ReadByteAsync().ConfigureAwait(false);

                if ((valueFlag & 1) == 1)
                {
                    return(null);
                }
            }

            // Read the byte length of the value bytes
            var valueLength = await stream.ReadIntAsync().ConfigureAwait(false);

            if (valueLength <= 0)
            {
                throw new IOException($"Unexpected value length: {valueLength}");
            }

            if (valueLength > stream.Length)
            {
                throw new IOException($"Not enough readable bytes: {valueLength} (expected: {stream.Length})");
            }

            var name = (string)await reader.ReadValueAsync <string>(stream, false).ConfigureAwait(false);

            var birthDate =
                (DateTimeOffset)await reader.ReadValueAsync <DateTimeOffset>(stream, false).ConfigureAwait(false);

            return(new SamplePerson(name, birthDate));
        }
Esempio n. 2
0
        /// <inheritdoc />
        protected override async Task <P> ReadValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var operatorName = (string)await reader.ReadValueAsync <string>(stream, false).ConfigureAwait(false);

            var argsLength = (int)await reader.ReadValueAsync <int>(stream, false).ConfigureAwait(false);

            var args = new object[argsLength];

            for (var i = 0; i < argsLength; i++)
            {
                args[i] = await reader.ReadAsync(stream).ConfigureAwait(false);
            }

            if (operatorName == "and" || operatorName == "or")
            {
                return(new P(operatorName, (P)args[0], (P)args[1]));
            }

            if (operatorName == "not")
            {
                return(new P(operatorName, (P)args[0]));
            }

            if (argsLength == 1)
            {
                if (DataType == DataType.TextP)
                {
                    return(new TextP(operatorName, (string)args[0]));
                }
                return(new P(operatorName, args[0]));
            }
            return(new P(operatorName, args));
        }
Esempio n. 3
0
        /// <inheritdoc />
        protected override async Task <decimal> ReadValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var scale = (int)await reader.ReadValueAsync <int>(stream, false).ConfigureAwait(false);

            var unscaled = (BigInteger)await reader.ReadValueAsync <BigInteger>(stream, false).ConfigureAwait(false);

            return(ConvertScaleAndUnscaledValue(scale, unscaled));
        }
Esempio n. 4
0
        /// <inheritdoc />
        protected override async Task <ILambda> ReadValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var language = (string)await reader.ReadValueAsync <string>(stream, false).ConfigureAwait(false);

            var expression = (string)await reader.ReadValueAsync <string>(stream, false).ConfigureAwait(false);

            // discard the arguments
            await reader.ReadValueAsync <int>(stream, false).ConfigureAwait(false);

            return(new StringBasedLambda(expression, language));
        }
Esempio n. 5
0
        protected override async Task <JanusGraphP> ReadNonNullableValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var operatorName = (string)await reader.ReadValueAsync <string>(stream, false).ConfigureAwait(false);

            var value = await reader.ReadAsync(stream).ConfigureAwait(false);

            return(new JanusGraphP(operatorName, value));
        }
Esempio n. 6
0
        /// <inheritdoc />
        protected override async Task <Traverser> ReadValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var bulk = (long)await reader.ReadValueAsync <long>(stream, false).ConfigureAwait(false);

            var v = await reader.ReadAsync(stream).ConfigureAwait(false);

            return(new Traverser(v, bulk));
        }
Esempio n. 7
0
        /// <inheritdoc />
        protected override async Task <Binding> ReadValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var key = (string)await reader.ReadValueAsync <string>(stream, false).ConfigureAwait(false);

            var value = await reader.ReadAsync(stream).ConfigureAwait(false);

            return(new Binding(key, value));
        }
Esempio n. 8
0
        /// <inheritdoc />
        protected override async Task <BigInteger> ReadValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var length = (int)await reader.ReadValueAsync <int>(stream, false).ConfigureAwait(false);

            var bytes = await stream.ReadAsync(length).ConfigureAwait(false);

            return(new BigInteger(bytes.Reverse().ToArray()));
        }
Esempio n. 9
0
        /// <inheritdoc />
        protected override async Task <string> ReadValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var length = (int)await reader.ReadValueAsync <int>(stream, false).ConfigureAwait(false);

            var bytes = new byte[length];
            await stream.ReadAsync(bytes, 0, length).ConfigureAwait(false);

            return(Encoding.UTF8.GetString(bytes));
        }
Esempio n. 10
0
        /// <inheritdoc />
        protected override async Task <byte[]> ReadValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var length = (int)await reader.ReadValueAsync <int>(stream, false).ConfigureAwait(false);

            var buffer = new byte[length];
            await stream.ReadAsync(buffer, 0, length).ConfigureAwait(false);

            return(buffer);
        }
Esempio n. 11
0
        /// <inheritdoc />
        protected override async Task <Edge> ReadValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var id = await reader.ReadAsync(stream).ConfigureAwait(false);

            var label = (string)await reader.ReadValueAsync <string>(stream, false).ConfigureAwait(false);

            var inV = new Vertex(await reader.ReadAsync(stream).ConfigureAwait(false),
                                 (string)await reader.ReadValueAsync <string>(stream, false).ConfigureAwait(false));
            var outV = new Vertex(await reader.ReadAsync(stream).ConfigureAwait(false),
                                  (string)await reader.ReadValueAsync <string>(stream, false).ConfigureAwait(false));

            // discard possible parent vertex
            await reader.ReadAsync(stream).ConfigureAwait(false);

            // discard possible properties
            await reader.ReadAsync(stream).ConfigureAwait(false);

            return(new Edge(id, outV, label, inV));
        }
Esempio n. 12
0
        /// <inheritdoc />
        protected override async Task <Vertex> ReadValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var v = new Vertex(await reader.ReadAsync(stream).ConfigureAwait(false),
                               (string)await reader.ReadValueAsync <string>(stream, false).ConfigureAwait(false));

            // discard properties
            await reader.ReadAsync(stream).ConfigureAwait(false);

            return(v);
        }
Esempio n. 13
0
        /// <inheritdoc />
        protected override async Task <Property> ReadValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var p = new Property((string)await reader.ReadValueAsync <string>(stream, false).ConfigureAwait(false),
                                 await reader.ReadAsync(stream).ConfigureAwait(false));

            // discard parent element
            await reader.ReadAsync(stream).ConfigureAwait(false);

            return(p);
        }
Esempio n. 14
0
        /// <inheritdoc />
        protected override async Task <TList> ReadValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var length = (int)await reader.ReadValueAsync <int>(stream, false).ConfigureAwait(false);

            var result = new TList();

            for (var i = 0; i < length; i++)
            {
                var value = await reader.ReadAsync(stream).ConfigureAwait(false);

                var bulk = (long)await reader.ReadValueAsync <long>(stream, false).ConfigureAwait(false);

                for (var j = 0; j < bulk; j++)
                {
                    result.Add(value);
                }
            }

            return(result);
        }
Esempio n. 15
0
        private static async Task <object[]> ReadArgumentsAsync(Stream stream, GraphBinaryReader reader)
        {
            var valuesLength = (int)await reader.ReadValueAsync <int>(stream, false).ConfigureAwait(false);

            var values = new object[valuesLength];

            for (var i = 0; i < valuesLength; i++)
            {
                values[i] = await reader.ReadAsync(stream).ConfigureAwait(false);
            }
            return(values);
        }
Esempio n. 16
0
        /// <inheritdoc />
        protected override async Task <Bytecode> ReadValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var result = new Bytecode();

            var stepsLength = (int)await reader.ReadValueAsync <int>(stream, false).ConfigureAwait(false);

            for (var i = 0; i < stepsLength; i++)
            {
                result.AddStep((string)await reader.ReadValueAsync <string>(stream, false).ConfigureAwait(false),
                               await ReadArgumentsAsync(stream, reader).ConfigureAwait(false));
            }

            var sourcesLength = await stream.ReadIntAsync().ConfigureAwait(false);

            for (var i = 0; i < sourcesLength; i++)
            {
                result.AddSource((string)await reader.ReadValueAsync <string>(stream, false).ConfigureAwait(false),
                                 await ReadArgumentsAsync(stream, reader).ConfigureAwait(false));
            }

            return(result);
        }
Esempio n. 17
0
        /// <inheritdoc />
        protected override async Task <TSet> ReadValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var length = (int)await reader.ReadValueAsync <int>(stream, false).ConfigureAwait(false);

            var result = new TSet();

            for (var i = 0; i < length; i++)
            {
                result.Add((TMember)await reader.ReadAsync(stream).ConfigureAwait(false));
            }

            return(result);
        }
        /// <inheritdoc />
        protected override async Task <VertexProperty> ReadValueAsync(Stream stream, GraphBinaryReader reader)
        {
            var vp = new VertexProperty(await reader.ReadAsync(stream).ConfigureAwait(false),
                                        (string)await reader.ReadValueAsync <string>(stream, false).ConfigureAwait(false),
                                        await reader.ReadAsync(stream).ConfigureAwait(false));

            // discard the parent vertex
            await reader.ReadAsync(stream).ConfigureAwait(false);

            // discard the properties
            await reader.ReadAsync(stream).ConfigureAwait(false);

            return(vp);
        }