private static void DeclareFields( InterfaceTypeDefinition parent, IReadOnlyCollection <FieldDefinitionNode> fields, bool preserveSyntaxNodes) { foreach (FieldDefinitionNode field in fields) { var fieldDefinition = new InterfaceFieldDefinition( field.Name.Value, field.Description?.Value, TypeReference.Create(field.Type)); fieldDefinition.BindTo = field.GetBindingValue(); if (preserveSyntaxNodes) { fieldDefinition.SyntaxNode = field; } SdlToTypeSystemHelper.AddDirectives(fieldDefinition, field); if (field.DeprecationReason() is { Length: > 0 } reason) { fieldDefinition.DeprecationReason = reason; } DeclareFieldArguments(fieldDefinition, field, preserveSyntaxNodes); parent.Fields.Add(fieldDefinition); } }
private static void RewriteInterfaceFieldType( IDescriptorContext context, InterfaceFieldDefinition definition) { if (definition.Type is ExtendedTypeReference typeReference) { ITypeInfo typeInfo = context.TypeInspector.CreateTypeInfo(typeReference.Type); IExtendedType type = RewriteType(context.TypeInspector, typeInfo); definition.Type = typeReference.WithType(type); } else { throw new SchemaException(SchemaErrorBuilder.New() .SetMessage("Unable to resolve type from field `{0}`.", definition.Name) .Build()); } }
private static void DeclareFieldArguments( InterfaceFieldDefinition parent, FieldDefinitionNode field, bool preserveSyntaxNodes) { foreach (InputValueDefinitionNode argument in field.Arguments) { var argumentDefinition = new ArgumentDefinition( argument.Name.Value, argument.Description?.Value, TypeReference.Create(argument.Type), argument.DefaultValue); argumentDefinition.BindTo = argument.GetBindingValue(); if (preserveSyntaxNodes) { argumentDefinition.SyntaxNode = argument; } SdlToTypeSystemHelper.AddDirectives(argumentDefinition, argument); parent.Arguments.Add(argumentDefinition); } }
static InterfaceField CreateField(InterfaceFieldDefinition fieldDef, int index) => new(fieldDef, index);