package graphql.schema.idl; import graphql.language.FieldDefinition; import graphql.language.InterfaceTypeDefinition; import graphql.language.UnionTypeDefinition; import graphql.schema.DataFetcher; import graphql.schema.TypeResolver; /** * A WiringFactory allows you to more dynamically wire in {@link TypeResolver}s and {@link DataFetcher}s * based on the IDL definitions. For example you could look at the directives say to build a more dynamic * set of type resolvers and data fetchers. */ public interface WiringFactory { /** * This is called to ask if this factory can provide a type resolver for the interface * * @param registry the registry of all types * @param interfaceType the definition to be resolved * @return true if the factory can give out a type resolver */ boolean providesTypeResolver(TypeDefinitionRegistry registry, InterfaceTypeDefinition interfaceType); /** * This is called to ask if this factory can provide a type resolver for the union * * @param registry the registry of all types * @param unionType the definition to be resolved * @return true if the factory can give out a type resolver */ boolean providesTypeResolver(TypeDefinitionRegistry registry, UnionTypeDefinition unionType); /** * Returns a {@link TypeResolver} given the type interface * * @param registry the registry of all types * @param interfaceType the definition to be resolved * @return a {@link TypeResolver} */ TypeResolver getTypeResolver(TypeDefinitionRegistry registry, InterfaceTypeDefinition interfaceType); /** * Returns a {@link TypeResolver} given the type union * * @param registry the registry of all types * @param unionType the definition to be resolved * @return a {@link TypeResolver} */ TypeResolver getTypeResolver(TypeDefinitionRegistry registry, UnionTypeDefinition unionType); /** * This is called to ask if this factory can provide a data fetcher for the definition * * @param registry the registry of all types * @param definition the field definition in play * @return true if the factory can give out a date fetcher */ boolean providesDataFetcher(TypeDefinitionRegistry registry, FieldDefinition definition); /** * Returns a {@link DataFetcher} given the type definition * * @param registry the registry of all types * @param definition the definition to be resolved * @return a {@link DataFetcher} */ DataFetcher getDataFetcher(TypeDefinitionRegistry registry, FieldDefinition definition); }