- Convert Golang Struct To GraphQL Object On The Fly
- Easily Create GraphQL Schemas
type UserExtra struct {
Age int `description:"Age of the user"` // You can use description struct tag to add description
Gender string `deprecationReason:"Some Reason"` // You can use deprecationReason tag to add a deprecation reason
}
type User struct {
UserID int
Username string `unique:"true"` // You can use unique tag to define if a field would be unique
Extra UserExtra
Password string `exclude:"true"` // You can use exclude tag to exclude a field
}
func main() {
// GetGraphQLObject will convert golang struct to a graphQL object
userType, err := straf.GetGraphQLObject(User{})
// You can then use userType in your graphQL schema
}
type User struct {
UserID int `isArg:"true"` // You can use isArg tag to define a field as a graphql argument
Username string `isArg:"true"`
}
var database []User = []User{}
func main() {
// GetGraphQLObject will convert golang struct to a graphQL object
userType, err := straf.GetGraphQLObject(User{})
builder := straf.NewSchemaBuilder(userType, User{})
builder.AddArgumentsFromStruct(object2{}) // You can use this function to add more arguments from a struct
builder.AddFunction("CreateUser",
"Adds a user to database",
func(params graphql.ResolveParams) (interface{}, error)) {
id := params.Args["UserID"]
username := params.Args["Username"]
database = append(database, User{UserID: id, Username: Username})
})
schema := builder.Schema
// You can then use this schema
}
func middleware(function func(graphql.ResolveParams) (interface{}, error), params graphql.ResolveParams) (interface{}, error) {
fmt.Println("This function will run as a middleware")
return function(params)
}
func main() {
builder := straf.NewSchemaBuilder(userType, User{}, middleware)
builder.AddFunction("SomeFunction",
"Does Something",
someFunction)
// Here the middleware function would run everytime before someFunction. middleware function would act as a middleware to all functions added to schema builder.
}
Roshan Jignesh Mehta - [email protected]