github.com/maeglindeveloper/gqlgen@v0.13.1-0.20210413081235-57808b12a0a0/graphql/introspection/schema.go (about) 1 package introspection 2 3 import ( 4 "strings" 5 6 "github.com/vektah/gqlparser/v2/ast" 7 ) 8 9 type Schema struct { 10 schema *ast.Schema 11 } 12 13 func (s *Schema) Types() []Type { 14 types := make([]Type, 0, len(s.schema.Types)) 15 for _, typ := range s.schema.Types { 16 if strings.HasPrefix(typ.Name, "__") { 17 continue 18 } 19 types = append(types, *WrapTypeFromDef(s.schema, typ)) 20 } 21 return types 22 } 23 24 func (s *Schema) QueryType() *Type { 25 return WrapTypeFromDef(s.schema, s.schema.Query) 26 } 27 28 func (s *Schema) MutationType() *Type { 29 return WrapTypeFromDef(s.schema, s.schema.Mutation) 30 } 31 32 func (s *Schema) SubscriptionType() *Type { 33 return WrapTypeFromDef(s.schema, s.schema.Subscription) 34 } 35 36 func (s *Schema) Directives() []Directive { 37 res := make([]Directive, 0, len(s.schema.Directives)) 38 39 for _, d := range s.schema.Directives { 40 res = append(res, s.directiveFromDef(d)) 41 } 42 43 return res 44 } 45 46 func (s *Schema) directiveFromDef(d *ast.DirectiveDefinition) Directive { 47 locs := make([]string, len(d.Locations)) 48 for i, loc := range d.Locations { 49 locs[i] = string(loc) 50 } 51 52 args := make([]InputValue, len(d.Arguments)) 53 for i, arg := range d.Arguments { 54 args[i] = InputValue{ 55 Name: arg.Name, 56 Description: arg.Description, 57 DefaultValue: defaultValue(arg.DefaultValue), 58 Type: WrapTypeFromType(s.schema, arg.Type), 59 } 60 } 61 62 return Directive{ 63 Name: d.Name, 64 Description: d.Description, 65 Locations: locs, 66 Args: args, 67 } 68 }