github.com/niko0xdev/gqlgen@v0.17.55-0.20240120102243-2ecff98c3e37/graphql/introspection/introspection.go (about) 1 // introspection implements the spec defined in https://github.com/facebook/graphql/blob/master/spec/Section%204%20--%20Introspection.md#schema-introspection 2 package introspection 3 4 import "github.com/vektah/gqlparser/v2/ast" 5 6 type ( 7 Directive struct { 8 Name string 9 description string 10 Locations []string 11 Args []InputValue 12 IsRepeatable bool 13 } 14 15 EnumValue struct { 16 Name string 17 description string 18 deprecation *ast.Directive 19 } 20 21 Field struct { 22 Name string 23 description string 24 Type *Type 25 Args []InputValue 26 deprecation *ast.Directive 27 } 28 29 InputValue struct { 30 Name string 31 description string 32 DefaultValue *string 33 Type *Type 34 } 35 ) 36 37 func WrapSchema(schema *ast.Schema) *Schema { 38 return &Schema{schema: schema} 39 } 40 41 func (f *EnumValue) Description() *string { 42 if f.description == "" { 43 return nil 44 } 45 return &f.description 46 } 47 48 func (f *EnumValue) IsDeprecated() bool { 49 return f.deprecation != nil 50 } 51 52 func (f *EnumValue) DeprecationReason() *string { 53 if f.deprecation == nil { 54 return nil 55 } 56 57 reason := f.deprecation.Arguments.ForName("reason") 58 if reason == nil { 59 return nil 60 } 61 62 return &reason.Value.Raw 63 } 64 65 func (f *Field) Description() *string { 66 if f.description == "" { 67 return nil 68 } 69 return &f.description 70 } 71 72 func (f *Field) IsDeprecated() bool { 73 return f.deprecation != nil 74 } 75 76 func (f *Field) DeprecationReason() *string { 77 if f.deprecation == nil || !f.IsDeprecated() { 78 return nil 79 } 80 81 reason := f.deprecation.Arguments.ForName("reason") 82 83 if reason == nil { 84 defaultReason := "No longer supported" 85 return &defaultReason 86 } 87 88 return &reason.Value.Raw 89 } 90 91 func (f *InputValue) Description() *string { 92 if f.description == "" { 93 return nil 94 } 95 return &f.description 96 } 97 98 func (f *Directive) Description() *string { 99 if f.description == "" { 100 return nil 101 } 102 return &f.description 103 }