modulepackage
0.0.0-20171101102248-0e396c48ede6
Repository: https://github.com/sdkie/go-graphql-tools.git
Documentation: pkg.go.dev
# README
Generator GraphQL schema from Go-structs
#IN WORKING!
Based on https://github.com/graphql-go/graphql library
Example
Star Wars, based on https://github.com/facebook/relay/blob/master/examples/star-wars/
Query's example
query Q1{
rebels{
id
name
ships{
edges{
node{
id
name
}
}
}
}
empire{
id
name
}
}
Mutation's example
mutation M1{ introduceShip(input:{shipName:"New shippy"}){
ship{
id
name
}
} }
Schema declaration
type Node struct {
Id string `json:"id" "graphql:id"`
}
func (n Node) IsInterface() bool {
return true
}
type Faction struct {
Node `graphql:"interface"`
Id string `json:"id" "graphql:id"`
Name string `json:"name"`
Ships ShipConnection `json:"ships"`
}
type Ship struct {
Id string `json:"id" graphql:"id"`
Name string `json:"name"`
}
type ShipConnection struct {
Edges []ShipEdge `json:"edges"`
PageInfo *PageInfo `json:"pageInfo"`
}
type ShipEdge struct {
Cursor *string `json:"cursor"`
Node Ship `json:"node"`
}
type PageInfo struct {
HasNextPage *bool `json:"hasNextPage"`
HasPreviousPage *bool `json:"hasPreviousPage"`
StartCursor string `json:"startCursor"`
EndCursor string `json:"endCursor"`
}
type Query struct {
Rebels Faction `json:"rebels"`
Empire Faction `json:"empire"`
Node Node `json:"node"`
}
type QueryNodeArgs struct {
Id string `json:"id" graphql:"id"`
}
func (q Query) ArgsForNode() QueryNodeArgs {
return QueryNodeArgs{}
}
type IntroduceShipInput struct {
ClientMutationId *string `json:"clientMutationId"`
ShipName *string `json:"shipName"`
FactionId *string `json:"factionId" graphql:"id"`
}
type IntroduceShipPayload struct {
ClientMutationId *string `json:"clientMutationId"`
Ship Ship `json:"ship"`
Faction Faction `json:"faction"`
}
type Mutation struct {
IntroduceShip IntroduceShipPayload `json:"introduceShip"`
}
type MutationIntroduceShipArgs struct {
Input *IntroduceShipInput `json:"input" graphql:"input"`
}
func (m Mutation) ArgsForIntroduceShip() MutationIntroduceShipArgs {
return MutationIntroduceShipArgs{}
}
Resolve
router.Query("Query.Rebels", func(query Query) (Faction, error) {
return GetFaction("1"), nil
})
router.Query("Query.Empire", func(query Query) (Faction, error) {
return GetFaction("2"), nil
})
router.Query("Faction.Ships", func(faction Faction, p tools.ResolveParams) (*relay.Connection, error) {
return relay.ConnectionFromArray(GetShips(faction.Id), relay.NewConnectionArguments(p.Params.Args)), nil
})
router.Query("Mutation.IntroduceShip", func(m Mutation, args MutationIntroduceShipArgs) (interface{}, error) {
return IntroduceShipPayload{
Ship: Ship{
Id: nextShipId,
Name: *args.Input.ShipName,
},
}, nil
})
# Functions
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# Constants
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# Structs
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# Interfaces
No description provided by the author
# Type aliases
No description provided by the author