protected virtual FieldType ToSubscriptionFieldType(string parentTypeName, GraphQLFieldDefinition fieldDef)
        {
            var typeConfig  = Types.For(parentTypeName);
            var fieldConfig = typeConfig.SubscriptionFieldFor(fieldDef.Name.Value, ServiceProvider);

            var field = new EventStreamFieldType
            {
                Name              = fieldDef.Name.Value,
                Description       = fieldConfig.Description ?? fieldDef.Comment?.Text,
                ResolvedType      = ToGraphType(fieldDef.Type),
                Resolver          = fieldConfig.Resolver,
                Subscriber        = fieldConfig.Subscriber,
                AsyncSubscriber   = fieldConfig.AsyncSubscriber,
                DeprecationReason = fieldConfig.DeprecationReason
            };

            CopyMetadata(field, fieldConfig);

            field.Arguments = ToQueryArguments(fieldDef.Arguments);

            field.SetAstType(fieldDef);

            VisitNode(field, v => v.VisitFieldDefinition(field));

            return(field);
        }
        protected virtual FieldType ToSubscriptionFieldType(string parentTypeName, GraphQLFieldDefinition fieldDef)
        {
            var typeConfig = Types.For(parentTypeName);

            AssertKnownType(typeConfig);

            var fieldConfig = typeConfig.FieldFor((string)fieldDef.Name.Value);

            InitializeSubscriptionField(fieldConfig, typeConfig.Type);

            AssertKnownField(fieldConfig, typeConfig);

            var field = new EventStreamFieldType
            {
                Name            = fieldConfig.Name,
                Description     = fieldConfig.Description ?? fieldDef.Description?.Value.ToString() ?? fieldDef.Comment?.Text.ToString(),
                ResolvedType    = ToGraphType(fieldDef.Type),
                Resolver        = fieldConfig.Resolver,
                Subscriber      = fieldConfig.Subscriber,
                AsyncSubscriber = fieldConfig.AsyncSubscriber,
            };

            fieldConfig.CopyMetadataTo(field);

            field.Arguments = ToQueryArguments(fieldConfig, fieldDef.Arguments);

            field.SetAstType(fieldDef);
            OverrideDeprecationReason(field, fieldConfig.DeprecationReason);

            return(field);
        }