Esempio n. 1
0
        internal static Directive FromDescription(
            DirectiveType directiveType,
            DirectiveDescription description,
            object source)
        {
            if (directiveType == null)
            {
                throw new ArgumentNullException(nameof(directiveType));
            }

            if (description == null)
            {
                throw new ArgumentNullException(nameof(description));
            }

            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            if (description.CustomDirective is null)
            {
                return(new Directive(directiveType,
                                     description.ParsedDirective,
                                     source));
            }
            else
            {
                return(new Directive(directiveType,
                                     description.CustomDirective,
                                     source));
            }
        }
Esempio n. 2
0
        private void CompleteDirective(
            ITypeInitializationContext context,
            DirectiveDescription description,
            HashSet <string> processed)
        {
            DirectiveReference reference =
                DirectiveReference.FromDescription(description);
            DirectiveType directiveType = context.GetDirectiveType(reference);

            if (directiveType != null)
            {
                if (!processed.Add(directiveType.Name) &&
                    !directiveType.IsRepeatable)
                {
                    context.ReportError(new SchemaError(
                                            $"The specified directive `@{directiveType.Name}` " +
                                            "is unique and cannot be added twice.",
                                            context.Type as INamedType));
                }
                else if (directiveType.Locations.Contains(_location))
                {
                    _directives.Add(Directive.FromDescription(
                                        directiveType, description, _source));
                }
                else
                {
                    context.ReportError(new SchemaError(
                                            $"The specified directive `@{directiveType.Name}` " +
                                            "is not allowed on the current location " +
                                            $"`{_location}`.",
                                            context.Type as INamedType));
                }
            }
        }
Esempio n. 3
0
        public void DeclareArgument()
        {
            // arrange
            var descriptor = new DirectiveDescriptor();

            // act
            IDirectiveDescriptor desc = descriptor;

            desc.Name("Foo");
            desc.Argument("arg").Type <BooleanType>();;

            // assert
            DirectiveDescription description = descriptor.CreateDescription();

            Assert.Equal("arg", description.Arguments.Single().Name);
        }
Esempio n. 4
0
        internal static DirectiveReference FromDescription(
            DirectiveDescription description)
        {
            if (description == null)
            {
                throw new ArgumentNullException(nameof(description));
            }

            if (description.ParsedDirective != null)
            {
                return(new DirectiveReference(
                           description.ParsedDirective.Name.Value));
            }

            return(new DirectiveReference(
                       description.CustomDirective.GetType()));
        }
Esempio n. 5
0
        public void DeclareLocation()
        {
            // arrange
            var descriptor = new DirectiveDescriptor();

            // act
            IDirectiveDescriptor desc = descriptor;

            desc.Name("Foo");
            desc.Location(DirectiveLocation.Enum);
            desc.Location(DirectiveLocation.Enum);
            desc.Location(DirectiveLocation.EnumValue);

            // assert
            DirectiveDescription description = descriptor.CreateDescription();

            Assert.Collection(description.Locations,
                              t => Assert.Equal(DirectiveLocation.Enum, t),
                              t => Assert.Equal(DirectiveLocation.EnumValue, t));
        }
Esempio n. 6
0
        private void Initialize(Action <IDirectiveDescriptor> configure)
        {
            if (configure == null)
            {
                throw new ArgumentNullException(nameof(configure));
            }

            DirectiveDescriptor descriptor = CreateDescriptor();

            configure(descriptor);

            DirectiveDescription description = descriptor.CreateDescription();

            SyntaxNode  = description.SyntaxNode;
            Name        = description.Name;
            Description = description.Description;
            Locations   = description.Locations.ToImmutableList();
            Arguments   = new FieldCollection <InputField>(
                description.Arguments.Select(t => new InputField(t)));
        }
        private void CompleteDirecive(
            ITypeInitializationContext context,
            DirectiveDescription description)
        {
            DirectiveReference reference =
                DirectiveReference.FromDescription(description);
            DirectiveType type = context.GetDirectiveType(reference);

            if (type != null)
            {
                if (type.Locations.Contains(_location))
                {
                    _directives.Add(
                        Directive.FromDescription(type, description, _source));
                }
                else
                {
                    context.ReportError(new SchemaError(
                                            $"The specified directive `{type.Name}` is not " +
                                            $"allowed on the current location `{_location}`.",
                                            context.Type));
                }
            }
        }