private static IEnumerable <FieldType> GetFieldsForFieldType(string remote, Introspection.TypeElement parentField) { FieldTypeResolver complexFieldTypeResolver = member => { if (!(member is RemoteLiteralGraphTypeMemberInfo literalMember)) { return(null); } if (!RemoteServerTypes.TryGetValue(remote, out var remoteTypes)) { return(null); } var schemaType = remoteTypes.FirstOrDefault(t => t.Name == literalMember.TypeName); var realType = literalMember.IsList ? typeof(ListGraphType <>).MakeGenericType(schemaType) : schemaType; return(new FieldType { Name = literalMember.Name, Type = realType, Resolver = LiteralGraphTypeHelpers.CreateFieldResolverFor(literalMember) }); }; var fields = parentField.Fields; if (fields == null) { return(new FieldType[] { }); } return(fields .Select(field => { return new RemoteLiteralGraphTypeMemberInfo { DeclaringTypeName = parentField.Name, Name = field.Name, Type = IntrospectionTypeToLiteralGraphTypeMemberInfoType(field.Type), TypeName = IntrospectionTypeToLiteralGraphTypeMemberInfoTypeName(field.Type), IsList = field.Type.Kind == TypeElementTypeKind.List, GetValueFn = ctx => { return ((JToken)ctx.Source)[field.Name].Value <object>(); } }; }) // TODO: handle unresolvable types (I'm looking at you UNION) .Where(member => member.Type != LiteralGraphTypeMemberInfoType.Unknown) .Select(member => LiteralGraphTypeHelpers.GetFieldTypeForMember(member, complexFieldTypeResolver)) .ToList()); }
private bool TryGetFieldTypeFromRemoteSchema(Introspection.Schema schema, string name, out Introspection.TypeElement field) { field = schema.Types.FirstOrDefault(t => t.Name == name); return(field != null); }