straf

package module
v2.2.5+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 24, 2020 License: MIT Imports: 3 Imported by: 1

README

Go Report Card GoDoc GoCover

Straf

  1. Convert Golang Struct To GraphQL Object On The Fly
  2. Easily Create GraphQL Schemas

Example

Converting struct to GraphQL Object
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
}
Using The Schema Builder
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
}
Using Middleware In Schema Builder

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.
}

Author

Roshan Jignesh Mehta - sonicroshan122@gmail.com

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ConvertSimpleType

func ConvertSimpleType(objectType reflect.Type) (*graphql.Scalar, error)

ConvertSimpleType converts simple type to graphql field

func ConvertStruct

func ConvertStruct(objectType reflect.Type) graphql.Fields

ConvertStruct converts struct to graphql fields

func ConvertStructToObject

func ConvertStructToObject(
	objectType reflect.Type) *graphql.Object

ConvertStructToObject converts simple struct to graphql object

func GetArgs

func GetArgs(object interface{}) graphql.FieldConfigArgument

func GetFieldType

func GetFieldType(object reflect.StructField) graphql.Output

GetFieldType Converts object to a graphQL field type

func GetGraphQLObject

func GetGraphQLObject(object interface{}) (*graphql.Object, error)

GetGraphQLObject Converts struct into graphql object

func GetTagValue

func GetTagValue(objectType reflect.StructField, tagName string) string

getTagValue returns tag value of a struct

Types

type SchemaBuilder

type SchemaBuilder struct {
	GraphQLType graphql.Output
	Object      interface{}
	Schema      graphql.Fields
	// contains filtered or unexported fields
}

SchemaBuilder is used to build a schema based on a struct

func NewSchemaBuilder

func NewSchemaBuilder(
	graphQLType graphql.Output,
	object interface{},
	middlewareArg ...middlewareType) *SchemaBuilder

NewSchemaBuilder is used get a new schema builder

func (*SchemaBuilder) AddArgumentsFromStruct

func (schemaBuilder *SchemaBuilder) AddArgumentsFromStruct(object interface{})

AddArgumentsFromStruct is used to add arguments from a struct

func (*SchemaBuilder) AddFunction

func (schemaBuilder *SchemaBuilder) AddFunction(
	name,
	description string,
	function func(graphql.ResolveParams) (interface{}, error))

AddFunction adds a function

func (*SchemaBuilder) Init

func (schemaBuilder *SchemaBuilder) Init()

Init initializes

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL