Esempio n. 1
0
        private InterfaceType Interface(__Type type)
        {
            if (_builder.TryGetType <InterfaceType>(type.Name, out var owner))
            {
                return(owner);
            }

            _builder.Interface(type.Name, out owner, type.Description, null);
            if (type.Fields != null && type.Fields.Any())
            {
                _delayedActions.Enqueue(() =>
                {
                    _builder.Connections(connect =>
                    {
                        foreach (var field in type.Fields)
                        {
                            (string Name, IType Type, object DefaultValue, string Description)[] args = field.Args
                                                                                                        .Select(arg => (
                                                                                                                    arg.Name,
                                                                                                                    InputType(arg.Type),
                                                                                                                    (object)arg.DefaultValue,
                                                                                                                    arg.Description))
                                                                                                        .ToArray();

                            connect.Field(
                                owner,
                                field.Name,
                                OutputType(field.Type),
                                field.Description,
                                args: args);
                        }
                    });
        private InputObjectType InputObject(__Type type)
        {
            if (_builder.TryGetType <InputObjectType>(type.Name, out var owner))
            {
                return(owner);
            }

            _builder.InputObject(type.Name, out owner, type.Description);

            if (type.InputFields != null && type.InputFields.Any())
            {
                _builder.Connections(connect =>
                {
                    foreach (var field in type.InputFields)
                    {
                        connect.InputField(
                            owner,
                            field.Name,
                            InputType(field.Type),
                            field.DefaultValue,
                            field.Description);
                    }
                });
            }

            return(owner);
        }
Esempio n. 3
0
        private EnumType Enum(__Type type)
        {
            if (_builder.TryGetType <EnumType>(type.Name, out var enumType))
            {
                return(enumType);
            }

            var values =
                type.EnumValues
                .Select(v => (
                            v.Name,
                            v.Description,
                            default(IEnumerable <DirectiveInstance>),
                            v.DeprecationReason))
                .ToArray();

            _builder.Enum(
                type.Name,
                out enumType,
                type.Description,
                null,
                values);

            return(enumType);
        }
        protected IType OutputType(__Type typeReference)
        {
            if (typeReference.Kind == __TypeKind.NON_NULL)
            {
                var innerType = OutputType(typeReference.OfType);
                return(innerType != null ? new NonNull(innerType) : null);
            }

            if (typeReference.Kind == __TypeKind.LIST)
            {
                var innerType = OutputType(typeReference.OfType);
                return(innerType != null ? new List(innerType) : null);
            }

            var typeName = typeReference.Name;

            // is type already known by the builder?
            if (_builder.TryGetType <INamedType>(typeName, out var knownType))
            {
                return(knownType);
            }

            // get the actual type
            var typeDefinition = _schema.Types.Single(t => t.Name == typeReference.Name);

            // type is not known so we need to build it
            switch (typeDefinition.Kind)
            {
            case __TypeKind.SCALAR:
                return(Scalar(typeDefinition));

            case __TypeKind.ENUM:
                return(Enum(typeDefinition));

            case __TypeKind.OBJECT:
                return(Object(typeDefinition));

            case __TypeKind.INTERFACE:
                return(Interface(typeDefinition));

            case __TypeKind.UNION:
                return(Union(typeDefinition));
            }

            return(null);
        }
        private UnionType Union(__Type type)
        {
            if (_builder.TryGetType <UnionType>(type.Name, out var unionType))
            {
                return(unionType);
            }

            var possibleTypes = type.PossibleTypes?
                                .Select(possibleType => (ObjectType)OutputType(possibleType))
                                .ToArray();

            _builder.Union(
                type.Name,
                out unionType,
                type.Description,
                possibleTypes: possibleTypes);

            return(unionType);
        }
        private EnumType Enum(__Type type)
        {
            if (_builder.TryGetType <EnumType>(type.Name, out var enumType))
            {
                return(enumType);
            }

            _builder.Enum(
                type.Name,
                out enumType,
                type.Description,
                values => type.EnumValues
                .ForEach(v => values.Value(
                             v.Name,
                             v.Description,
                             Enumerable.Empty <DirectiveInstance>(),
                             v.DeprecationReason))
                );

            return(enumType);
        }
        private InterfaceType Interface(__Type type)
        {
            if (_builder.TryGetType <InterfaceType>(type.Name, out var owner))
            {
                return(owner);
            }

            _builder.Interface(type.Name, out owner, type.Description);
            if (type.Fields != null && type.Fields.Any())
            {
                _delayedActions.Enqueue(() =>
                {
                    _builder.Connections(connect =>
                    {
                        foreach (var field in type.Fields)
                        {
                            connect.Field(
                                owner,
                                field.Name,
                                OutputType(field.Type),
                                field.Description,
                                args: args => field.Args
                                .ForEach(a => args.Arg(
                                             a.Name,
                                             InputType(a.Type),
                                             a.DefaultValue,
                                             a.Description
                                             )
                                         )
                                );
                        }
                    });
                });
            }

            return(owner);
        }
        private ObjectType Object(__Type type,
                                  bool isQueryType        = false,
                                  bool isMutationType     = false,
                                  bool isSubscriptionType = false)
        {
            if (_builder.TryGetType <ObjectType>(type.Name, out var owner))
            {
                return(owner);
            }

            var interfaces = type.Interfaces?.Select(Interface)
                             .ToList();

            if (isQueryType)
            {
                _builder.Query(
                    out owner,
                    type.Description,
                    interfaces);
            }
            else if (isMutationType)
            {
                _builder.Mutation(
                    out owner,
                    type.Description,
                    interfaces);
            }
            else if (isSubscriptionType)
            {
                _builder.Subscription(
                    out owner,
                    type.Description,
                    interfaces);
            }
            else
            {
                _builder.Object(
                    type.Name,
                    out owner,
                    type.Description,
                    interfaces);
            }

            if (type.Fields != null && type.Fields.Any())
            {
                _delayedActions.Enqueue(() =>
                {
                    _builder.Connections(connect =>
                    {
                        foreach (var field in type.Fields)
                        {
                            connect.Field(
                                owner,
                                field.Name,
                                OutputType(field.Type),
                                field.Description,
                                args: args => field.Args
                                .ForEach(a => args.Arg(
                                             a.Name,
                                             InputType(a.Type),
                                             a.DefaultValue,
                                             a.Description
                                             )
                                         ));
                        }
                    });
                });
            }

            return(owner);
        }
 private IType Scalar(__Type type)
 {
     _builder.TryGetType <ScalarType>(type.Name, out var scalar);
     return(scalar);
 }
Esempio n. 10
0
 private IType Scalar(__Type type)
 {
     // throws if scalar not found
     _builder.GetScalar(type.Name, out var scalar);
     return(scalar);
 }