예제 #1
0
        public static bool ReadResult(ProtoReaderContext context)
        {
            if (context.ReadFieldHeader() == NoneFieldHeader)
            {
                return(false);
            }

            if (context.CurrentFieldHeader != ResultFieldHeader)
            {
                throw new InvalidDataException($"Field header '{ResultFieldHeader}' expected, actual '{context.CurrentFieldHeader}'.");
            }

            context.StartSubItem();

            if (context.ReadFieldHeader() == NoneFieldHeader)
            {
                // TODO: Clear buffer and reset columns.
                context.ReachedEndOfCurrentResult = true;
                context.EndSubItem();

                return(true);
            }

            ColumnsReader.ReadColumns(context);

            context.ReachedEndOfCurrentResult = false;

            return(true);
        }
예제 #2
0
        public static void ReadColumns(ProtoReaderContext context)
        {
            if (context.CurrentFieldHeader != ColumnFieldHeader)
            {
                throw new InvalidDataException($"Field header '{ColumnFieldHeader}' expected, actual '{context.CurrentFieldHeader}'.");
            }

            context.Columns = new List <ProtoDataColumn>(ReadColumnsImpl(context));
        }
예제 #3
0
        private static IEnumerable <ProtoDataColumn> ReadColumnsImpl(ProtoReaderContext context)
        {
            do
            {
                context.StartSubItem();

                var name          = ReadColumnName(context);
                var protoDataType = ReadColumnType(context);

                // Backwards compatibility or unnecessary?
                while (context.ReadFieldHeader() != NoneFieldHeader)
                {
                    context.Reader.SkipField();
                }

                context.EndSubItem();

                yield return(new ProtoDataColumn(name: name, dataType: TypeHelper.GetType(protoDataType), protoBufDataType: protoDataType));
            }while (context.ReadFieldHeader() == ColumnFieldHeader);
        }
예제 #4
0
        private static ProtoDataType ReadColumnType(ProtoReaderContext context)
        {
            context.ReadExpectedFieldHeader(ColumnTypeFieldHeader);

            return((ProtoDataType)context.Reader.ReadInt32());
        }
예제 #5
0
        private static string ReadColumnName(ProtoReaderContext context)
        {
            context.ReadExpectedFieldHeader(ColumnNameFieldHeader);

            return(context.Reader.ReadString());
        }