mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 20:34:37 +03:00
69 lines
1.3 KiB
Go
69 lines
1.3 KiB
Go
package introspection
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/vektah/gqlparser/ast"
|
|
)
|
|
|
|
type Schema struct {
|
|
schema *ast.Schema
|
|
}
|
|
|
|
func (s *Schema) Types() []Type {
|
|
var types []Type
|
|
for _, typ := range s.schema.Types {
|
|
if strings.HasPrefix(typ.Name, "__") {
|
|
continue
|
|
}
|
|
types = append(types, *WrapTypeFromDef(s.schema, typ))
|
|
}
|
|
return types
|
|
}
|
|
|
|
func (s *Schema) QueryType() *Type {
|
|
return WrapTypeFromDef(s.schema, s.schema.Query)
|
|
}
|
|
|
|
func (s *Schema) MutationType() *Type {
|
|
return WrapTypeFromDef(s.schema, s.schema.Mutation)
|
|
}
|
|
|
|
func (s *Schema) SubscriptionType() *Type {
|
|
return WrapTypeFromDef(s.schema, s.schema.Subscription)
|
|
}
|
|
|
|
func (s *Schema) Directives() []Directive {
|
|
var res []Directive
|
|
|
|
for _, d := range s.schema.Directives {
|
|
res = append(res, s.directiveFromDef(d))
|
|
}
|
|
|
|
return res
|
|
}
|
|
|
|
func (s *Schema) directiveFromDef(d *ast.DirectiveDefinition) Directive {
|
|
var locs []string
|
|
for _, loc := range d.Locations {
|
|
locs = append(locs, string(loc))
|
|
}
|
|
|
|
var args []InputValue
|
|
for _, arg := range d.Arguments {
|
|
args = append(args, InputValue{
|
|
Name: arg.Name,
|
|
Description: arg.Description,
|
|
DefaultValue: defaultValue(arg.DefaultValue),
|
|
Type: WrapTypeFromType(s.schema, arg.Type),
|
|
})
|
|
}
|
|
|
|
return Directive{
|
|
Name: d.Name,
|
|
Description: d.Description,
|
|
Locations: locs,
|
|
Args: args,
|
|
}
|
|
}
|