private static (GraphQueryableField field, int index) ParseField(string queryString, int startingIndex)
        {
            var(fieldName, index) = ParseWord(queryString, startingIndex);
            GraphQueryableField field = new GraphQueryableScalar(fieldName);

            IEnumerable <GraphQueryableArgument> arguments = null;

            while (index < queryString.Length)
            {
                var character = queryString[index];
                if (character == '{')
                {
                    var(@object, newIndex) = ParseObject(queryString, index);

                    @object.Name = fieldName;
                    if (arguments != null)
                    {
                        foreach (var argument in arguments)
                        {
                            @object.AddArgument(argument);
                        }
                    }

                    return(@object, newIndex);
                }
                else if (character == '(')
                {
                    if (arguments != null)
                    {
                        throw new Exception($"Unexpected character: Found wrong character at {index}");
                    }

                    var(parsedArguments, newIndex) = ParseArguments(queryString, index);

                    arguments = parsedArguments;
                    index     = newIndex;
                }
                else if (char.IsLetter(character) || character == ',' || character == '}')
                {
                    // Missing arguments in field
                    return(character == ','
                        ? (field, index + 1)
                        : (field, index));
                }
                else if (!char.IsSeparator(character))
                {
                    throw new Exception($"Unexpected character: Found wrong character at {index}");
                }

                index++;
            }

            throw new Exception($"End-of-string: Cannot parse word at {startingIndex}");
        }
Ejemplo n.º 2
0
        public IGraphQueryableObject <TEntity> AddScalar <TProperty>(Expression <Func <TEntity, TProperty> > navigationFcn)
        {
            if (navigationFcn == null)
            {
                throw new ArgumentNullException(nameof(navigationFcn));
            }

            var propertyName = GetPropertyNameFromExpression(navigationFcn);

            _fields[propertyName] = new GraphQueryableScalar(propertyName);

            return(this);
        }
Ejemplo n.º 3
0
        internal IGraphQueryableObject <TEntity> AddScalar(GraphQueryableScalar scalar)
        {
            _fields.Add(scalar.Name, scalar);

            return(this);
        }