{"id":15192505,"url":"https://github.com/thundr67/straf","last_synced_at":"2025-10-27T18:30:33.109Z","repository":{"id":57648011,"uuid":"202732950","full_name":"ThundR67/straf","owner":"ThundR67","description":"Convert Golang Struct To GraphQL Object On The Fly","archived":false,"fork":false,"pushed_at":"2020-05-16T13:22:22.000Z","size":28,"stargazers_count":38,"open_issues_count":0,"forks_count":6,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-10-30T08:37:57.068Z","etag":null,"topics":["go","golang","graphql","graphql-query","graphql-schema","struct","structs","structtographql"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ThundR67.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-08-16T13:31:39.000Z","updated_at":"2024-08-09T13:32:57.000Z","dependencies_parsed_at":"2022-08-25T06:50:27.974Z","dependency_job_id":null,"html_url":"https://github.com/ThundR67/straf","commit_stats":null,"previous_names":["sonicroshan/straf"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThundR67%2Fstraf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThundR67%2Fstraf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThundR67%2Fstraf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThundR67%2Fstraf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ThundR67","download_url":"https://codeload.github.com/ThundR67/straf/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238536089,"owners_count":19488654,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","golang","graphql","graphql-query","graphql-schema","struct","structs","structtographql"],"created_at":"2024-09-27T21:41:15.688Z","updated_at":"2025-10-27T18:30:27.816Z","avatar_url":"https://github.com/ThundR67.png","language":"Go","readme":"[![Go Report Card](https://goreportcard.com/badge/github.com/SonicRoshan/straf)](https://goreportcard.com/report/github.com/SonicRoshan/straf) [![GoDoc](https://godoc.org/github.com/SonicRoshan/straf?status.svg)](https://godoc.org/github.com/SonicRoshan/straf) [![GoCover](https://gocover.io/_badge/github.com/SonicRoshan/straf)](https://gocover.io/github.com/SonicRoshan/straf)\n\n# Straf\n1. Convert Golang Struct To GraphQL Object On The Fly\n2. Easily Create GraphQL Schemas\n\n## Example\n\n### Converting struct to GraphQL Object\n```go\ntype UserExtra struct {\n    Age int `description:\"Age of the user\"` // You can use description struct tag to add description\n    Gender string `deprecationReason:\"Some Reason\"` // You can use deprecationReason tag to add a deprecation reason\n}\n\ntype User struct {\n    UserID int\n    Username string `unique:\"true\"` // You can use unique tag to define if a field would be unique\n    Extra UserExtra\n    Password string `exclude:\"true\"` // You can use exclude tag to exclude a field\n}\n\n\nfunc main() {\n    // GetGraphQLObject will convert golang struct to a graphQL object\n    userType, err := straf.GetGraphQLObject(User{})\n\n    // You can then use userType in your graphQL schema\n}\n```\n\n\n### Using The Schema Builder\n```go\ntype User struct {\n    UserID int `isArg:\"true\"` // You can use isArg tag to define a field as a graphql argument\n    Username string `isArg:\"true\"`\n}\n\nvar database []User = []User{}\n\nfunc main() {\n    // GetGraphQLObject will convert golang struct to a graphQL object\n    userType, err := straf.GetGraphQLObject(User{})\n\n    builder := straf.NewSchemaBuilder(userType, User{})\n    \n    builder.AddArgumentsFromStruct(object2{}) // You can use this function to add more arguments from a struct\n    builder.AddFunction(\"CreateUser\", \n                        \"Adds a user to database\",\n                        func(params graphql.ResolveParams) (interface{}, error)) {\n                            id := params.Args[\"UserID\"]\n                            username := params.Args[\"Username\"]\n                            database = append(database, User{UserID: id, Username: Username})\n                        })\n    schema := builder.Schema\n    // You can then use this schema\n}\n```\n\n### Using Middleware In Schema Builder\n```go\n\nfunc middleware(function func(graphql.ResolveParams) (interface{}, error), params graphql.ResolveParams) (interface{}, error) {\n\n    fmt.Println(\"This function will run as a middleware\")\n\n    return function(params)\n}\n\nfunc main() {\n    builder := straf.NewSchemaBuilder(userType, User{}, middleware)\n\n    builder.AddFunction(\"SomeFunction\", \n                        \"Does Something\",\n                        someFunction)\n\n   // Here the middleware function would run everytime before someFunction. middleware function would act as a middleware to all functions added to schema builder.\n}\n\n```\n\n## Author\nRoshan Jignesh Mehta - sonicroshan122@gmail.com\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthundr67%2Fstraf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthundr67%2Fstraf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthundr67%2Fstraf/lists"}