{{range .Users}}
{{.Name}}
{{if .Active}}active{{end}}
{{end}}
================================================
FILE: 3-web/3_template/2_func/func.go
================================================
package main
import (
"fmt"
"html/template"
"net/http"
)
type User struct {
ID int
Name string
Active bool
}
func IsUserOdd(u *User) bool {
return u.ID%2 != 0
}
func main() {
tmplFuncs := template.FuncMap{
"OddUser": IsUserOdd,
}
tmpl, err := template.
New("").
Funcs(tmplFuncs).
ParseFiles("func.html")
if err != nil {
panic(err)
}
users := []User{
User{1, "Vasily", true},
User{2, "Ivan", false},
User{3, "Dmitry", true},
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
err := tmpl.ExecuteTemplate(w, "func.html",
struct {
Users []User
}{
users,
})
if err != nil {
panic(err)
}
})
fmt.Println("starting server at :8080")
http.ListenAndServe(":8080", nil)
}
================================================
FILE: 3-web/3_template/2_func/func.html
================================================
Users
{{range .Users}}
{{.Name}},
{{if OddUser .}}
id {{.ID}} is odd
{{end}}
{{end}}
================================================
FILE: 3-web/3_template/3_method/method.go
================================================
package main
import (
"fmt"
"html/template"
"net/http"
)
type User struct {
ID int
Name string
Active bool
}
func (u *User) PrintActive() string {
if !u.Active {
return ""
}
return "method says user " + u.Name + " active"
}
func main() {
tmpl, err := template.
New("").
ParseFiles("method.html")
if err != nil {
panic(err)
}
users := []User{
User{1, "Vasily", true},
User{2, "Ivan", false},
User{3, "Dmitry", true},
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
err := tmpl.ExecuteTemplate(w, "method.html",
struct {
Users []User
}{
users,
})
if err != nil {
panic(err)
}
})
fmt.Println("starting server at :8080")
http.ListenAndServe(":8080", nil)
}
================================================
FILE: 3-web/3_template/3_method/method.html
================================================
Users
{{range .Users}}
{{.Name}}
{{.PrintActive}}
{{end}}
================================================
FILE: 3-web/4_json_http/main.go
================================================
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"sync"
)
type UserInput struct {
Name string `json:"name"`
Password string `json:"password"`
}
type User struct {
ID uint64 `json:"id"`
Name string `json:"name"`
Password string `json:"-"`
}
type Handlers struct {
users []User
mu *sync.Mutex
}
func (h *Handlers) HandleCreateUser(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
decoder := json.NewDecoder(r.Body)
newUserInput := new(UserInput)
err := decoder.Decode(newUserInput)
if err != nil {
log.Printf("error while unmarshalling JSON: %s", err)
w.Write([]byte("{}"))
return
}
fmt.Println(newUserInput)
h.mu.Lock()
var id uint64 = 0
if len(h.users) > 0 {
id = h.users[len(h.users)-1].ID + 1
}
h.users = append(h.users, User{
ID: id,
Name: newUserInput.Name,
Password: newUserInput.Password,
})
h.mu.Unlock()
}
func (h *Handlers) HandleListUsers(w http.ResponseWriter, r *http.Request) {
encoder := json.NewEncoder(w)
h.mu.Lock()
err := encoder.Encode(h.users)
h.mu.Unlock()
if err != nil {
log.Printf("error while marshalling JSON: %s", err)
w.Write([]byte("{}"))
return
}
}
func main() {
handlers := Handlers{
users: make([]User, 0),
mu: &sync.Mutex{},
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.Write([]byte("{}"))
})
http.HandleFunc("/users/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
log.Println(r.URL.Path)
if r.Method == http.MethodPost {
handlers.HandleCreateUser(w, r)
return
}
handlers.HandleListUsers(w, r)
})
http.ListenAndServe(":8080", nil)
}
================================================
FILE: 3-web/4_json_http/main_test.go
================================================
package main
import (
"bytes"
"io"
"net/http"
"net/http/httptest"
"reflect"
"strings"
"sync"
"testing"
)
func TestCreateUsers(t *testing.T) {
t.Parallel()
h := Handlers{
users: []User{},
mu: &sync.Mutex{},
}
body := bytes.NewReader([]byte(`{"name": "Vasily", "password": "qwerty"}`))
expectedUsers := []User{
{
ID: 3,
Name: "Vasily",
Password: "qwerty",
},
}
r := httptest.NewRequest("POST", "/users/", body)
w := httptest.NewRecorder()
h.HandleCreateUser(w, r)
if w.Code != http.StatusOK {
t.Error("status is not ok")
}
reflect.DeepEqual(h.users, expectedUsers)
}
var expectedJSON = `[{"id":1,"name":"Afanasiy"},{"id":2,"name":"Ka"}]`
func TestGetUsers(t *testing.T) {
h := Handlers{
users: []User{
{
ID: 1,
Name: "Afanasiy",
Password: "1234",
},
{
ID: 2,
Name: "Ka",
Password: "jdjfaljhfljehfs;l3345354",
},
},
mu: &sync.Mutex{},
}
t.Parallel()
r := httptest.NewRequest("GET", "/users/", nil)
w := httptest.NewRecorder()
h.HandleListUsers(w, r)
if w.Code != http.StatusOK {
t.Error("status is not ok")
}
bytes, _ := io.ReadAll(w.Body)
if strings.Trim(string(bytes), "\n") != expectedJSON {
t.Errorf("expected: [%s], got: [%s]", expectedJSON, string(bytes))
}
}
================================================
FILE: 3-web/readings_3.md
================================================
Конечно же документация:
* https://golang.org/pkg/net/http/
Дополнительные материалы
* https://gowebexamples.github.io/ - примеры касательно разработки веба
* https://golang.org/doc/articles/wiki/
* https://astaxie.gitbooks.io/build-web-application-with-golang/
* https://github.com/thewhitetulip/web-dev-golang-anti-textbook/
* https://codegangsta.gitbooks.io/building-web-apps-with-go/content/
* http://www.golangprograms.com/
* http://marcio.io/2015/07/cheap-mapreduce-in-go/
* https://www.rzaluska.com/blog/important-go-interfaces/
* https://blog.cloudflare.com/the-complete-guide-to-golang-net-http-timeouts/ - про таймауты
* http://polyglot.ninja/golang-making-http-requests/
* http://tumregels.github.io/Network-Programming-with-Go/
На русском:
* https://habrahabr.ru/post/330512/ - Многопользовательская игра на Go через telnet - чисто сеть
================================================
FILE: 4-api/1_rpc/jsonrpc/books.go
================================================
package main
import (
"log"
"sync"
)
type Book struct {
ID uint `json:"id"`
Title string `json:"title"`
Price uint `json:"price"`
}
type BookStore struct {
books []*Book
mu sync.RWMutex
}
func NewBookStore() *BookStore {
return &BookStore{
mu: sync.RWMutex{},
books: []*Book{},
}
}
func (bs *BookStore) AddBook(in *Book, out *Book) error {
log.Println("AddBook called")
bs.mu.Lock()
bs.books = append(bs.books, in)
bs.mu.Unlock()
*out = *in
return nil
}
func (bs *BookStore) GetBooks(in int, out *[]*Book) error {
log.Println("GetBooks called")
bs.mu.Lock()
defer bs.mu.Unlock()
*out = bs.books
return nil
}
================================================
FILE: 4-api/1_rpc/jsonrpc/server.go
================================================
package main
import (
"fmt"
"io"
"log"
"net/http"
"net/rpc"
"net/rpc/jsonrpc"
)
type HttpConn struct {
in io.Reader
out io.Writer
}
func (c *HttpConn) Read(p []byte) (n int, err error) { return c.in.Read(p) }
func (c *HttpConn) Write(d []byte) (n int, err error) { return c.out.Write(d) }
func (c *HttpConn) Close() error { return nil }
/*
{
"jsonrpc":"2.0",
"id":1,
"method":"BookStore.AddBook",
"params":[
{
"title": "The Moon is a harsh mistress",
"price": 200
}
]
}
*/
/*
curl -v -X POST -H "Content-Type: application/json" -H "X-Auth: 123" -d '{"jsonrpc":"2.0", "id": 1, "method": "BookStore.AddBook", "params": [{"title":"The Moon is a harsh mistress", "price": 200}]}' http://localhost:8081/rpc
curl -v -X POST -H "Content-Type: application/json" -H "X-Auth: 123" -d '{"jsonrpc":"2.0", "id": 2, "method": "BookStore.GetBooks", "params": []}' http://localhost:8081/rpc
*/
type Handler struct {
rpcServer *rpc.Server
}
func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Println("rpc auth: ", r.Header.Get("X-Auth"))
serverCodec := jsonrpc.NewServerCodec(&HttpConn{
in: r.Body,
out: w,
})
w.Header().Set("Content-Type", "application/json")
err := h.rpcServer.ServeRequest(serverCodec)
if err != nil {
log.Printf("Error while serving JSON request: %v", err)
http.Error(w, `{"error":"cant serve request"}`, 500)
} else {
w.WriteHeader(200)
}
}
func main() {
bookStore := NewBookStore()
server := rpc.NewServer()
server.Register(bookStore)
sessionHandler := &Handler{
rpcServer: server,
}
http.Handle("/rpc", sessionHandler)
fmt.Println("starting server at :8081")
http.ListenAndServe(":8081", nil)
}
================================================
FILE: 4-api/1_rpc/main.go
================================================
package main
import (
"fmt"
"net/http"
)
func login(w http.ResponseWriter, r *http.Request) {
fmt.Println("login")
w.Write([]byte("login"))
}
func signup(w http.ResponseWriter, r *http.Request) {
fmt.Println("signup")
w.Write([]byte("signup"))
}
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
method := r.FormValue("method")
switch method {
case "login":
login(w, r)
case "signup":
signup(w, r)
}
})
http.ListenAndServe(":9090", nil)
}
================================================
FILE: 4-api/1_rpc/net-rpc/books.go
================================================
package main
import (
"log"
"sync"
)
type Book struct {
ID uint
Title string
Price uint
}
type BookStore struct {
books []*Book
mu sync.RWMutex
}
func NewBookStore() *BookStore {
return &BookStore{
mu: sync.RWMutex{},
books: []*Book{},
}
}
func (bs *BookStore) AddBook(in *Book, out *Book) error {
log.Println("AddBook called")
bs.mu.Lock()
bs.books = append(bs.books, in)
bs.mu.Unlock()
*out = *in
return nil
}
func (bs *BookStore) GetBooks(in int, out *[]*Book) error {
log.Println("GetBooks called")
bs.mu.Lock()
defer bs.mu.Unlock()
*out = bs.books
return nil
}
================================================
FILE: 4-api/1_rpc/net-rpc/client.go
================================================
package main
import (
"log"
"net/rpc"
)
func main() {
client, err := rpc.DialHTTP("tcp", "localhost:8081")
if err != nil {
log.Fatal("dialing:", err)
}
res := new(Book)
client.Call("BookStore.AddBook", &Book{Title: "The Moon is a harsh mistress"}, res)
if err != nil {
log.Printf("AddBook error: %s\n", err)
}
log.Printf("AddBook: %#v", res)
books := &[]*Book{}
err = client.Call("BookStore.GetBooks", 0, books)
if err != nil {
log.Printf("GetBooks error: %s\n", err)
}
log.Printf("GetBooks: %#v", *books)
}
================================================
FILE: 4-api/1_rpc/net-rpc/server.go
================================================
package main
import (
"fmt"
"log"
"net"
"net/http"
"net/rpc"
)
func main() {
bookStore := NewBookStore()
rpc.Register(bookStore)
rpc.HandleHTTP()
l, e := net.Listen("tcp", ":8081")
if e != nil {
log.Fatal("listen error:", e)
}
fmt.Println("starting server at :8081")
http.Serve(l, nil)
}
================================================
FILE: 4-api/2_rest/books.go
================================================
package main
import (
"log"
"sync"
)
type Book struct {
ID uint `json:"id"`
Title string `json:"title"`
Price uint `json:"price"`
}
type BookStore struct {
books []*Book
mu sync.RWMutex
nextID uint
}
func NewBookStore() *BookStore {
return &BookStore{
mu: sync.RWMutex{},
books: []*Book{},
}
}
func (bs *BookStore) AddBook(in *Book) (uint, error) {
log.Println("AddBook called")
bs.mu.Lock()
bs.nextID++
in.ID = bs.nextID
log.Println("nextID", bs.nextID)
bs.books = append(bs.books, in)
bs.mu.Unlock()
return in.ID, nil
}
func (bs *BookStore) GetBooks() ([]*Book, error) {
log.Println("GetBooks called")
bs.mu.RLock()
defer bs.mu.RUnlock()
return bs.books, nil
}
================================================
FILE: 4-api/2_rest/main.go
================================================
package main
import (
"encoding/json"
"log"
"net/http"
"strconv"
"github.com/gorilla/mux"
)
type Result struct {
Body interface{} `json:"body,omitempty"`
Err string `json:"err,omitempty"`
}
type BooksHandler struct {
store *BookStore
}
func (api *BooksHandler) List(w http.ResponseWriter, r *http.Request) {
books, err := api.store.GetBooks()
if err != nil {
http.Error(w, `{"error":"db"}`, 500)
return
}
body := map[string]interface{}{
"books": books,
}
json.NewEncoder(w).Encode(&Result{Body: body})
}
// http://127.0.0.1:8080/add?title=test&price=123
func (api *BooksHandler) Add(w http.ResponseWriter, r *http.Request) {
title := r.FormValue("title")
price, _ := strconv.Atoi(r.FormValue("price"))
in := &Book{
Title: title,
Price: uint(price),
}
id, err := api.store.AddBook(in)
if err != nil {
http.Error(w, `{"error":"db"}`, 500)
return
}
body := map[string]interface{}{
"id": id,
}
json.NewEncoder(w).Encode(&Result{Body: body})
}
func (api *BooksHandler) BookByID(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
id, err := strconv.Atoi(vars["id"])
if err != nil {
http.Error(w, `{"error":"bad id"}`, 400)
return
}
books, err := api.store.GetBooks()
if err != nil {
http.Error(w, `{"error":"db"}`, 500)
return
}
var book *Book
for _, b := range books {
if b.ID == uint(id) {
book = b
break
}
}
if book == nil {
http.Error(w, `{"body":{"book":null}}`, 404)
return
}
body := map[string]interface{}{
"book": book,
}
json.NewEncoder(w).Encode(&Result{Body: body})
}
func main() {
r := mux.NewRouter()
api := &BooksHandler{
store: NewBookStore(),
}
r.HandleFunc("/", api.List)
r.HandleFunc("/add", api.Add)
r.HandleFunc("/book/{id:[0-9]+}", api.BookByID)
log.Println("start serving :8080")
http.ListenAndServe(":8080", r)
}
================================================
FILE: 4-api/3_graphql/gqlgen/generated.go
================================================
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
package gqlgen
import (
"bytes"
"context"
"errors"
"strconv"
"sync"
"sync/atomic"
"github.com/99designs/gqlgen/graphql"
"github.com/99designs/gqlgen/graphql/introspection"
"github.com/vektah/gqlparser"
"github.com/vektah/gqlparser/ast"
)
// region ************************** generated!.gotpl **************************
// NewExecutableSchema creates an ExecutableSchema from the ResolverRoot interface.
func NewExecutableSchema(cfg Config) graphql.ExecutableSchema {
return &executableSchema{
resolvers: cfg.Resolvers,
directives: cfg.Directives,
complexity: cfg.Complexity,
}
}
type Config struct {
Resolvers ResolverRoot
Directives DirectiveRoot
Complexity ComplexityRoot
}
type ResolverRoot interface {
Query() QueryResolver
}
type DirectiveRoot struct {
}
type ComplexityRoot struct {
Author struct {
Name func(childComplexity int) int
}
Book struct {
Author func(childComplexity int) int
ID func(childComplexity int) int
Price func(childComplexity int) int
Title func(childComplexity int) int
}
Query struct {
Books func(childComplexity int) int
}
}
type QueryResolver interface {
Books(ctx context.Context) ([]*Book, error)
}
type executableSchema struct {
resolvers ResolverRoot
directives DirectiveRoot
complexity ComplexityRoot
}
func (e *executableSchema) Schema() *ast.Schema {
return parsedSchema
}
func (e *executableSchema) Complexity(typeName, field string, childComplexity int, rawArgs map[string]interface{}) (int, bool) {
ec := executionContext{nil, e}
_ = ec
switch typeName + "." + field {
case "Author.name":
if e.complexity.Author.Name == nil {
break
}
return e.complexity.Author.Name(childComplexity), true
case "Book.author":
if e.complexity.Book.Author == nil {
break
}
return e.complexity.Book.Author(childComplexity), true
case "Book.id":
if e.complexity.Book.ID == nil {
break
}
return e.complexity.Book.ID(childComplexity), true
case "Book.price":
if e.complexity.Book.Price == nil {
break
}
return e.complexity.Book.Price(childComplexity), true
case "Book.title":
if e.complexity.Book.Title == nil {
break
}
return e.complexity.Book.Title(childComplexity), true
case "Query.books":
if e.complexity.Query.Books == nil {
break
}
return e.complexity.Query.Books(childComplexity), true
}
return 0, false
}
func (e *executableSchema) Query(ctx context.Context, op *ast.OperationDefinition) *graphql.Response {
ec := executionContext{graphql.GetRequestContext(ctx), e}
buf := ec.RequestMiddleware(ctx, func(ctx context.Context) []byte {
data := ec._Query(ctx, op.SelectionSet)
var buf bytes.Buffer
data.MarshalGQL(&buf)
return buf.Bytes()
})
return &graphql.Response{
Data: buf,
Errors: ec.Errors,
Extensions: ec.Extensions,
}
}
func (e *executableSchema) Mutation(ctx context.Context, op *ast.OperationDefinition) *graphql.Response {
return graphql.ErrorResponse(ctx, "mutations are not supported")
}
func (e *executableSchema) Subscription(ctx context.Context, op *ast.OperationDefinition) func() *graphql.Response {
return graphql.OneShot(graphql.ErrorResponse(ctx, "subscriptions are not supported"))
}
type executionContext struct {
*graphql.RequestContext
*executableSchema
}
func (ec *executionContext) introspectSchema() (*introspection.Schema, error) {
if ec.DisableIntrospection {
return nil, errors.New("introspection disabled")
}
return introspection.WrapSchema(parsedSchema), nil
}
func (ec *executionContext) introspectType(name string) (*introspection.Type, error) {
if ec.DisableIntrospection {
return nil, errors.New("introspection disabled")
}
return introspection.WrapTypeFromDef(parsedSchema, parsedSchema.Types[name]), nil
}
var parsedSchema = gqlparser.MustLoadSchema(
&ast.Source{Name: "schema.graphql", Input: `type Author {
name: String!
}
type Book {
id: ID!
title: String!
price: Float!
author: Author
}
type Query {
books: [Book!]!
}
`},
)
// endregion ************************** generated!.gotpl **************************
// region ***************************** args.gotpl *****************************
func (ec *executionContext) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["name"]; ok {
arg0, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["name"] = arg0
return args, nil
}
func (ec *executionContext) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 bool
if tmp, ok := rawArgs["includeDeprecated"]; ok {
arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
if err != nil {
return nil, err
}
}
args["includeDeprecated"] = arg0
return args, nil
}
func (ec *executionContext) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 bool
if tmp, ok := rawArgs["includeDeprecated"]; ok {
arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
if err != nil {
return nil, err
}
}
args["includeDeprecated"] = arg0
return args, nil
}
// endregion ***************************** args.gotpl *****************************
// region ************************** directives.gotpl **************************
// endregion ************************** directives.gotpl **************************
// region **************************** field.gotpl *****************************
func (ec *executionContext) _Author_name(ctx context.Context, field graphql.CollectedField, obj *Author) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Author",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Book_id(ctx context.Context, field graphql.CollectedField, obj *Book) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Book",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.ID, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNID2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Book_title(ctx context.Context, field graphql.CollectedField, obj *Book) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Book",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Title, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Book_price(ctx context.Context, field graphql.CollectedField, obj *Book) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Book",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Price, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(float64)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNFloat2float64(ctx, field.Selections, res)
}
func (ec *executionContext) _Book_author(ctx context.Context, field graphql.CollectedField, obj *Book) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Book",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Author, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*Author)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOAuthor2ᚖgithubᚗcomᚋgoᚑparkᚑmailᚑruᚋlecturesᚋ4ᚋ3_graphqlᚋgqlgenᚐAuthor(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_books(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().Books(rctx)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Book)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNBook2ᚕᚖgithubᚗcomᚋgoᚑparkᚑmailᚑruᚋlecturesᚋ4ᚋ3_graphqlᚋgqlgenᚐBook(ctx, field.Selections, res)
}
func (ec *executionContext) _Query___type(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query___type_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
rctx.Args = args
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.introspectType(args["name"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.introspectSchema()
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Schema)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Locations, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__DirectiveLocation2ᚕstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Args, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.IsDeprecated(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DeprecationReason(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Args, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Type, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.IsDeprecated(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DeprecationReason(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Type, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DefaultValue, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Types(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.QueryType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.MutationType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.SubscriptionType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Directives(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.Directive)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Kind(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__TypeKind2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field___Type_fields_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
rctx.Args = args
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Fields(args["includeDeprecated"].(bool)), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Field)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Interfaces(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.PossibleTypes(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field___Type_enumValues_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
rctx.Args = args
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.EnumValues(args["includeDeprecated"].(bool)), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.EnumValue)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.InputFields(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.OfType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
// endregion **************************** field.gotpl *****************************
// region **************************** input.gotpl *****************************
// endregion **************************** input.gotpl *****************************
// region ************************** interface.gotpl ***************************
// endregion ************************** interface.gotpl ***************************
// region **************************** object.gotpl ****************************
var authorImplementors = []string{"Author"}
func (ec *executionContext) _Author(ctx context.Context, sel ast.SelectionSet, obj *Author) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, authorImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Author")
case "name":
out.Values[i] = ec._Author_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var bookImplementors = []string{"Book"}
func (ec *executionContext) _Book(ctx context.Context, sel ast.SelectionSet, obj *Book) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, bookImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Book")
case "id":
out.Values[i] = ec._Book_id(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "title":
out.Values[i] = ec._Book_title(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "price":
out.Values[i] = ec._Book_price(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "author":
out.Values[i] = ec._Book_author(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var queryImplementors = []string{"Query"}
func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, queryImplementors)
ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{
Object: "Query",
})
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Query")
case "books":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_books(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "__type":
out.Values[i] = ec._Query___type(ctx, field)
case "__schema":
out.Values[i] = ec._Query___schema(ctx, field)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __DirectiveImplementors = []string{"__Directive"}
func (ec *executionContext) ___Directive(ctx context.Context, sel ast.SelectionSet, obj *introspection.Directive) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, __DirectiveImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Directive")
case "name":
out.Values[i] = ec.___Directive_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___Directive_description(ctx, field, obj)
case "locations":
out.Values[i] = ec.___Directive_locations(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "args":
out.Values[i] = ec.___Directive_args(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __EnumValueImplementors = []string{"__EnumValue"}
func (ec *executionContext) ___EnumValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.EnumValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, __EnumValueImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__EnumValue")
case "name":
out.Values[i] = ec.___EnumValue_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___EnumValue_description(ctx, field, obj)
case "isDeprecated":
out.Values[i] = ec.___EnumValue_isDeprecated(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "deprecationReason":
out.Values[i] = ec.___EnumValue_deprecationReason(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __FieldImplementors = []string{"__Field"}
func (ec *executionContext) ___Field(ctx context.Context, sel ast.SelectionSet, obj *introspection.Field) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, __FieldImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Field")
case "name":
out.Values[i] = ec.___Field_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___Field_description(ctx, field, obj)
case "args":
out.Values[i] = ec.___Field_args(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "type":
out.Values[i] = ec.___Field_type(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "isDeprecated":
out.Values[i] = ec.___Field_isDeprecated(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "deprecationReason":
out.Values[i] = ec.___Field_deprecationReason(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __InputValueImplementors = []string{"__InputValue"}
func (ec *executionContext) ___InputValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.InputValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, __InputValueImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__InputValue")
case "name":
out.Values[i] = ec.___InputValue_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___InputValue_description(ctx, field, obj)
case "type":
out.Values[i] = ec.___InputValue_type(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "defaultValue":
out.Values[i] = ec.___InputValue_defaultValue(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __SchemaImplementors = []string{"__Schema"}
func (ec *executionContext) ___Schema(ctx context.Context, sel ast.SelectionSet, obj *introspection.Schema) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, __SchemaImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Schema")
case "types":
out.Values[i] = ec.___Schema_types(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "queryType":
out.Values[i] = ec.___Schema_queryType(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "mutationType":
out.Values[i] = ec.___Schema_mutationType(ctx, field, obj)
case "subscriptionType":
out.Values[i] = ec.___Schema_subscriptionType(ctx, field, obj)
case "directives":
out.Values[i] = ec.___Schema_directives(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __TypeImplementors = []string{"__Type"}
func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, obj *introspection.Type) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, __TypeImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Type")
case "kind":
out.Values[i] = ec.___Type_kind(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "name":
out.Values[i] = ec.___Type_name(ctx, field, obj)
case "description":
out.Values[i] = ec.___Type_description(ctx, field, obj)
case "fields":
out.Values[i] = ec.___Type_fields(ctx, field, obj)
case "interfaces":
out.Values[i] = ec.___Type_interfaces(ctx, field, obj)
case "possibleTypes":
out.Values[i] = ec.___Type_possibleTypes(ctx, field, obj)
case "enumValues":
out.Values[i] = ec.___Type_enumValues(ctx, field, obj)
case "inputFields":
out.Values[i] = ec.___Type_inputFields(ctx, field, obj)
case "ofType":
out.Values[i] = ec.___Type_ofType(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
// endregion **************************** object.gotpl ****************************
// region ***************************** type.gotpl *****************************
func (ec *executionContext) marshalNBook2githubᚗcomᚋgoᚑparkᚑmailᚑruᚋlecturesᚋ4ᚋ3_graphqlᚋgqlgenᚐBook(ctx context.Context, sel ast.SelectionSet, v Book) graphql.Marshaler {
return ec._Book(ctx, sel, &v)
}
func (ec *executionContext) marshalNBook2ᚕᚖgithubᚗcomᚋgoᚑparkᚑmailᚑruᚋlecturesᚋ4ᚋ3_graphqlᚋgqlgenᚐBook(ctx context.Context, sel ast.SelectionSet, v []*Book) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalNBook2ᚖgithubᚗcomᚋgoᚑparkᚑmailᚑruᚋlecturesᚋ4ᚋ3_graphqlᚋgqlgenᚐBook(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalNBook2ᚖgithubᚗcomᚋgoᚑparkᚑmailᚑruᚋlecturesᚋ4ᚋ3_graphqlᚋgqlgenᚐBook(ctx context.Context, sel ast.SelectionSet, v *Book) graphql.Marshaler {
if v == nil {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec._Book(ctx, sel, v)
}
func (ec *executionContext) unmarshalNBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
return graphql.UnmarshalBoolean(v)
}
func (ec *executionContext) marshalNBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
res := graphql.MarshalBoolean(v)
if res == graphql.Null {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNFloat2float64(ctx context.Context, v interface{}) (float64, error) {
return graphql.UnmarshalFloat(v)
}
func (ec *executionContext) marshalNFloat2float64(ctx context.Context, sel ast.SelectionSet, v float64) graphql.Marshaler {
res := graphql.MarshalFloat(v)
if res == graphql.Null {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNID2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalID(v)
}
func (ec *executionContext) marshalNID2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalID(v)
if res == graphql.Null {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNString2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalNString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx context.Context, sel ast.SelectionSet, v introspection.Directive) graphql.Marshaler {
return ec.___Directive(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx context.Context, sel ast.SelectionSet, v []introspection.Directive) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) unmarshalN__DirectiveLocation2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalN__DirectiveLocation2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalN__DirectiveLocation2ᚕstring(ctx context.Context, v interface{}) ([]string, error) {
var vSlice []interface{}
if v != nil {
if tmp1, ok := v.([]interface{}); ok {
vSlice = tmp1
} else {
vSlice = []interface{}{v}
}
}
var err error
res := make([]string, len(vSlice))
for i := range vSlice {
res[i], err = ec.unmarshalN__DirectiveLocation2string(ctx, vSlice[i])
if err != nil {
return nil, err
}
}
return res, nil
}
func (ec *executionContext) marshalN__DirectiveLocation2ᚕstring(ctx context.Context, sel ast.SelectionSet, v []string) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__DirectiveLocation2string(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx context.Context, sel ast.SelectionSet, v introspection.EnumValue) graphql.Marshaler {
return ec.___EnumValue(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx context.Context, sel ast.SelectionSet, v introspection.Field) graphql.Marshaler {
return ec.___Field(ctx, sel, &v)
}
func (ec *executionContext) marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx context.Context, sel ast.SelectionSet, v introspection.InputValue) graphql.Marshaler {
return ec.___InputValue(ctx, sel, &v)
}
func (ec *executionContext) marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
return ec.___Type(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
if v == nil {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec.___Type(ctx, sel, v)
}
func (ec *executionContext) unmarshalN__TypeKind2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalN__TypeKind2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) marshalOAuthor2githubᚗcomᚋgoᚑparkᚑmailᚑruᚋlecturesᚋ4ᚋ3_graphqlᚋgqlgenᚐAuthor(ctx context.Context, sel ast.SelectionSet, v Author) graphql.Marshaler {
return ec._Author(ctx, sel, &v)
}
func (ec *executionContext) marshalOAuthor2ᚖgithubᚗcomᚋgoᚑparkᚑmailᚑruᚋlecturesᚋ4ᚋ3_graphqlᚋgqlgenᚐAuthor(ctx context.Context, sel ast.SelectionSet, v *Author) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec._Author(ctx, sel, v)
}
func (ec *executionContext) unmarshalOBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
return graphql.UnmarshalBoolean(v)
}
func (ec *executionContext) marshalOBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
return graphql.MarshalBoolean(v)
}
func (ec *executionContext) unmarshalOBoolean2ᚖbool(ctx context.Context, v interface{}) (*bool, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalOBoolean2bool(ctx, v)
return &res, err
}
func (ec *executionContext) marshalOBoolean2ᚖbool(ctx context.Context, sel ast.SelectionSet, v *bool) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.marshalOBoolean2bool(ctx, sel, *v)
}
func (ec *executionContext) unmarshalOString2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalOString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
return graphql.MarshalString(v)
}
func (ec *executionContext) unmarshalOString2ᚖstring(ctx context.Context, v interface{}) (*string, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalOString2string(ctx, v)
return &res, err
}
func (ec *executionContext) marshalOString2ᚖstring(ctx context.Context, sel ast.SelectionSet, v *string) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.marshalOString2string(ctx, sel, *v)
}
func (ec *executionContext) marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx context.Context, sel ast.SelectionSet, v []introspection.EnumValue) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx context.Context, sel ast.SelectionSet, v []introspection.Field) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Schema2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v introspection.Schema) graphql.Marshaler {
return ec.___Schema(ctx, sel, &v)
}
func (ec *executionContext) marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v *introspection.Schema) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.___Schema(ctx, sel, v)
}
func (ec *executionContext) marshalO__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
return ec.___Type(ctx, sel, &v)
}
func (ec *executionContext) marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.___Type(ctx, sel, v)
}
// endregion ***************************** type.gotpl *****************************
================================================
FILE: 4-api/3_graphql/gqlgen/gqlgen.yml
================================================
# .gqlgen.yml example
#
# Refer to https://gqlgen.com/config/
# for detailed .gqlgen.yml documentation.
schema:
- schema.graphql
exec:
filename: generated.go
model:
filename: models_gen.go
resolver:
filename: resolver.go
type: Resolver
autobind: []
================================================
FILE: 4-api/3_graphql/gqlgen/models_gen.go
================================================
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
package gqlgen
type Author struct {
Name string `json:"name"`
}
type Book struct {
ID string `json:"id"`
Title string `json:"title"`
Price float64 `json:"price"`
Author *Author `json:"author"`
}
================================================
FILE: 4-api/3_graphql/gqlgen/resolver.go
================================================
package gqlgen
import (
"context"
) // THIS CODE IS A STARTING POINT ONLY. IT WILL NOT BE UPDATED WITH SCHEMA CHANGES.
type Resolver struct{}
func (r *Resolver) Query() QueryResolver {
return &queryResolver{r}
}
type queryResolver struct{ *Resolver }
func (r *queryResolver) Books(ctx context.Context) ([]*Book, error) {
return []*Book{
{
ID: "1",
Title: "The Moon is a harsh mistress",
Price: 200,
Author: &Author{Name: "John"},
},
}, nil
}
================================================
FILE: 4-api/3_graphql/gqlgen/schema.graphql
================================================
type Author {
name: String!
}
type Book {
id: ID!
title: String!
price: Float!
author: Author
}
type Query {
books: [Book!]!
}
================================================
FILE: 4-api/3_graphql/gqlgen/server/server.go
================================================
package main
import (
"log"
"net/http"
"os"
gql "github.com/go-park-mail-ru/lectures/4-api/3_graphql/gqlgen"
"github.com/99designs/gqlgen/handler"
)
const defaultPort = "8080"
func main() {
port := os.Getenv("PORT")
if port == "" {
port = defaultPort
}
http.Handle("/", handler.Playground("GraphQL playground", "/query"))
http.Handle("/query", handler.GraphQL(gql.NewExecutableSchema(gql.Config{Resolvers: &gql.Resolver{}})))
log.Printf("connect to http://localhost:%s/ for GraphQL playground", port)
log.Fatal(http.ListenAndServe(":"+port, nil))
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen1/generated.go
================================================
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
package gqlgen1
import (
"bytes"
"context"
"errors"
"strconv"
"sync"
"sync/atomic"
"github.com/99designs/gqlgen/graphql"
"github.com/99designs/gqlgen/graphql/introspection"
gqlparser "github.com/vektah/gqlparser/v2"
"github.com/vektah/gqlparser/v2/ast"
)
// region ************************** generated!.gotpl **************************
// NewExecutableSchema creates an ExecutableSchema from the ResolverRoot interface.
func NewExecutableSchema(cfg Config) graphql.ExecutableSchema {
return &executableSchema{
resolvers: cfg.Resolvers,
directives: cfg.Directives,
complexity: cfg.Complexity,
}
}
type Config struct {
Resolvers ResolverRoot
Directives DirectiveRoot
Complexity ComplexityRoot
}
type ResolverRoot interface {
Mutation() MutationResolver
Query() QueryResolver
}
type DirectiveRoot struct {
}
type ComplexityRoot struct {
Mutation struct {
RatePhoto func(childComplexity int, photoID string, direction string) int
}
Photo struct {
Comment func(childComplexity int) int
Followed func(childComplexity int) int
ID func(childComplexity int) int
Liked func(childComplexity int) int
Rating func(childComplexity int) int
URL func(childComplexity int) int
User func(childComplexity int) int
}
Query struct {
Photos func(childComplexity int, userID string) int
Timeline func(childComplexity int) int
User func(childComplexity int, userID string) int
}
User struct {
Avatar func(childComplexity int) int
ID func(childComplexity int) int
Name func(childComplexity int) int
}
}
type MutationResolver interface {
RatePhoto(ctx context.Context, photoID string, direction string) (*Photo, error)
}
type QueryResolver interface {
Timeline(ctx context.Context) ([]*Photo, error)
User(ctx context.Context, userID string) (*User, error)
Photos(ctx context.Context, userID string) ([]*Photo, error)
}
type executableSchema struct {
resolvers ResolverRoot
directives DirectiveRoot
complexity ComplexityRoot
}
func (e *executableSchema) Schema() *ast.Schema {
return parsedSchema
}
func (e *executableSchema) Complexity(typeName, field string, childComplexity int, rawArgs map[string]interface{}) (int, bool) {
ec := executionContext{nil, e}
_ = ec
switch typeName + "." + field {
case "Mutation.ratePhoto":
if e.complexity.Mutation.RatePhoto == nil {
break
}
args, err := ec.field_Mutation_ratePhoto_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Mutation.RatePhoto(childComplexity, args["photoID"].(string), args["direction"].(string)), true
case "Photo.comment":
if e.complexity.Photo.Comment == nil {
break
}
return e.complexity.Photo.Comment(childComplexity), true
case "Photo.followed":
if e.complexity.Photo.Followed == nil {
break
}
return e.complexity.Photo.Followed(childComplexity), true
case "Photo.id":
if e.complexity.Photo.ID == nil {
break
}
return e.complexity.Photo.ID(childComplexity), true
case "Photo.liked":
if e.complexity.Photo.Liked == nil {
break
}
return e.complexity.Photo.Liked(childComplexity), true
case "Photo.rating":
if e.complexity.Photo.Rating == nil {
break
}
return e.complexity.Photo.Rating(childComplexity), true
case "Photo.url":
if e.complexity.Photo.URL == nil {
break
}
return e.complexity.Photo.URL(childComplexity), true
case "Photo.user":
if e.complexity.Photo.User == nil {
break
}
return e.complexity.Photo.User(childComplexity), true
case "Query.photos":
if e.complexity.Query.Photos == nil {
break
}
args, err := ec.field_Query_photos_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Query.Photos(childComplexity, args["userID"].(string)), true
case "Query.timeline":
if e.complexity.Query.Timeline == nil {
break
}
return e.complexity.Query.Timeline(childComplexity), true
case "Query.user":
if e.complexity.Query.User == nil {
break
}
args, err := ec.field_Query_user_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Query.User(childComplexity, args["userID"].(string)), true
case "User.avatar":
if e.complexity.User.Avatar == nil {
break
}
return e.complexity.User.Avatar(childComplexity), true
case "User.id":
if e.complexity.User.ID == nil {
break
}
return e.complexity.User.ID(childComplexity), true
case "User.name":
if e.complexity.User.Name == nil {
break
}
return e.complexity.User.Name(childComplexity), true
}
return 0, false
}
func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler {
rc := graphql.GetOperationContext(ctx)
ec := executionContext{rc, e}
first := true
switch rc.Operation.Operation {
case ast.Query:
return func(ctx context.Context) *graphql.Response {
if !first {
return nil
}
first = false
data := ec._Query(ctx, rc.Operation.SelectionSet)
var buf bytes.Buffer
data.MarshalGQL(&buf)
return &graphql.Response{
Data: buf.Bytes(),
}
}
case ast.Mutation:
return func(ctx context.Context) *graphql.Response {
if !first {
return nil
}
first = false
data := ec._Mutation(ctx, rc.Operation.SelectionSet)
var buf bytes.Buffer
data.MarshalGQL(&buf)
return &graphql.Response{
Data: buf.Bytes(),
}
}
default:
return graphql.OneShot(graphql.ErrorResponse(ctx, "unsupported GraphQL operation"))
}
}
type executionContext struct {
*graphql.OperationContext
*executableSchema
}
func (ec *executionContext) introspectSchema() (*introspection.Schema, error) {
if ec.DisableIntrospection {
return nil, errors.New("introspection disabled")
}
return introspection.WrapSchema(parsedSchema), nil
}
func (ec *executionContext) introspectType(name string) (*introspection.Type, error) {
if ec.DisableIntrospection {
return nil, errors.New("introspection disabled")
}
return introspection.WrapTypeFromDef(parsedSchema, parsedSchema.Types[name]), nil
}
var sources = []*ast.Source{
&ast.Source{Name: "schema.graphql", Input: `type User {
id: ID!
name: String!
avatar: String!
}
type Photo {
id: ID!
user: User!
url: String!
comment: String!
rating: Int!
liked: Boolean!
followed: Boolean!
}
type Query {
# query{timeline{id,url,user{id,name}}}
timeline: [Photo!]!
# query{user(userID:"1"){id,avatar,name}}
user(userID: ID!): User!
# query{photos(userID:"1"){id,url,user{id,name}}}
photos(userID: ID!): [Photo!]!
}
type Mutation {
# mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
ratePhoto(photoID: ID!, direction: String!): Photo!
}
# go run github.com/99designs/gqlgen init
# go run github.com/99designs/gqlgen -v
# rm -rf generated.go models_generated gqlgen.yml models_gen.go resolver.go server.go`, BuiltIn: false},
}
var parsedSchema = gqlparser.MustLoadSchema(sources...)
// endregion ************************** generated!.gotpl **************************
// region ***************************** args.gotpl *****************************
func (ec *executionContext) field_Mutation_ratePhoto_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["photoID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["photoID"] = arg0
var arg1 string
if tmp, ok := rawArgs["direction"]; ok {
arg1, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["direction"] = arg1
return args, nil
}
func (ec *executionContext) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["name"]; ok {
arg0, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["name"] = arg0
return args, nil
}
func (ec *executionContext) field_Query_photos_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["userID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["userID"] = arg0
return args, nil
}
func (ec *executionContext) field_Query_user_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["userID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["userID"] = arg0
return args, nil
}
func (ec *executionContext) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 bool
if tmp, ok := rawArgs["includeDeprecated"]; ok {
arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
if err != nil {
return nil, err
}
}
args["includeDeprecated"] = arg0
return args, nil
}
func (ec *executionContext) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 bool
if tmp, ok := rawArgs["includeDeprecated"]; ok {
arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
if err != nil {
return nil, err
}
}
args["includeDeprecated"] = arg0
return args, nil
}
// endregion ***************************** args.gotpl *****************************
// region ************************** directives.gotpl **************************
// endregion ************************** directives.gotpl **************************
// region **************************** field.gotpl *****************************
func (ec *executionContext) _Mutation_ratePhoto(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Mutation",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Mutation_ratePhoto_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Mutation().RatePhoto(rctx, args["photoID"].(string), args["direction"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚖgqlgen1ᚐPhoto(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_id(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.ID, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNID2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_user(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.User, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*User)
fc.Result = res
return ec.marshalNUser2ᚖgqlgen1ᚐUser(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_url(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.URL, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_comment(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Comment, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_rating(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Rating, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(int)
fc.Result = res
return ec.marshalNInt2int(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_liked(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Liked, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_followed(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Followed, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_timeline(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().Timeline(rctx)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚕᚖgqlgen1ᚐPhotoᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_user(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query_user_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().User(rctx, args["userID"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*User)
fc.Result = res
return ec.marshalNUser2ᚖgqlgen1ᚐUser(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_photos(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query_photos_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().Photos(rctx, args["userID"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚕᚖgqlgen1ᚐPhotoᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) _Query___type(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query___type_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.introspectType(args["name"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.introspectSchema()
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Schema)
fc.Result = res
return ec.marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx, field.Selections, res)
}
func (ec *executionContext) _User_id(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.ID, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNID2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_name(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_avatar(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Avatar, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Locations, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]string)
fc.Result = res
return ec.marshalN__DirectiveLocation2ᚕstringᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Args, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
fc.Result = res
return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.IsDeprecated(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DeprecationReason(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Args, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
fc.Result = res
return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Type, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.IsDeprecated(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DeprecationReason(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Type, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DefaultValue, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Types(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.QueryType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.MutationType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.SubscriptionType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Directives(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.Directive)
fc.Result = res
return ec.marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Kind(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalN__TypeKind2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field___Type_fields_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Fields(args["includeDeprecated"].(bool)), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Field)
fc.Result = res
return ec.marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Interfaces(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.PossibleTypes(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field___Type_enumValues_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.EnumValues(args["includeDeprecated"].(bool)), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.EnumValue)
fc.Result = res
return ec.marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.InputFields(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
fc.Result = res
return ec.marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.OfType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
// endregion **************************** field.gotpl *****************************
// region **************************** input.gotpl *****************************
// endregion **************************** input.gotpl *****************************
// region ************************** interface.gotpl ***************************
// endregion ************************** interface.gotpl ***************************
// region **************************** object.gotpl ****************************
var mutationImplementors = []string{"Mutation"}
func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, mutationImplementors)
ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{
Object: "Mutation",
})
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Mutation")
case "ratePhoto":
out.Values[i] = ec._Mutation_ratePhoto(ctx, field)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var photoImplementors = []string{"Photo"}
func (ec *executionContext) _Photo(ctx context.Context, sel ast.SelectionSet, obj *Photo) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, photoImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Photo")
case "id":
out.Values[i] = ec._Photo_id(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "user":
out.Values[i] = ec._Photo_user(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "url":
out.Values[i] = ec._Photo_url(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "comment":
out.Values[i] = ec._Photo_comment(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "rating":
out.Values[i] = ec._Photo_rating(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "liked":
out.Values[i] = ec._Photo_liked(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "followed":
out.Values[i] = ec._Photo_followed(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var queryImplementors = []string{"Query"}
func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, queryImplementors)
ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{
Object: "Query",
})
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Query")
case "timeline":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_timeline(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "user":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_user(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "photos":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_photos(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "__type":
out.Values[i] = ec._Query___type(ctx, field)
case "__schema":
out.Values[i] = ec._Query___schema(ctx, field)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var userImplementors = []string{"User"}
func (ec *executionContext) _User(ctx context.Context, sel ast.SelectionSet, obj *User) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, userImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("User")
case "id":
out.Values[i] = ec._User_id(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "name":
out.Values[i] = ec._User_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "avatar":
out.Values[i] = ec._User_avatar(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __DirectiveImplementors = []string{"__Directive"}
func (ec *executionContext) ___Directive(ctx context.Context, sel ast.SelectionSet, obj *introspection.Directive) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __DirectiveImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Directive")
case "name":
out.Values[i] = ec.___Directive_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___Directive_description(ctx, field, obj)
case "locations":
out.Values[i] = ec.___Directive_locations(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "args":
out.Values[i] = ec.___Directive_args(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __EnumValueImplementors = []string{"__EnumValue"}
func (ec *executionContext) ___EnumValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.EnumValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __EnumValueImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__EnumValue")
case "name":
out.Values[i] = ec.___EnumValue_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___EnumValue_description(ctx, field, obj)
case "isDeprecated":
out.Values[i] = ec.___EnumValue_isDeprecated(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "deprecationReason":
out.Values[i] = ec.___EnumValue_deprecationReason(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __FieldImplementors = []string{"__Field"}
func (ec *executionContext) ___Field(ctx context.Context, sel ast.SelectionSet, obj *introspection.Field) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __FieldImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Field")
case "name":
out.Values[i] = ec.___Field_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___Field_description(ctx, field, obj)
case "args":
out.Values[i] = ec.___Field_args(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "type":
out.Values[i] = ec.___Field_type(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "isDeprecated":
out.Values[i] = ec.___Field_isDeprecated(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "deprecationReason":
out.Values[i] = ec.___Field_deprecationReason(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __InputValueImplementors = []string{"__InputValue"}
func (ec *executionContext) ___InputValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.InputValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __InputValueImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__InputValue")
case "name":
out.Values[i] = ec.___InputValue_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___InputValue_description(ctx, field, obj)
case "type":
out.Values[i] = ec.___InputValue_type(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "defaultValue":
out.Values[i] = ec.___InputValue_defaultValue(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __SchemaImplementors = []string{"__Schema"}
func (ec *executionContext) ___Schema(ctx context.Context, sel ast.SelectionSet, obj *introspection.Schema) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __SchemaImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Schema")
case "types":
out.Values[i] = ec.___Schema_types(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "queryType":
out.Values[i] = ec.___Schema_queryType(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "mutationType":
out.Values[i] = ec.___Schema_mutationType(ctx, field, obj)
case "subscriptionType":
out.Values[i] = ec.___Schema_subscriptionType(ctx, field, obj)
case "directives":
out.Values[i] = ec.___Schema_directives(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __TypeImplementors = []string{"__Type"}
func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, obj *introspection.Type) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __TypeImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Type")
case "kind":
out.Values[i] = ec.___Type_kind(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "name":
out.Values[i] = ec.___Type_name(ctx, field, obj)
case "description":
out.Values[i] = ec.___Type_description(ctx, field, obj)
case "fields":
out.Values[i] = ec.___Type_fields(ctx, field, obj)
case "interfaces":
out.Values[i] = ec.___Type_interfaces(ctx, field, obj)
case "possibleTypes":
out.Values[i] = ec.___Type_possibleTypes(ctx, field, obj)
case "enumValues":
out.Values[i] = ec.___Type_enumValues(ctx, field, obj)
case "inputFields":
out.Values[i] = ec.___Type_inputFields(ctx, field, obj)
case "ofType":
out.Values[i] = ec.___Type_ofType(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
// endregion **************************** object.gotpl ****************************
// region ***************************** type.gotpl *****************************
func (ec *executionContext) unmarshalNBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
return graphql.UnmarshalBoolean(v)
}
func (ec *executionContext) marshalNBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
res := graphql.MarshalBoolean(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNID2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalID(v)
}
func (ec *executionContext) marshalNID2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalID(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNInt2int(ctx context.Context, v interface{}) (int, error) {
return graphql.UnmarshalInt(v)
}
func (ec *executionContext) marshalNInt2int(ctx context.Context, sel ast.SelectionSet, v int) graphql.Marshaler {
res := graphql.MarshalInt(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) marshalNPhoto2gqlgen1ᚐPhoto(ctx context.Context, sel ast.SelectionSet, v Photo) graphql.Marshaler {
return ec._Photo(ctx, sel, &v)
}
func (ec *executionContext) marshalNPhoto2ᚕᚖgqlgen1ᚐPhotoᚄ(ctx context.Context, sel ast.SelectionSet, v []*Photo) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalNPhoto2ᚖgqlgen1ᚐPhoto(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalNPhoto2ᚖgqlgen1ᚐPhoto(ctx context.Context, sel ast.SelectionSet, v *Photo) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec._Photo(ctx, sel, v)
}
func (ec *executionContext) unmarshalNString2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalNString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) marshalNUser2gqlgen1ᚐUser(ctx context.Context, sel ast.SelectionSet, v User) graphql.Marshaler {
return ec._User(ctx, sel, &v)
}
func (ec *executionContext) marshalNUser2ᚖgqlgen1ᚐUser(ctx context.Context, sel ast.SelectionSet, v *User) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec._User(ctx, sel, v)
}
func (ec *executionContext) marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx context.Context, sel ast.SelectionSet, v introspection.Directive) graphql.Marshaler {
return ec.___Directive(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Directive) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) unmarshalN__DirectiveLocation2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalN__DirectiveLocation2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalN__DirectiveLocation2ᚕstringᚄ(ctx context.Context, v interface{}) ([]string, error) {
var vSlice []interface{}
if v != nil {
if tmp1, ok := v.([]interface{}); ok {
vSlice = tmp1
} else {
vSlice = []interface{}{v}
}
}
var err error
res := make([]string, len(vSlice))
for i := range vSlice {
res[i], err = ec.unmarshalN__DirectiveLocation2string(ctx, vSlice[i])
if err != nil {
return nil, err
}
}
return res, nil
}
func (ec *executionContext) marshalN__DirectiveLocation2ᚕstringᚄ(ctx context.Context, sel ast.SelectionSet, v []string) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__DirectiveLocation2string(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx context.Context, sel ast.SelectionSet, v introspection.EnumValue) graphql.Marshaler {
return ec.___EnumValue(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx context.Context, sel ast.SelectionSet, v introspection.Field) graphql.Marshaler {
return ec.___Field(ctx, sel, &v)
}
func (ec *executionContext) marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx context.Context, sel ast.SelectionSet, v introspection.InputValue) graphql.Marshaler {
return ec.___InputValue(ctx, sel, &v)
}
func (ec *executionContext) marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
return ec.___Type(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec.___Type(ctx, sel, v)
}
func (ec *executionContext) unmarshalN__TypeKind2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalN__TypeKind2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalOBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
return graphql.UnmarshalBoolean(v)
}
func (ec *executionContext) marshalOBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
return graphql.MarshalBoolean(v)
}
func (ec *executionContext) unmarshalOBoolean2ᚖbool(ctx context.Context, v interface{}) (*bool, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalOBoolean2bool(ctx, v)
return &res, err
}
func (ec *executionContext) marshalOBoolean2ᚖbool(ctx context.Context, sel ast.SelectionSet, v *bool) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.marshalOBoolean2bool(ctx, sel, *v)
}
func (ec *executionContext) unmarshalOString2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalOString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
return graphql.MarshalString(v)
}
func (ec *executionContext) unmarshalOString2ᚖstring(ctx context.Context, v interface{}) (*string, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalOString2string(ctx, v)
return &res, err
}
func (ec *executionContext) marshalOString2ᚖstring(ctx context.Context, sel ast.SelectionSet, v *string) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.marshalOString2string(ctx, sel, *v)
}
func (ec *executionContext) marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.EnumValue) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Field) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Schema2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v introspection.Schema) graphql.Marshaler {
return ec.___Schema(ctx, sel, &v)
}
func (ec *executionContext) marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v *introspection.Schema) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.___Schema(ctx, sel, v)
}
func (ec *executionContext) marshalO__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
return ec.___Type(ctx, sel, &v)
}
func (ec *executionContext) marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.___Type(ctx, sel, v)
}
// endregion ***************************** type.gotpl *****************************
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen1/go.mod
================================================
module gqlgen1
go 1.13
require (
github.com/99designs/gqlgen v0.11.1
github.com/vektah/gqlparser v1.3.1
github.com/vektah/gqlparser/v2 v2.0.1
)
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen1/go.sum
================================================
github.com/99designs/gqlgen v0.11.1 h1:QoSL8/AAJ2T3UOeQbdnBR32JcG4pO08+P/g5jdbFkUg=
github.com/99designs/gqlgen v0.11.1/go.mod h1:vjFOyBZ7NwDl+GdSD4PFn7BQn5Fy7ohJwXn7Vk8zz+c=
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
github.com/agnivade/levenshtein v1.0.3 h1:M5ZnqLOoZR8ygVq0FfkXsNOKzMCk0xRiow0R5+5VkQ0=
github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgryski/trifles v0.0.0-20190318185328-a8d75aae118c/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
github.com/go-chi/chi v3.3.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/mux v1.6.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/websocket v1.2.0 h1:VJtLvh6VQym50czpZzx07z/kw9EgAxI3x1ZB8taTMQQ=
github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
github.com/matryer/moq v0.0.0-20200106131100-75d0ddfc0007/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047 h1:zCoDWFD5nrJJVjbXiDZcVhOBSzKn3o9LgRLLMRNuru8=
github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
github.com/shurcooL/vfsgen v0.0.0-20180121065927-ffb13db8def0/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/vektah/dataloaden v0.2.1-0.20190515034641-a19b9a6e7c9e/go.mod h1:/HUdMve7rvxZma+2ZELQeNh88+003LL7Pf/CZ089j8U=
github.com/vektah/gqlparser v1.3.1 h1:8b0IcD3qZKWJQHSzynbDlrtP3IxVydZ2DZepCGofqfU=
github.com/vektah/gqlparser v1.3.1/go.mod h1:bkVf0FX+Stjg/MHnm8mEyubuaArhNEqfQhF+OTiAL74=
github.com/vektah/gqlparser/v2 v2.0.1 h1:xgl5abVnsd4hkN9rk65OJID9bfcLSMuTaTcZj777q1o=
github.com/vektah/gqlparser/v2 v2.0.1/go.mod h1:SyUiHgLATUR8BiYURfTirrTcGpcE+4XkV2se04Px1Ms=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190515012406-7d7faa4812bd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589 h1:rjUrONFu4kLchcZTfp3/96bR8bW8dIa8uz3cR5n0cgM=
golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
sourcegraph.com/sourcegraph/appdash v0.0.0-20180110180208-2cc67fd64755/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k=
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen1/gqlgen.yml
================================================
# .gqlgen.yml example
#
# Refer to https://gqlgen.com/config/
# for detailed .gqlgen.yml documentation.
schema:
- schema.graphql
exec:
filename: generated.go
model:
filename: models_gen.go
resolver:
filename: resolver.go
type: Resolver
autobind: []
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen1/models_gen.go
================================================
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
package gqlgen1
type Photo struct {
ID string `json:"id"`
User *User `json:"user"`
URL string `json:"url"`
Comment string `json:"comment"`
Rating int `json:"rating"`
Liked bool `json:"liked"`
Followed bool `json:"followed"`
}
type User struct {
ID string `json:"id"`
Name string `json:"name"`
Avatar string `json:"avatar"`
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen1/resolver.go
================================================
package gqlgen1
import (
"context"
) // THIS CODE IS A STARTING POINT ONLY. IT WILL NOT BE UPDATED WITH SCHEMA CHANGES.
type Resolver struct{}
func (r *Resolver) Mutation() MutationResolver {
return &mutationResolver{r}
}
func (r *Resolver) Query() QueryResolver {
return &queryResolver{r}
}
type mutationResolver struct{ *Resolver }
func (r *mutationResolver) RatePhoto(ctx context.Context, photoID string, direction string) (*Photo, error) {
panic("not implemented")
}
type queryResolver struct{ *Resolver }
func (r *queryResolver) Timeline(ctx context.Context) ([]*Photo, error) {
panic("not implemented")
}
func (r *queryResolver) User(ctx context.Context, userID string) (*User, error) {
panic("not implemented")
}
func (r *queryResolver) Photos(ctx context.Context, userID string) ([]*Photo, error) {
panic("not implemented")
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen1/schema.graphql
================================================
type User {
id: ID!
name: String!
avatar: String!
}
type Photo {
id: ID!
user: User!
url: String!
comment: String!
rating: Int!
liked: Boolean!
followed: Boolean!
}
type Query {
# query{timeline{id,url,user{id,name}}}
timeline: [Photo!]!
# query{user(userID:"1"){id,avatar,name}}
user(userID: ID!): User!
# query{photos(userID:"1"){id,url,user{id,name}}}
photos(userID: ID!): [Photo!]!
}
type Mutation {
# mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
ratePhoto(photoID: ID!, direction: String!): Photo!
}
# go run github.com/99designs/gqlgen init
# go run github.com/99designs/gqlgen -v
# rm -rf generated.go models_generated gqlgen.yml models_gen.go resolver.go server.go
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen1/server/server.go
================================================
package main
import (
gqlgen "gqlgen1"
"log"
"net/http"
"os"
"github.com/99designs/gqlgen/handler"
)
const defaultPort = "8080"
func main() {
port := os.Getenv("PORT")
if port == "" {
port = defaultPort
}
http.Handle("/", handler.Playground("GraphQL playground", "/query"))
http.Handle("/query", handler.GraphQL(gqlgen.NewExecutableSchema(gqlgen.Config{Resolvers: &gqlgen.Resolver{}})))
log.Printf("connect to http://localhost:%s/ for GraphQL playground", port)
log.Fatal(http.ListenAndServe(":"+port, nil))
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen2/generated.go
================================================
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
package gqlgen2
import (
"bytes"
"context"
"errors"
"strconv"
"sync"
"sync/atomic"
"github.com/99designs/gqlgen/graphql"
"github.com/99designs/gqlgen/graphql/introspection"
gqlparser "github.com/vektah/gqlparser/v2"
"github.com/vektah/gqlparser/v2/ast"
)
// region ************************** generated!.gotpl **************************
// NewExecutableSchema creates an ExecutableSchema from the ResolverRoot interface.
func NewExecutableSchema(cfg Config) graphql.ExecutableSchema {
return &executableSchema{
resolvers: cfg.Resolvers,
directives: cfg.Directives,
complexity: cfg.Complexity,
}
}
type Config struct {
Resolvers ResolverRoot
Directives DirectiveRoot
Complexity ComplexityRoot
}
type ResolverRoot interface {
Mutation() MutationResolver
Photo() PhotoResolver
Query() QueryResolver
}
type DirectiveRoot struct {
}
type ComplexityRoot struct {
Mutation struct {
RatePhoto func(childComplexity int, photoID string, direction string) int
}
Photo struct {
Comment func(childComplexity int) int
Followed func(childComplexity int) int
ID func(childComplexity int) int
Liked func(childComplexity int) int
Rating func(childComplexity int) int
URL func(childComplexity int) int
User func(childComplexity int) int
}
Query struct {
Photos func(childComplexity int, userID string) int
Timeline func(childComplexity int) int
User func(childComplexity int, userID string) int
}
User struct {
Avatar func(childComplexity int) int
ID func(childComplexity int) int
Name func(childComplexity int) int
}
}
type MutationResolver interface {
RatePhoto(ctx context.Context, photoID string, direction string) (*Photo, error)
}
type PhotoResolver interface {
ID(ctx context.Context, obj *Photo) (string, error)
User(ctx context.Context, obj *Photo) (*User, error)
}
type QueryResolver interface {
Timeline(ctx context.Context) ([]*Photo, error)
User(ctx context.Context, userID string) (*User, error)
Photos(ctx context.Context, userID string) ([]*Photo, error)
}
type executableSchema struct {
resolvers ResolverRoot
directives DirectiveRoot
complexity ComplexityRoot
}
func (e *executableSchema) Schema() *ast.Schema {
return parsedSchema
}
func (e *executableSchema) Complexity(typeName, field string, childComplexity int, rawArgs map[string]interface{}) (int, bool) {
ec := executionContext{nil, e}
_ = ec
switch typeName + "." + field {
case "Mutation.ratePhoto":
if e.complexity.Mutation.RatePhoto == nil {
break
}
args, err := ec.field_Mutation_ratePhoto_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Mutation.RatePhoto(childComplexity, args["photoID"].(string), args["direction"].(string)), true
case "Photo.comment":
if e.complexity.Photo.Comment == nil {
break
}
return e.complexity.Photo.Comment(childComplexity), true
case "Photo.followed":
if e.complexity.Photo.Followed == nil {
break
}
return e.complexity.Photo.Followed(childComplexity), true
case "Photo.id":
if e.complexity.Photo.ID == nil {
break
}
return e.complexity.Photo.ID(childComplexity), true
case "Photo.liked":
if e.complexity.Photo.Liked == nil {
break
}
return e.complexity.Photo.Liked(childComplexity), true
case "Photo.rating":
if e.complexity.Photo.Rating == nil {
break
}
return e.complexity.Photo.Rating(childComplexity), true
case "Photo.url":
if e.complexity.Photo.URL == nil {
break
}
return e.complexity.Photo.URL(childComplexity), true
case "Photo.user":
if e.complexity.Photo.User == nil {
break
}
return e.complexity.Photo.User(childComplexity), true
case "Query.photos":
if e.complexity.Query.Photos == nil {
break
}
args, err := ec.field_Query_photos_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Query.Photos(childComplexity, args["userID"].(string)), true
case "Query.timeline":
if e.complexity.Query.Timeline == nil {
break
}
return e.complexity.Query.Timeline(childComplexity), true
case "Query.user":
if e.complexity.Query.User == nil {
break
}
args, err := ec.field_Query_user_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Query.User(childComplexity, args["userID"].(string)), true
case "User.avatar":
if e.complexity.User.Avatar == nil {
break
}
return e.complexity.User.Avatar(childComplexity), true
case "User.id":
if e.complexity.User.ID == nil {
break
}
return e.complexity.User.ID(childComplexity), true
case "User.name":
if e.complexity.User.Name == nil {
break
}
return e.complexity.User.Name(childComplexity), true
}
return 0, false
}
func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler {
rc := graphql.GetOperationContext(ctx)
ec := executionContext{rc, e}
first := true
switch rc.Operation.Operation {
case ast.Query:
return func(ctx context.Context) *graphql.Response {
if !first {
return nil
}
first = false
data := ec._Query(ctx, rc.Operation.SelectionSet)
var buf bytes.Buffer
data.MarshalGQL(&buf)
return &graphql.Response{
Data: buf.Bytes(),
}
}
case ast.Mutation:
return func(ctx context.Context) *graphql.Response {
if !first {
return nil
}
first = false
data := ec._Mutation(ctx, rc.Operation.SelectionSet)
var buf bytes.Buffer
data.MarshalGQL(&buf)
return &graphql.Response{
Data: buf.Bytes(),
}
}
default:
return graphql.OneShot(graphql.ErrorResponse(ctx, "unsupported GraphQL operation"))
}
}
type executionContext struct {
*graphql.OperationContext
*executableSchema
}
func (ec *executionContext) introspectSchema() (*introspection.Schema, error) {
if ec.DisableIntrospection {
return nil, errors.New("introspection disabled")
}
return introspection.WrapSchema(parsedSchema), nil
}
func (ec *executionContext) introspectType(name string) (*introspection.Type, error) {
if ec.DisableIntrospection {
return nil, errors.New("introspection disabled")
}
return introspection.WrapTypeFromDef(parsedSchema, parsedSchema.Types[name]), nil
}
var sources = []*ast.Source{
&ast.Source{Name: "schema.graphql", Input: `type User {
id: ID!
name: String!
avatar: String!
}
type Photo {
id: ID!
user: User!
url: String!
comment: String!
rating: Int!
liked: Boolean!
followed: Boolean!
}
type Query {
# query{timeline{id,url,user{id,name}}}
timeline: [Photo!]!
# query{user(userID:"1"){id,url,user{id,name}}}
user(userID: ID!): User!
# query{user(userID:"1"){id,avatar,name}}
photos(userID: ID!): [Photo!]!
}
type Mutation {
# mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
ratePhoto(photoID: ID!, direction: String!): Photo!
}
# go run github.com/99designs/gqlgen init
# go run github.com/99designs/gqlgen -v
`, BuiltIn: false},
}
var parsedSchema = gqlparser.MustLoadSchema(sources...)
// endregion ************************** generated!.gotpl **************************
// region ***************************** args.gotpl *****************************
func (ec *executionContext) field_Mutation_ratePhoto_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["photoID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["photoID"] = arg0
var arg1 string
if tmp, ok := rawArgs["direction"]; ok {
arg1, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["direction"] = arg1
return args, nil
}
func (ec *executionContext) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["name"]; ok {
arg0, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["name"] = arg0
return args, nil
}
func (ec *executionContext) field_Query_photos_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["userID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["userID"] = arg0
return args, nil
}
func (ec *executionContext) field_Query_user_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["userID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["userID"] = arg0
return args, nil
}
func (ec *executionContext) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 bool
if tmp, ok := rawArgs["includeDeprecated"]; ok {
arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
if err != nil {
return nil, err
}
}
args["includeDeprecated"] = arg0
return args, nil
}
func (ec *executionContext) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 bool
if tmp, ok := rawArgs["includeDeprecated"]; ok {
arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
if err != nil {
return nil, err
}
}
args["includeDeprecated"] = arg0
return args, nil
}
// endregion ***************************** args.gotpl *****************************
// region ************************** directives.gotpl **************************
// endregion ************************** directives.gotpl **************************
// region **************************** field.gotpl *****************************
func (ec *executionContext) _Mutation_ratePhoto(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Mutation",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Mutation_ratePhoto_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Mutation().RatePhoto(rctx, args["photoID"].(string), args["direction"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚖgqlgen2ᚐPhoto(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_id(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Photo().ID(rctx, obj)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNID2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_user(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Photo().User(rctx, obj)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*User)
fc.Result = res
return ec.marshalNUser2ᚖgqlgen2ᚐUser(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_url(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.URL, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_comment(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Comment, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_rating(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Rating, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(int)
fc.Result = res
return ec.marshalNInt2int(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_liked(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Liked, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_followed(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Followed, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_timeline(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().Timeline(rctx)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚕᚖgqlgen2ᚐPhotoᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_user(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query_user_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().User(rctx, args["userID"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*User)
fc.Result = res
return ec.marshalNUser2ᚖgqlgen2ᚐUser(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_photos(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query_photos_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().Photos(rctx, args["userID"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚕᚖgqlgen2ᚐPhotoᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) _Query___type(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query___type_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.introspectType(args["name"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.introspectSchema()
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Schema)
fc.Result = res
return ec.marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx, field.Selections, res)
}
func (ec *executionContext) _User_id(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.ID, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNID2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_name(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_avatar(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Avatar, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Locations, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]string)
fc.Result = res
return ec.marshalN__DirectiveLocation2ᚕstringᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Args, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
fc.Result = res
return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.IsDeprecated(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DeprecationReason(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Args, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
fc.Result = res
return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Type, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.IsDeprecated(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DeprecationReason(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Type, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DefaultValue, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Types(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.QueryType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.MutationType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.SubscriptionType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Directives(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.Directive)
fc.Result = res
return ec.marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Kind(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalN__TypeKind2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field___Type_fields_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Fields(args["includeDeprecated"].(bool)), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Field)
fc.Result = res
return ec.marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Interfaces(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.PossibleTypes(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field___Type_enumValues_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.EnumValues(args["includeDeprecated"].(bool)), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.EnumValue)
fc.Result = res
return ec.marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.InputFields(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
fc.Result = res
return ec.marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.OfType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
// endregion **************************** field.gotpl *****************************
// region **************************** input.gotpl *****************************
// endregion **************************** input.gotpl *****************************
// region ************************** interface.gotpl ***************************
// endregion ************************** interface.gotpl ***************************
// region **************************** object.gotpl ****************************
var mutationImplementors = []string{"Mutation"}
func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, mutationImplementors)
ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{
Object: "Mutation",
})
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Mutation")
case "ratePhoto":
out.Values[i] = ec._Mutation_ratePhoto(ctx, field)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var photoImplementors = []string{"Photo"}
func (ec *executionContext) _Photo(ctx context.Context, sel ast.SelectionSet, obj *Photo) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, photoImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Photo")
case "id":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Photo_id(ctx, field, obj)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "user":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Photo_user(ctx, field, obj)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "url":
out.Values[i] = ec._Photo_url(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "comment":
out.Values[i] = ec._Photo_comment(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "rating":
out.Values[i] = ec._Photo_rating(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "liked":
out.Values[i] = ec._Photo_liked(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "followed":
out.Values[i] = ec._Photo_followed(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var queryImplementors = []string{"Query"}
func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, queryImplementors)
ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{
Object: "Query",
})
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Query")
case "timeline":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_timeline(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "user":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_user(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "photos":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_photos(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "__type":
out.Values[i] = ec._Query___type(ctx, field)
case "__schema":
out.Values[i] = ec._Query___schema(ctx, field)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var userImplementors = []string{"User"}
func (ec *executionContext) _User(ctx context.Context, sel ast.SelectionSet, obj *User) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, userImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("User")
case "id":
out.Values[i] = ec._User_id(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "name":
out.Values[i] = ec._User_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "avatar":
out.Values[i] = ec._User_avatar(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __DirectiveImplementors = []string{"__Directive"}
func (ec *executionContext) ___Directive(ctx context.Context, sel ast.SelectionSet, obj *introspection.Directive) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __DirectiveImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Directive")
case "name":
out.Values[i] = ec.___Directive_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___Directive_description(ctx, field, obj)
case "locations":
out.Values[i] = ec.___Directive_locations(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "args":
out.Values[i] = ec.___Directive_args(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __EnumValueImplementors = []string{"__EnumValue"}
func (ec *executionContext) ___EnumValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.EnumValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __EnumValueImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__EnumValue")
case "name":
out.Values[i] = ec.___EnumValue_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___EnumValue_description(ctx, field, obj)
case "isDeprecated":
out.Values[i] = ec.___EnumValue_isDeprecated(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "deprecationReason":
out.Values[i] = ec.___EnumValue_deprecationReason(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __FieldImplementors = []string{"__Field"}
func (ec *executionContext) ___Field(ctx context.Context, sel ast.SelectionSet, obj *introspection.Field) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __FieldImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Field")
case "name":
out.Values[i] = ec.___Field_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___Field_description(ctx, field, obj)
case "args":
out.Values[i] = ec.___Field_args(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "type":
out.Values[i] = ec.___Field_type(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "isDeprecated":
out.Values[i] = ec.___Field_isDeprecated(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "deprecationReason":
out.Values[i] = ec.___Field_deprecationReason(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __InputValueImplementors = []string{"__InputValue"}
func (ec *executionContext) ___InputValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.InputValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __InputValueImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__InputValue")
case "name":
out.Values[i] = ec.___InputValue_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___InputValue_description(ctx, field, obj)
case "type":
out.Values[i] = ec.___InputValue_type(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "defaultValue":
out.Values[i] = ec.___InputValue_defaultValue(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __SchemaImplementors = []string{"__Schema"}
func (ec *executionContext) ___Schema(ctx context.Context, sel ast.SelectionSet, obj *introspection.Schema) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __SchemaImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Schema")
case "types":
out.Values[i] = ec.___Schema_types(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "queryType":
out.Values[i] = ec.___Schema_queryType(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "mutationType":
out.Values[i] = ec.___Schema_mutationType(ctx, field, obj)
case "subscriptionType":
out.Values[i] = ec.___Schema_subscriptionType(ctx, field, obj)
case "directives":
out.Values[i] = ec.___Schema_directives(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __TypeImplementors = []string{"__Type"}
func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, obj *introspection.Type) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __TypeImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Type")
case "kind":
out.Values[i] = ec.___Type_kind(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "name":
out.Values[i] = ec.___Type_name(ctx, field, obj)
case "description":
out.Values[i] = ec.___Type_description(ctx, field, obj)
case "fields":
out.Values[i] = ec.___Type_fields(ctx, field, obj)
case "interfaces":
out.Values[i] = ec.___Type_interfaces(ctx, field, obj)
case "possibleTypes":
out.Values[i] = ec.___Type_possibleTypes(ctx, field, obj)
case "enumValues":
out.Values[i] = ec.___Type_enumValues(ctx, field, obj)
case "inputFields":
out.Values[i] = ec.___Type_inputFields(ctx, field, obj)
case "ofType":
out.Values[i] = ec.___Type_ofType(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
// endregion **************************** object.gotpl ****************************
// region ***************************** type.gotpl *****************************
func (ec *executionContext) unmarshalNBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
return graphql.UnmarshalBoolean(v)
}
func (ec *executionContext) marshalNBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
res := graphql.MarshalBoolean(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNID2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalID(v)
}
func (ec *executionContext) marshalNID2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalID(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNInt2int(ctx context.Context, v interface{}) (int, error) {
return graphql.UnmarshalInt(v)
}
func (ec *executionContext) marshalNInt2int(ctx context.Context, sel ast.SelectionSet, v int) graphql.Marshaler {
res := graphql.MarshalInt(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) marshalNPhoto2gqlgen2ᚐPhoto(ctx context.Context, sel ast.SelectionSet, v Photo) graphql.Marshaler {
return ec._Photo(ctx, sel, &v)
}
func (ec *executionContext) marshalNPhoto2ᚕᚖgqlgen2ᚐPhotoᚄ(ctx context.Context, sel ast.SelectionSet, v []*Photo) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalNPhoto2ᚖgqlgen2ᚐPhoto(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalNPhoto2ᚖgqlgen2ᚐPhoto(ctx context.Context, sel ast.SelectionSet, v *Photo) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec._Photo(ctx, sel, v)
}
func (ec *executionContext) unmarshalNString2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalNString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) marshalNUser2gqlgen2ᚐUser(ctx context.Context, sel ast.SelectionSet, v User) graphql.Marshaler {
return ec._User(ctx, sel, &v)
}
func (ec *executionContext) marshalNUser2ᚖgqlgen2ᚐUser(ctx context.Context, sel ast.SelectionSet, v *User) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec._User(ctx, sel, v)
}
func (ec *executionContext) marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx context.Context, sel ast.SelectionSet, v introspection.Directive) graphql.Marshaler {
return ec.___Directive(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Directive) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) unmarshalN__DirectiveLocation2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalN__DirectiveLocation2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalN__DirectiveLocation2ᚕstringᚄ(ctx context.Context, v interface{}) ([]string, error) {
var vSlice []interface{}
if v != nil {
if tmp1, ok := v.([]interface{}); ok {
vSlice = tmp1
} else {
vSlice = []interface{}{v}
}
}
var err error
res := make([]string, len(vSlice))
for i := range vSlice {
res[i], err = ec.unmarshalN__DirectiveLocation2string(ctx, vSlice[i])
if err != nil {
return nil, err
}
}
return res, nil
}
func (ec *executionContext) marshalN__DirectiveLocation2ᚕstringᚄ(ctx context.Context, sel ast.SelectionSet, v []string) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__DirectiveLocation2string(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx context.Context, sel ast.SelectionSet, v introspection.EnumValue) graphql.Marshaler {
return ec.___EnumValue(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx context.Context, sel ast.SelectionSet, v introspection.Field) graphql.Marshaler {
return ec.___Field(ctx, sel, &v)
}
func (ec *executionContext) marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx context.Context, sel ast.SelectionSet, v introspection.InputValue) graphql.Marshaler {
return ec.___InputValue(ctx, sel, &v)
}
func (ec *executionContext) marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
return ec.___Type(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec.___Type(ctx, sel, v)
}
func (ec *executionContext) unmarshalN__TypeKind2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalN__TypeKind2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalOBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
return graphql.UnmarshalBoolean(v)
}
func (ec *executionContext) marshalOBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
return graphql.MarshalBoolean(v)
}
func (ec *executionContext) unmarshalOBoolean2ᚖbool(ctx context.Context, v interface{}) (*bool, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalOBoolean2bool(ctx, v)
return &res, err
}
func (ec *executionContext) marshalOBoolean2ᚖbool(ctx context.Context, sel ast.SelectionSet, v *bool) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.marshalOBoolean2bool(ctx, sel, *v)
}
func (ec *executionContext) unmarshalOString2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalOString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
return graphql.MarshalString(v)
}
func (ec *executionContext) unmarshalOString2ᚖstring(ctx context.Context, v interface{}) (*string, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalOString2string(ctx, v)
return &res, err
}
func (ec *executionContext) marshalOString2ᚖstring(ctx context.Context, sel ast.SelectionSet, v *string) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.marshalOString2string(ctx, sel, *v)
}
func (ec *executionContext) marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.EnumValue) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Field) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Schema2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v introspection.Schema) graphql.Marshaler {
return ec.___Schema(ctx, sel, &v)
}
func (ec *executionContext) marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v *introspection.Schema) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.___Schema(ctx, sel, v)
}
func (ec *executionContext) marshalO__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
return ec.___Type(ctx, sel, &v)
}
func (ec *executionContext) marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.___Type(ctx, sel, v)
}
// endregion ***************************** type.gotpl *****************************
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen2/go.mod
================================================
module gqlgen2
go 1.13
require (
github.com/99designs/gqlgen v0.11.1
github.com/vektah/gqlparser/v2 v2.0.1
)
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen2/go.sum
================================================
github.com/99designs/gqlgen v0.11.1 h1:QoSL8/AAJ2T3UOeQbdnBR32JcG4pO08+P/g5jdbFkUg=
github.com/99designs/gqlgen v0.11.1/go.mod h1:vjFOyBZ7NwDl+GdSD4PFn7BQn5Fy7ohJwXn7Vk8zz+c=
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
github.com/agnivade/levenshtein v1.0.3 h1:M5ZnqLOoZR8ygVq0FfkXsNOKzMCk0xRiow0R5+5VkQ0=
github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgryski/trifles v0.0.0-20190318185328-a8d75aae118c/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
github.com/go-chi/chi v3.3.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/mux v1.6.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/websocket v1.2.0 h1:VJtLvh6VQym50czpZzx07z/kw9EgAxI3x1ZB8taTMQQ=
github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
github.com/matryer/moq v0.0.0-20200106131100-75d0ddfc0007/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047 h1:zCoDWFD5nrJJVjbXiDZcVhOBSzKn3o9LgRLLMRNuru8=
github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
github.com/shurcooL/vfsgen v0.0.0-20180121065927-ffb13db8def0/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/vektah/dataloaden v0.2.1-0.20190515034641-a19b9a6e7c9e/go.mod h1:/HUdMve7rvxZma+2ZELQeNh88+003LL7Pf/CZ089j8U=
github.com/vektah/gqlparser/v2 v2.0.1 h1:xgl5abVnsd4hkN9rk65OJID9bfcLSMuTaTcZj777q1o=
github.com/vektah/gqlparser/v2 v2.0.1/go.mod h1:SyUiHgLATUR8BiYURfTirrTcGpcE+4XkV2se04Px1Ms=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190515012406-7d7faa4812bd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589 h1:rjUrONFu4kLchcZTfp3/96bR8bW8dIa8uz3cR5n0cgM=
golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
sourcegraph.com/sourcegraph/appdash v0.0.0-20180110180208-2cc67fd64755/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k=
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen2/gqlgen.yml
================================================
# .gqlgen.yml example
#
# Refer to https://gqlgen.com/config/
# for detailed .gqlgen.yml documentation.
schema:
- schema.graphql
exec:
filename: generated.go
model:
filename: models_gen.go
resolver:
filename: resolver.go
type: Resolver
models:
Photo:
model: gqlgen2.Photo
fields:
user:
resolver: true
autobind: []
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen2/models_gen.go
================================================
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
package gqlgen2
type User struct {
ID string `json:"id"`
Name string `json:"name"`
Avatar string `json:"avatar"`
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen2/photo.go
================================================
package gqlgen2
import (
"log"
"strconv"
)
type Photo struct {
ID uint `json:"id"`
UserID uint `json:"-"`
// User *User `json:"user"`
URL string `json:"url"`
Comment string `json:"comment"`
Rating int `json:"rating"`
Liked bool `json:"liked"`
Followed bool `json:"followed"`
}
func (ph *Photo) Id() string {
log.Println("call Photo.Id method", ph.ID)
return strconv.Itoa(int(ph.ID))
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen2/resolver.go
================================================
package gqlgen2
//go:generate go run github.com/99designs/gqlgen
import (
"context"
"fmt"
"log"
"strconv"
) // THIS CODE IS A STARTING POINT ONLY. IT WILL NOT BE UPDATED WITH SCHEMA CHANGES.
type Resolver struct {
PhotosData map[string]*Photo
Users map[uint]*User
}
func (r *Resolver) Mutation() MutationResolver {
return &mutationResolver{r}
}
func (r *Resolver) Photo() PhotoResolver {
return &photoResolver{r}
}
func (r *Resolver) Query() QueryResolver {
return &queryResolver{r}
}
type mutationResolver struct{ *Resolver }
func (r *mutationResolver) RatePhoto(ctx context.Context, id string, direction string) (*Photo, error) {
log.Println("call mutationResolver.RatePhoto method with id", id, direction)
rate := 1
if direction != "up" {
rate = -1
}
ph, ok := r.PhotosData[id]
if !ok {
return nil, fmt.Errorf("no photo %v found", id)
}
ph.Rating += rate
return ph, nil
}
type photoResolver struct{ *Resolver }
func (r *photoResolver) ID(ctx context.Context, obj *Photo) (string, error) {
return obj.Id(), nil
}
func (r *photoResolver) User(ctx context.Context, obj *Photo) (*User, error) {
// log.Println("call photoResolver.User", obj.UserID)
log.Printf("photoResolver.User: SELECT id, name FROM user WHERE ID = %d\n", obj.UserID)
return r.Users[obj.UserID], nil
}
type queryResolver struct{ *Resolver }
func (r *queryResolver) Timeline(ctx context.Context) ([]*Photo, error) {
log.Println("call queryResolver.Timeline with ctx.userID", ctx.Value("userID"))
items := []*Photo{}
for _, ph := range r.PhotosData {
items = append(items, ph)
}
return items, nil
}
func (r *queryResolver) User(ctx context.Context, userID string) (*User, error) {
log.Println("call queryResolver.User for", userID)
id, _ := strconv.Atoi(userID)
return r.Users[uint(id)], nil
}
func (r *queryResolver) Photos(ctx context.Context, userID string) ([]*Photo, error) {
log.Println("call queryResolver.Photos")
id, _ := strconv.Atoi(userID)
items := []*Photo{}
for _, ph := range r.PhotosData {
if ph.UserID != uint(id) {
continue
}
items = append(items, ph)
}
return items, nil
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen2/schema.graphql
================================================
type User {
id: ID!
name: String!
avatar: String!
}
type Photo {
id: ID!
user: User!
url: String!
comment: String!
rating: Int!
liked: Boolean!
followed: Boolean!
}
type Query {
# query{timeline{id,url,user{id,name}}}
timeline: [Photo!]!
# query{user(userID:"1"){id,url,user{id,name}}}
user(userID: ID!): User!
# query{user(userID:"1"){id,avatar,name}}
photos(userID: ID!): [Photo!]!
}
type Mutation {
# mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
ratePhoto(photoID: ID!, direction: String!): Photo!
}
# go run github.com/99designs/gqlgen init
# go run github.com/99designs/gqlgen -v
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen2/schema_alt.graphql
================================================
directive @goModel(model: String, models: [String!]) on OBJECT
| INPUT_OBJECT
| SCALAR
| ENUM
| INTERFACE
| UNION
directive @goField(forceResolver: Boolean, name: String) on INPUT_FIELD_DEFINITION
| FIELD_DEFINITION
type User {
id: ID!
name: String!
avatar: String
}
type Photo @goModel(model:"coursera/3p/graphql/gqlgen2.Photo") {
id: ID!
user: User! @goField(forceResolver: true)
url: String!
comment: String!
rating: Int!
liked: Boolean!
followed: Boolean!
}
type Query {
# query{timeline{id,url,user{id,name}}}
timeline: [Photo!]!
# query{user(userID:"1"){id,url,user{id,name}}}
user(userID: ID!): User!
# query{user(userID:"1"){id,avatar,name}}
photos(userID: ID!): [Photo!]!
}
type Mutation {
# mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
ratePhoto(photoID: ID!, direction: String!): Photo!
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen2/server/server.go
================================================
package main
import (
"context"
gqlgen "gqlgen2"
"log"
"net/http"
"github.com/99designs/gqlgen/handler"
)
/*
query{timeline{id,url,user{id,name}}}
query{user(userID:"1"){id,avatar, name}}
mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
*/
var users = map[uint]*gqlgen.User{
1: {
ID: "1",
Name: "rvasily",
Avatar: "https://via.placeholder.com/150",
},
2: {
ID: "2",
Name: "v.romanov",
Avatar: "https://via.placeholder.com/150",
},
}
var photos = map[string]*gqlgen.Photo{
"1": {
ID: 1,
UserID: 1,
URL: "https://via.placeholder.com/300",
Comment: "fromn studio",
Rating: 1,
Liked: true,
Followed: false,
},
"2": {
ID: 2,
UserID: 1,
URL: "https://via.placeholder.com/300",
Comment: "cool view",
Rating: 0,
Liked: false,
Followed: false,
},
"3": {
ID: 3,
UserID: 2,
URL: "https://via.placeholder.com/300",
Comment: "at work",
Rating: 0,
Liked: false,
Followed: false,
},
}
func AuthMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Println("new request")
ctx := context.WithValue(r.Context(), "userID", 1)
r = r.WithContext(ctx)
next.ServeHTTP(w, r)
})
}
func main() {
http.Handle("/", handler.Playground("GraphQL playground", "/query"))
cfg := gqlgen.Config{
Resolvers: &gqlgen.Resolver{
Users: users,
PhotosData: photos,
},
}
gqlHandler := handler.GraphQL(gqlgen.NewExecutableSchema(cfg))
handler := AuthMiddleware(gqlHandler)
http.Handle("/query", handler)
port := "8080"
log.Printf("connect to http://localhost:%s/ for GraphQL playground", port)
log.Fatal(http.ListenAndServe(":"+port, nil))
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen3/generated.go
================================================
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
package gqlgen3
import (
"bytes"
"context"
"errors"
"strconv"
"sync"
"sync/atomic"
"github.com/99designs/gqlgen/graphql"
"github.com/99designs/gqlgen/graphql/introspection"
gqlparser "github.com/vektah/gqlparser/v2"
"github.com/vektah/gqlparser/v2/ast"
)
// region ************************** generated!.gotpl **************************
// NewExecutableSchema creates an ExecutableSchema from the ResolverRoot interface.
func NewExecutableSchema(cfg Config) graphql.ExecutableSchema {
return &executableSchema{
resolvers: cfg.Resolvers,
directives: cfg.Directives,
complexity: cfg.Complexity,
}
}
type Config struct {
Resolvers ResolverRoot
Directives DirectiveRoot
Complexity ComplexityRoot
}
type ResolverRoot interface {
Mutation() MutationResolver
Photo() PhotoResolver
Query() QueryResolver
}
type DirectiveRoot struct {
}
type ComplexityRoot struct {
Mutation struct {
RatePhoto func(childComplexity int, photoID string, direction string) int
}
Photo struct {
Comment func(childComplexity int) int
ID func(childComplexity int) int
Liked func(childComplexity int) int
Rating func(childComplexity int) int
URL func(childComplexity int) int
User func(childComplexity int) int
}
Query struct {
Photos func(childComplexity int, userID string) int
Timeline func(childComplexity int) int
User func(childComplexity int, userID string) int
}
User struct {
Avatar func(childComplexity int) int
Followed func(childComplexity int) int
ID func(childComplexity int) int
Name func(childComplexity int) int
}
}
type MutationResolver interface {
RatePhoto(ctx context.Context, photoID string, direction string) (*Photo, error)
}
type PhotoResolver interface {
ID(ctx context.Context, obj *Photo) (string, error)
User(ctx context.Context, obj *Photo) (*User, error)
}
type QueryResolver interface {
Timeline(ctx context.Context) ([]*Photo, error)
User(ctx context.Context, userID string) (*User, error)
Photos(ctx context.Context, userID string) ([]*Photo, error)
}
type executableSchema struct {
resolvers ResolverRoot
directives DirectiveRoot
complexity ComplexityRoot
}
func (e *executableSchema) Schema() *ast.Schema {
return parsedSchema
}
func (e *executableSchema) Complexity(typeName, field string, childComplexity int, rawArgs map[string]interface{}) (int, bool) {
ec := executionContext{nil, e}
_ = ec
switch typeName + "." + field {
case "Mutation.ratePhoto":
if e.complexity.Mutation.RatePhoto == nil {
break
}
args, err := ec.field_Mutation_ratePhoto_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Mutation.RatePhoto(childComplexity, args["photoID"].(string), args["direction"].(string)), true
case "Photo.comment":
if e.complexity.Photo.Comment == nil {
break
}
return e.complexity.Photo.Comment(childComplexity), true
case "Photo.id":
if e.complexity.Photo.ID == nil {
break
}
return e.complexity.Photo.ID(childComplexity), true
case "Photo.liked":
if e.complexity.Photo.Liked == nil {
break
}
return e.complexity.Photo.Liked(childComplexity), true
case "Photo.rating":
if e.complexity.Photo.Rating == nil {
break
}
return e.complexity.Photo.Rating(childComplexity), true
case "Photo.url":
if e.complexity.Photo.URL == nil {
break
}
return e.complexity.Photo.URL(childComplexity), true
case "Photo.user":
if e.complexity.Photo.User == nil {
break
}
return e.complexity.Photo.User(childComplexity), true
case "Query.photos":
if e.complexity.Query.Photos == nil {
break
}
args, err := ec.field_Query_photos_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Query.Photos(childComplexity, args["userID"].(string)), true
case "Query.timeline":
if e.complexity.Query.Timeline == nil {
break
}
return e.complexity.Query.Timeline(childComplexity), true
case "Query.user":
if e.complexity.Query.User == nil {
break
}
args, err := ec.field_Query_user_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Query.User(childComplexity, args["userID"].(string)), true
case "User.avatar":
if e.complexity.User.Avatar == nil {
break
}
return e.complexity.User.Avatar(childComplexity), true
case "User.followed":
if e.complexity.User.Followed == nil {
break
}
return e.complexity.User.Followed(childComplexity), true
case "User.id":
if e.complexity.User.ID == nil {
break
}
return e.complexity.User.ID(childComplexity), true
case "User.name":
if e.complexity.User.Name == nil {
break
}
return e.complexity.User.Name(childComplexity), true
}
return 0, false
}
func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler {
rc := graphql.GetOperationContext(ctx)
ec := executionContext{rc, e}
first := true
switch rc.Operation.Operation {
case ast.Query:
return func(ctx context.Context) *graphql.Response {
if !first {
return nil
}
first = false
data := ec._Query(ctx, rc.Operation.SelectionSet)
var buf bytes.Buffer
data.MarshalGQL(&buf)
return &graphql.Response{
Data: buf.Bytes(),
}
}
case ast.Mutation:
return func(ctx context.Context) *graphql.Response {
if !first {
return nil
}
first = false
data := ec._Mutation(ctx, rc.Operation.SelectionSet)
var buf bytes.Buffer
data.MarshalGQL(&buf)
return &graphql.Response{
Data: buf.Bytes(),
}
}
default:
return graphql.OneShot(graphql.ErrorResponse(ctx, "unsupported GraphQL operation"))
}
}
type executionContext struct {
*graphql.OperationContext
*executableSchema
}
func (ec *executionContext) introspectSchema() (*introspection.Schema, error) {
if ec.DisableIntrospection {
return nil, errors.New("introspection disabled")
}
return introspection.WrapSchema(parsedSchema), nil
}
func (ec *executionContext) introspectType(name string) (*introspection.Type, error) {
if ec.DisableIntrospection {
return nil, errors.New("introspection disabled")
}
return introspection.WrapTypeFromDef(parsedSchema, parsedSchema.Types[name]), nil
}
var sources = []*ast.Source{
&ast.Source{Name: "schema.graphql", Input: `type User {
id: ID!
name: String!
avatar: String!
followed: Boolean!
}
type Photo {
id: ID!
user: User!
url: String!
comment: String!
rating: Int!
liked: Boolean!
}
type Query {
# query{timeline{id,url,user{id,name}}}
timeline: [Photo!]!
# query{user(userID:"1"){id,url,user{id,name}}}
user(userID: ID!): User!
# query{user(userID:"1"){id,avatar,name}}
photos(userID: ID!): [Photo!]!
}
type Mutation {
# mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
ratePhoto(photoID: ID!, direction: String!): Photo!
}
# go run github.com/99designs/gqlgen init
# go run github.com/99designs/gqlgen -v
`, BuiltIn: false},
}
var parsedSchema = gqlparser.MustLoadSchema(sources...)
// endregion ************************** generated!.gotpl **************************
// region ***************************** args.gotpl *****************************
func (ec *executionContext) field_Mutation_ratePhoto_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["photoID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["photoID"] = arg0
var arg1 string
if tmp, ok := rawArgs["direction"]; ok {
arg1, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["direction"] = arg1
return args, nil
}
func (ec *executionContext) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["name"]; ok {
arg0, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["name"] = arg0
return args, nil
}
func (ec *executionContext) field_Query_photos_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["userID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["userID"] = arg0
return args, nil
}
func (ec *executionContext) field_Query_user_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["userID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["userID"] = arg0
return args, nil
}
func (ec *executionContext) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 bool
if tmp, ok := rawArgs["includeDeprecated"]; ok {
arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
if err != nil {
return nil, err
}
}
args["includeDeprecated"] = arg0
return args, nil
}
func (ec *executionContext) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 bool
if tmp, ok := rawArgs["includeDeprecated"]; ok {
arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
if err != nil {
return nil, err
}
}
args["includeDeprecated"] = arg0
return args, nil
}
// endregion ***************************** args.gotpl *****************************
// region ************************** directives.gotpl **************************
// endregion ************************** directives.gotpl **************************
// region **************************** field.gotpl *****************************
func (ec *executionContext) _Mutation_ratePhoto(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Mutation",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Mutation_ratePhoto_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Mutation().RatePhoto(rctx, args["photoID"].(string), args["direction"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚖgqlgen3ᚐPhoto(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_id(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Photo().ID(rctx, obj)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNID2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_user(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Photo().User(rctx, obj)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*User)
fc.Result = res
return ec.marshalNUser2ᚖgqlgen3ᚐUser(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_url(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.URL, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_comment(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Comment, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_rating(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Rating, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(int)
fc.Result = res
return ec.marshalNInt2int(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_liked(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Liked, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_timeline(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().Timeline(rctx)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚕᚖgqlgen3ᚐPhotoᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_user(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query_user_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().User(rctx, args["userID"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*User)
fc.Result = res
return ec.marshalNUser2ᚖgqlgen3ᚐUser(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_photos(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query_photos_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().Photos(rctx, args["userID"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚕᚖgqlgen3ᚐPhotoᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) _Query___type(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query___type_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.introspectType(args["name"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.introspectSchema()
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Schema)
fc.Result = res
return ec.marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx, field.Selections, res)
}
func (ec *executionContext) _User_id(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.ID, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNID2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_name(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_avatar(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Avatar, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_followed(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Followed, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Locations, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]string)
fc.Result = res
return ec.marshalN__DirectiveLocation2ᚕstringᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Args, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
fc.Result = res
return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.IsDeprecated(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DeprecationReason(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Args, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
fc.Result = res
return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Type, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.IsDeprecated(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DeprecationReason(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Type, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DefaultValue, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Types(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.QueryType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.MutationType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.SubscriptionType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Directives(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.Directive)
fc.Result = res
return ec.marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Kind(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalN__TypeKind2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field___Type_fields_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Fields(args["includeDeprecated"].(bool)), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Field)
fc.Result = res
return ec.marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Interfaces(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.PossibleTypes(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field___Type_enumValues_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.EnumValues(args["includeDeprecated"].(bool)), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.EnumValue)
fc.Result = res
return ec.marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.InputFields(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
fc.Result = res
return ec.marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.OfType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
// endregion **************************** field.gotpl *****************************
// region **************************** input.gotpl *****************************
// endregion **************************** input.gotpl *****************************
// region ************************** interface.gotpl ***************************
// endregion ************************** interface.gotpl ***************************
// region **************************** object.gotpl ****************************
var mutationImplementors = []string{"Mutation"}
func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, mutationImplementors)
ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{
Object: "Mutation",
})
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Mutation")
case "ratePhoto":
out.Values[i] = ec._Mutation_ratePhoto(ctx, field)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var photoImplementors = []string{"Photo"}
func (ec *executionContext) _Photo(ctx context.Context, sel ast.SelectionSet, obj *Photo) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, photoImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Photo")
case "id":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Photo_id(ctx, field, obj)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "user":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Photo_user(ctx, field, obj)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "url":
out.Values[i] = ec._Photo_url(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "comment":
out.Values[i] = ec._Photo_comment(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "rating":
out.Values[i] = ec._Photo_rating(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "liked":
out.Values[i] = ec._Photo_liked(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var queryImplementors = []string{"Query"}
func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, queryImplementors)
ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{
Object: "Query",
})
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Query")
case "timeline":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_timeline(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "user":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_user(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "photos":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_photos(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "__type":
out.Values[i] = ec._Query___type(ctx, field)
case "__schema":
out.Values[i] = ec._Query___schema(ctx, field)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var userImplementors = []string{"User"}
func (ec *executionContext) _User(ctx context.Context, sel ast.SelectionSet, obj *User) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, userImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("User")
case "id":
out.Values[i] = ec._User_id(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "name":
out.Values[i] = ec._User_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "avatar":
out.Values[i] = ec._User_avatar(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "followed":
out.Values[i] = ec._User_followed(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __DirectiveImplementors = []string{"__Directive"}
func (ec *executionContext) ___Directive(ctx context.Context, sel ast.SelectionSet, obj *introspection.Directive) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __DirectiveImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Directive")
case "name":
out.Values[i] = ec.___Directive_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___Directive_description(ctx, field, obj)
case "locations":
out.Values[i] = ec.___Directive_locations(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "args":
out.Values[i] = ec.___Directive_args(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __EnumValueImplementors = []string{"__EnumValue"}
func (ec *executionContext) ___EnumValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.EnumValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __EnumValueImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__EnumValue")
case "name":
out.Values[i] = ec.___EnumValue_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___EnumValue_description(ctx, field, obj)
case "isDeprecated":
out.Values[i] = ec.___EnumValue_isDeprecated(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "deprecationReason":
out.Values[i] = ec.___EnumValue_deprecationReason(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __FieldImplementors = []string{"__Field"}
func (ec *executionContext) ___Field(ctx context.Context, sel ast.SelectionSet, obj *introspection.Field) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __FieldImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Field")
case "name":
out.Values[i] = ec.___Field_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___Field_description(ctx, field, obj)
case "args":
out.Values[i] = ec.___Field_args(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "type":
out.Values[i] = ec.___Field_type(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "isDeprecated":
out.Values[i] = ec.___Field_isDeprecated(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "deprecationReason":
out.Values[i] = ec.___Field_deprecationReason(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __InputValueImplementors = []string{"__InputValue"}
func (ec *executionContext) ___InputValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.InputValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __InputValueImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__InputValue")
case "name":
out.Values[i] = ec.___InputValue_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___InputValue_description(ctx, field, obj)
case "type":
out.Values[i] = ec.___InputValue_type(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "defaultValue":
out.Values[i] = ec.___InputValue_defaultValue(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __SchemaImplementors = []string{"__Schema"}
func (ec *executionContext) ___Schema(ctx context.Context, sel ast.SelectionSet, obj *introspection.Schema) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __SchemaImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Schema")
case "types":
out.Values[i] = ec.___Schema_types(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "queryType":
out.Values[i] = ec.___Schema_queryType(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "mutationType":
out.Values[i] = ec.___Schema_mutationType(ctx, field, obj)
case "subscriptionType":
out.Values[i] = ec.___Schema_subscriptionType(ctx, field, obj)
case "directives":
out.Values[i] = ec.___Schema_directives(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __TypeImplementors = []string{"__Type"}
func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, obj *introspection.Type) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __TypeImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Type")
case "kind":
out.Values[i] = ec.___Type_kind(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "name":
out.Values[i] = ec.___Type_name(ctx, field, obj)
case "description":
out.Values[i] = ec.___Type_description(ctx, field, obj)
case "fields":
out.Values[i] = ec.___Type_fields(ctx, field, obj)
case "interfaces":
out.Values[i] = ec.___Type_interfaces(ctx, field, obj)
case "possibleTypes":
out.Values[i] = ec.___Type_possibleTypes(ctx, field, obj)
case "enumValues":
out.Values[i] = ec.___Type_enumValues(ctx, field, obj)
case "inputFields":
out.Values[i] = ec.___Type_inputFields(ctx, field, obj)
case "ofType":
out.Values[i] = ec.___Type_ofType(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
// endregion **************************** object.gotpl ****************************
// region ***************************** type.gotpl *****************************
func (ec *executionContext) unmarshalNBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
return graphql.UnmarshalBoolean(v)
}
func (ec *executionContext) marshalNBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
res := graphql.MarshalBoolean(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNID2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalID(v)
}
func (ec *executionContext) marshalNID2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalID(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNInt2int(ctx context.Context, v interface{}) (int, error) {
return graphql.UnmarshalInt(v)
}
func (ec *executionContext) marshalNInt2int(ctx context.Context, sel ast.SelectionSet, v int) graphql.Marshaler {
res := graphql.MarshalInt(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) marshalNPhoto2gqlgen3ᚐPhoto(ctx context.Context, sel ast.SelectionSet, v Photo) graphql.Marshaler {
return ec._Photo(ctx, sel, &v)
}
func (ec *executionContext) marshalNPhoto2ᚕᚖgqlgen3ᚐPhotoᚄ(ctx context.Context, sel ast.SelectionSet, v []*Photo) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalNPhoto2ᚖgqlgen3ᚐPhoto(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalNPhoto2ᚖgqlgen3ᚐPhoto(ctx context.Context, sel ast.SelectionSet, v *Photo) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec._Photo(ctx, sel, v)
}
func (ec *executionContext) unmarshalNString2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalNString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) marshalNUser2gqlgen3ᚐUser(ctx context.Context, sel ast.SelectionSet, v User) graphql.Marshaler {
return ec._User(ctx, sel, &v)
}
func (ec *executionContext) marshalNUser2ᚖgqlgen3ᚐUser(ctx context.Context, sel ast.SelectionSet, v *User) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec._User(ctx, sel, v)
}
func (ec *executionContext) marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx context.Context, sel ast.SelectionSet, v introspection.Directive) graphql.Marshaler {
return ec.___Directive(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Directive) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) unmarshalN__DirectiveLocation2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalN__DirectiveLocation2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalN__DirectiveLocation2ᚕstringᚄ(ctx context.Context, v interface{}) ([]string, error) {
var vSlice []interface{}
if v != nil {
if tmp1, ok := v.([]interface{}); ok {
vSlice = tmp1
} else {
vSlice = []interface{}{v}
}
}
var err error
res := make([]string, len(vSlice))
for i := range vSlice {
res[i], err = ec.unmarshalN__DirectiveLocation2string(ctx, vSlice[i])
if err != nil {
return nil, err
}
}
return res, nil
}
func (ec *executionContext) marshalN__DirectiveLocation2ᚕstringᚄ(ctx context.Context, sel ast.SelectionSet, v []string) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__DirectiveLocation2string(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx context.Context, sel ast.SelectionSet, v introspection.EnumValue) graphql.Marshaler {
return ec.___EnumValue(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx context.Context, sel ast.SelectionSet, v introspection.Field) graphql.Marshaler {
return ec.___Field(ctx, sel, &v)
}
func (ec *executionContext) marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx context.Context, sel ast.SelectionSet, v introspection.InputValue) graphql.Marshaler {
return ec.___InputValue(ctx, sel, &v)
}
func (ec *executionContext) marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
return ec.___Type(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec.___Type(ctx, sel, v)
}
func (ec *executionContext) unmarshalN__TypeKind2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalN__TypeKind2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalOBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
return graphql.UnmarshalBoolean(v)
}
func (ec *executionContext) marshalOBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
return graphql.MarshalBoolean(v)
}
func (ec *executionContext) unmarshalOBoolean2ᚖbool(ctx context.Context, v interface{}) (*bool, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalOBoolean2bool(ctx, v)
return &res, err
}
func (ec *executionContext) marshalOBoolean2ᚖbool(ctx context.Context, sel ast.SelectionSet, v *bool) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.marshalOBoolean2bool(ctx, sel, *v)
}
func (ec *executionContext) unmarshalOString2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalOString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
return graphql.MarshalString(v)
}
func (ec *executionContext) unmarshalOString2ᚖstring(ctx context.Context, v interface{}) (*string, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalOString2string(ctx, v)
return &res, err
}
func (ec *executionContext) marshalOString2ᚖstring(ctx context.Context, sel ast.SelectionSet, v *string) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.marshalOString2string(ctx, sel, *v)
}
func (ec *executionContext) marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.EnumValue) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Field) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Schema2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v introspection.Schema) graphql.Marshaler {
return ec.___Schema(ctx, sel, &v)
}
func (ec *executionContext) marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v *introspection.Schema) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.___Schema(ctx, sel, v)
}
func (ec *executionContext) marshalO__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
return ec.___Type(ctx, sel, &v)
}
func (ec *executionContext) marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.___Type(ctx, sel, v)
}
// endregion ***************************** type.gotpl *****************************
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen3/go.mod
================================================
module gqlgen3
go 1.13
require (
github.com/99designs/gqlgen v0.11.1
github.com/vektah/gqlparser/v2 v2.0.1
)
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen3/go.sum
================================================
github.com/99designs/gqlgen v0.11.1 h1:QoSL8/AAJ2T3UOeQbdnBR32JcG4pO08+P/g5jdbFkUg=
github.com/99designs/gqlgen v0.11.1/go.mod h1:vjFOyBZ7NwDl+GdSD4PFn7BQn5Fy7ohJwXn7Vk8zz+c=
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
github.com/agnivade/levenshtein v1.0.3 h1:M5ZnqLOoZR8ygVq0FfkXsNOKzMCk0xRiow0R5+5VkQ0=
github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgryski/trifles v0.0.0-20190318185328-a8d75aae118c/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
github.com/go-chi/chi v3.3.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/mux v1.6.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/websocket v1.2.0 h1:VJtLvh6VQym50czpZzx07z/kw9EgAxI3x1ZB8taTMQQ=
github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
github.com/matryer/moq v0.0.0-20200106131100-75d0ddfc0007/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047 h1:zCoDWFD5nrJJVjbXiDZcVhOBSzKn3o9LgRLLMRNuru8=
github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
github.com/shurcooL/vfsgen v0.0.0-20180121065927-ffb13db8def0/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/vektah/dataloaden v0.2.1-0.20190515034641-a19b9a6e7c9e/go.mod h1:/HUdMve7rvxZma+2ZELQeNh88+003LL7Pf/CZ089j8U=
github.com/vektah/gqlparser/v2 v2.0.1 h1:xgl5abVnsd4hkN9rk65OJID9bfcLSMuTaTcZj777q1o=
github.com/vektah/gqlparser/v2 v2.0.1/go.mod h1:SyUiHgLATUR8BiYURfTirrTcGpcE+4XkV2se04Px1Ms=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190515012406-7d7faa4812bd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589 h1:rjUrONFu4kLchcZTfp3/96bR8bW8dIa8uz3cR5n0cgM=
golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
sourcegraph.com/sourcegraph/appdash v0.0.0-20180110180208-2cc67fd64755/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k=
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen3/gqlgen.yml
================================================
# .gqlgen.yml example
#
# Refer to https://gqlgen.com/config/
# for detailed .gqlgen.yml documentation.
schema:
- schema.graphql
exec:
filename: generated.go
model:
filename: models_gen.go
resolver:
filename: resolver.go
type: Resolver
models:
Photo:
model: gqlgen3.Photo
fields:
user:
resolver: true
autobind: []
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen3/models_gen.go
================================================
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
package gqlgen3
type User struct {
ID string `json:"id"`
Name string `json:"name"`
Avatar string `json:"avatar"`
Followed bool `json:"followed"`
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen3/photo.go
================================================
package gqlgen3
import (
// "log"
"strconv"
)
type Photo struct {
ID uint `json:"id"`
UserID uint `json:"-"`
// User *User `json:"user"`
URL string `json:"url"`
Comment string `json:"comment"`
Rating int `json:"rating"`
Liked bool `json:"liked"`
}
func (ph *Photo) Id() string {
// log.Println("call Photo.Id method", ph.ID)
return strconv.Itoa(int(ph.ID))
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen3/resolver.go
================================================
package gqlgen3
//go:generate go run github.com/99designs/gqlgen
import (
"context"
"fmt"
"log"
"strconv"
"time"
) // THIS CODE IS A STARTING POINT ONLY. IT WILL NOT BE UPDATED WITH SCHEMA CHANGES.
type Resolver struct {
PhotosData map[string]*Photo
Users map[uint]*User
}
func (r *Resolver) Mutation() MutationResolver {
return &mutationResolver{r}
}
func (r *Resolver) Photo() PhotoResolver {
return &photoResolver{r}
}
func (r *Resolver) Query() QueryResolver {
return &queryResolver{r}
}
type mutationResolver struct{ *Resolver }
func (r *mutationResolver) RatePhoto(ctx context.Context, id string, direction string) (*Photo, error) {
log.Println("call mutationResolver.RatePhoto method with id", id, direction)
rate := 1
if direction != "up" {
rate = -1
}
ph, ok := r.PhotosData[id]
if !ok {
return nil, fmt.Errorf("no photo %v found", id)
}
ph.Rating += rate
return ph, nil
}
type photoResolver struct{ *Resolver }
func (r *photoResolver) ID(ctx context.Context, obj *Photo) (string, error) {
return obj.Id(), nil
}
func (r *photoResolver) User(ctx context.Context, obj *Photo) (*User, error) {
// return r.Users[obj.UserID], nil
log.Println("call photoResolver.User", obj.UserID)
start := time.Now()
user, err := ctx.Value("userLoaderKey").(*UserLoader).Load(obj.UserID)
log.Println("get photoResolver.User", obj.UserID, "from UserLoader, time ", time.Since(start))
return user, err
}
type queryResolver struct{ *Resolver }
func (r *queryResolver) Timeline(ctx context.Context) ([]*Photo, error) {
log.Println("call queryResolver.Timeline with ctx.userID", ctx.Value("userID"))
items := []*Photo{}
for _, ph := range r.PhotosData {
items = append(items, ph)
}
return items, nil
}
func (r *queryResolver) User(ctx context.Context, userID string) (*User, error) {
log.Println("call queryResolver.User for", userID)
id, _ := strconv.Atoi(userID)
return r.Users[uint(id)], nil
}
func (r *queryResolver) Photos(ctx context.Context, userID string) ([]*Photo, error) {
log.Println("call queryResolver.Photos")
id, _ := strconv.Atoi(userID)
items := []*Photo{}
for _, ph := range r.PhotosData {
if ph.UserID != uint(id) {
continue
}
items = append(items, ph)
}
return items, nil
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen3/schema.graphql
================================================
type User {
id: ID!
name: String!
avatar: String!
followed: Boolean!
}
type Photo {
id: ID!
user: User!
url: String!
comment: String!
rating: Int!
liked: Boolean!
}
type Query {
# query{timeline{id,url,user{id,name}}}
timeline: [Photo!]!
# query{user(userID:"1"){id,url,user{id,name}}}
user(userID: ID!): User!
# query{user(userID:"1"){id,avatar,name}}
photos(userID: ID!): [Photo!]!
}
type Mutation {
# mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
ratePhoto(photoID: ID!, direction: String!): Photo!
}
# go run github.com/99designs/gqlgen init
# go run github.com/99designs/gqlgen -v
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen3/schema_alt.graphql
================================================
directive @goModel(model: String, models: [String!]) on OBJECT
| INPUT_OBJECT
| SCALAR
| ENUM
| INTERFACE
| UNION
directive @goField(forceResolver: Boolean, name: String) on INPUT_FIELD_DEFINITION
| FIELD_DEFINITION
type User {
id: ID!
name: String!
avatar: String
followed: Boolean!
}
type Photo @goModel(model:"coursera/3p/graphql/gqlgen3.Photo") {
id: ID!
user: User! @goField(forceResolver: true)
url: String!
comment: String!
rating: Int!
liked: Boolean!
}
type Query {
# query{timeline{id,url,user{id,name}}}
timeline: [Photo!]!
# query{user(userID:"1"){id,url,user{id,name}}}
user(userID: ID!): User!
# query{user(userID:"1"){id,avatar,name}}
photos(userID: ID!): [Photo!]!
}
type Mutation {
# mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
ratePhoto(photoID: ID!, direction: String!): Photo!
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen3/server/server.go
================================================
package main
import (
"context"
gqlgen "gqlgen3"
"log"
"net/http"
"time"
"github.com/99designs/gqlgen/handler"
)
/*
query{timeline{id,url,user{id,name}}}
query{user(userID:"1"){id,avatar, name}}
mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
*/
var users = map[uint]*gqlgen.User{
1: {
ID: "1",
Name: "rvasily",
Avatar: "https://via.placeholder.com/150",
},
2: {
ID: "2",
Name: "v.romanov",
Avatar: "https://via.placeholder.com/150",
},
}
var photos = map[string]*gqlgen.Photo{
"1": {
ID: 1,
UserID: 1,
URL: "https://via.placeholder.com/300",
Comment: "fromn studio",
Rating: 1,
Liked: true,
},
"2": {
ID: 2,
UserID: 1,
URL: "https://via.placeholder.com/300",
Comment: "cool view",
Rating: 0,
Liked: false,
},
"3": {
ID: 3,
UserID: 2,
URL: "https://via.placeholder.com/300",
Comment: "at work",
Rating: 0,
Liked: false,
},
}
// go run github.com/vektah/dataloaden UserLoader uint *coursera/3p/graphql/gqlgen3.User
func UserLoaderMiddleware(resolver *gqlgen.Resolver, next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
cfg := gqlgen.UserLoaderConfig{
MaxBatch: 100,
Wait: 1 * time.Millisecond,
Fetch: func(ids []uint) ([]*gqlgen.User, []error) {
// имеем доступ до r *http.Request - там context с сессией пользователя
sessionUserID := r.Context().Value("userID").(uint)
log.Printf("UserLoader Request - ids %v for user %v\n", ids, sessionUserID)
log.Println("\n\tSELECT id, name FROM user WHERE id IN (1,2)")
log.Println(`
SELECT id, name, user_follows.follow_id FROM users
LEFT JOIN user_follows ON user_follows.follow_id=photos.user_id AND user_follows.user_id = ?
WHERE users.id IN (1,2)`)
users := make([]*gqlgen.User, len(ids))
for i, id := range ids {
// имеем доступ до resolver *gqlgen.Resolver - там коннет к базе
users[i] = resolver.Users[id]
}
return users, nil
},
}
userLoader := gqlgen.NewUserLoader(cfg)
ctx := context.WithValue(r.Context(), "userLoaderKey", userLoader)
r = r.WithContext(ctx)
next.ServeHTTP(w, r)
})
}
func AuthMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// log.Println("new request")
ctx := context.WithValue(r.Context(), "userID", uint(1))
r = r.WithContext(ctx)
next.ServeHTTP(w, r)
})
}
func main() {
http.Handle("/", handler.Playground("GraphQL playground", "/query"))
resolver := &gqlgen.Resolver{
Users: users,
PhotosData: photos,
}
cfg := gqlgen.Config{
Resolvers: resolver,
}
gqlHandler := handler.GraphQL(gqlgen.NewExecutableSchema(cfg))
handler := UserLoaderMiddleware(resolver, gqlHandler)
handler = AuthMiddleware(handler)
http.Handle("/query", handler)
port := "8080"
log.Printf("connect to http://localhost:%s/ for GraphQL playground", port)
log.Fatal(http.ListenAndServe(":"+port, nil))
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen3/userloader_gen.go
================================================
// Code generated by github.com/vektah/dataloaden, DO NOT EDIT.
package gqlgen3
import (
"sync"
"time"
)
// UserLoaderConfig captures the config to create a new UserLoader
type UserLoaderConfig struct {
// Fetch is a method that provides the data for the loader
Fetch func(keys []uint) ([]*User, []error)
// Wait is how long wait before sending a batch
Wait time.Duration
// MaxBatch will limit the maximum number of keys to send in one batch, 0 = not limit
MaxBatch int
}
// NewUserLoader creates a new UserLoader given a fetch, wait, and maxBatch
func NewUserLoader(config UserLoaderConfig) *UserLoader {
return &UserLoader{
fetch: config.Fetch,
wait: config.Wait,
maxBatch: config.MaxBatch,
}
}
// UserLoader batches and caches requests
type UserLoader struct {
// this method provides the data for the loader
fetch func(keys []uint) ([]*User, []error)
// how long to done before sending a batch
wait time.Duration
// this will limit the maximum number of keys to send in one batch, 0 = no limit
maxBatch int
// INTERNAL
// lazily created cache
cache map[uint]*User
// the current batch. keys will continue to be collected until timeout is hit,
// then everything will be sent to the fetch method and out to the listeners
batch *userLoaderBatch
// mutex to prevent races
mu sync.Mutex
}
type userLoaderBatch struct {
keys []uint
data []*User
error []error
closing bool
done chan struct{}
}
// Load a User by key, batching and caching will be applied automatically
func (l *UserLoader) Load(key uint) (*User, error) {
return l.LoadThunk(key)()
}
// LoadThunk returns a function that when called will block waiting for a User.
// This method should be used if you want one goroutine to make requests to many
// different data loaders without blocking until the thunk is called.
func (l *UserLoader) LoadThunk(key uint) func() (*User, error) {
l.mu.Lock()
if it, ok := l.cache[key]; ok {
l.mu.Unlock()
return func() (*User, error) {
return it, nil
}
}
if l.batch == nil {
l.batch = &userLoaderBatch{done: make(chan struct{})}
}
batch := l.batch
pos := batch.keyIndex(l, key)
l.mu.Unlock()
return func() (*User, error) {
<-batch.done
var data *User
if pos < len(batch.data) {
data = batch.data[pos]
}
var err error
// its convenient to be able to return a single error for everything
if len(batch.error) == 1 {
err = batch.error[0]
} else if batch.error != nil {
err = batch.error[pos]
}
if err == nil {
l.mu.Lock()
l.unsafeSet(key, data)
l.mu.Unlock()
}
return data, err
}
}
// LoadAll fetches many keys at once. It will be broken into appropriate sized
// sub batches depending on how the loader is configured
func (l *UserLoader) LoadAll(keys []uint) ([]*User, []error) {
results := make([]func() (*User, error), len(keys))
for i, key := range keys {
results[i] = l.LoadThunk(key)
}
users := make([]*User, len(keys))
errors := make([]error, len(keys))
for i, thunk := range results {
users[i], errors[i] = thunk()
}
return users, errors
}
// LoadAllThunk returns a function that when called will block waiting for a Users.
// This method should be used if you want one goroutine to make requests to many
// different data loaders without blocking until the thunk is called.
func (l *UserLoader) LoadAllThunk(keys []uint) func() ([]*User, []error) {
results := make([]func() (*User, error), len(keys))
for i, key := range keys {
results[i] = l.LoadThunk(key)
}
return func() ([]*User, []error) {
users := make([]*User, len(keys))
errors := make([]error, len(keys))
for i, thunk := range results {
users[i], errors[i] = thunk()
}
return users, errors
}
}
// Prime the cache with the provided key and value. If the key already exists, no change is made
// and false is returned.
// (To forcefully prime the cache, clear the key first with loader.clear(key).prime(key, value).)
func (l *UserLoader) Prime(key uint, value *User) bool {
l.mu.Lock()
var found bool
if _, found = l.cache[key]; !found {
// make a copy when writing to the cache, its easy to pass a pointer in from a loop var
// and end up with the whole cache pointing to the same value.
cpy := *value
l.unsafeSet(key, &cpy)
}
l.mu.Unlock()
return !found
}
// Clear the value at key from the cache, if it exists
func (l *UserLoader) Clear(key uint) {
l.mu.Lock()
delete(l.cache, key)
l.mu.Unlock()
}
func (l *UserLoader) unsafeSet(key uint, value *User) {
if l.cache == nil {
l.cache = map[uint]*User{}
}
l.cache[key] = value
}
// keyIndex will return the location of the key in the batch, if its not found
// it will add the key to the batch
func (b *userLoaderBatch) keyIndex(l *UserLoader, key uint) int {
for i, existingKey := range b.keys {
if key == existingKey {
return i
}
}
pos := len(b.keys)
b.keys = append(b.keys, key)
if pos == 0 {
go b.startTimer(l)
}
if l.maxBatch != 0 && pos >= l.maxBatch-1 {
if !b.closing {
b.closing = true
l.batch = nil
go b.end(l)
}
}
return pos
}
func (b *userLoaderBatch) startTimer(l *UserLoader) {
time.Sleep(l.wait)
l.mu.Lock()
// we must have hit a batch limit and are already finalizing this batch
if b.closing {
l.mu.Unlock()
return
}
l.batch = nil
l.mu.Unlock()
b.end(l)
}
func (b *userLoaderBatch) end(l *UserLoader) {
b.data, b.error = l.fetch(b.keys)
close(b.done)
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen4/generated.go
================================================
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
package gqlgen4
import (
"bytes"
"context"
"errors"
"strconv"
"sync"
"sync/atomic"
"github.com/99designs/gqlgen/graphql"
"github.com/99designs/gqlgen/graphql/introspection"
gqlparser "github.com/vektah/gqlparser/v2"
"github.com/vektah/gqlparser/v2/ast"
)
// region ************************** generated!.gotpl **************************
// NewExecutableSchema creates an ExecutableSchema from the ResolverRoot interface.
func NewExecutableSchema(cfg Config) graphql.ExecutableSchema {
return &executableSchema{
resolvers: cfg.Resolvers,
directives: cfg.Directives,
complexity: cfg.Complexity,
}
}
type Config struct {
Resolvers ResolverRoot
Directives DirectiveRoot
Complexity ComplexityRoot
}
type ResolverRoot interface {
Mutation() MutationResolver
Photo() PhotoResolver
Query() QueryResolver
User() UserResolver
}
type DirectiveRoot struct {
}
type ComplexityRoot struct {
Mutation struct {
RatePhoto func(childComplexity int, photoID string, direction string) int
}
Photo struct {
Comment func(childComplexity int) int
ID func(childComplexity int) int
Liked func(childComplexity int) int
Rating func(childComplexity int) int
URL func(childComplexity int) int
User func(childComplexity int) int
}
Query struct {
Photos func(childComplexity int, userID string) int
Timeline func(childComplexity int) int
User func(childComplexity int, userID string) int
}
User struct {
Avatar func(childComplexity int) int
Followed func(childComplexity int) int
ID func(childComplexity int) int
Name func(childComplexity int) int
Photos func(childComplexity int, count int) int
}
}
type MutationResolver interface {
RatePhoto(ctx context.Context, photoID string, direction string) (*Photo, error)
}
type PhotoResolver interface {
ID(ctx context.Context, obj *Photo) (string, error)
User(ctx context.Context, obj *Photo) (*User, error)
}
type QueryResolver interface {
Timeline(ctx context.Context) ([]*Photo, error)
User(ctx context.Context, userID string) (*User, error)
Photos(ctx context.Context, userID string) ([]*Photo, error)
}
type UserResolver interface {
Photos(ctx context.Context, obj *User, count int) ([]*Photo, error)
}
type executableSchema struct {
resolvers ResolverRoot
directives DirectiveRoot
complexity ComplexityRoot
}
func (e *executableSchema) Schema() *ast.Schema {
return parsedSchema
}
func (e *executableSchema) Complexity(typeName, field string, childComplexity int, rawArgs map[string]interface{}) (int, bool) {
ec := executionContext{nil, e}
_ = ec
switch typeName + "." + field {
case "Mutation.ratePhoto":
if e.complexity.Mutation.RatePhoto == nil {
break
}
args, err := ec.field_Mutation_ratePhoto_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Mutation.RatePhoto(childComplexity, args["photoID"].(string), args["direction"].(string)), true
case "Photo.comment":
if e.complexity.Photo.Comment == nil {
break
}
return e.complexity.Photo.Comment(childComplexity), true
case "Photo.id":
if e.complexity.Photo.ID == nil {
break
}
return e.complexity.Photo.ID(childComplexity), true
case "Photo.liked":
if e.complexity.Photo.Liked == nil {
break
}
return e.complexity.Photo.Liked(childComplexity), true
case "Photo.rating":
if e.complexity.Photo.Rating == nil {
break
}
return e.complexity.Photo.Rating(childComplexity), true
case "Photo.url":
if e.complexity.Photo.URL == nil {
break
}
return e.complexity.Photo.URL(childComplexity), true
case "Photo.user":
if e.complexity.Photo.User == nil {
break
}
return e.complexity.Photo.User(childComplexity), true
case "Query.photos":
if e.complexity.Query.Photos == nil {
break
}
args, err := ec.field_Query_photos_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Query.Photos(childComplexity, args["userID"].(string)), true
case "Query.timeline":
if e.complexity.Query.Timeline == nil {
break
}
return e.complexity.Query.Timeline(childComplexity), true
case "Query.user":
if e.complexity.Query.User == nil {
break
}
args, err := ec.field_Query_user_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Query.User(childComplexity, args["userID"].(string)), true
case "User.avatar":
if e.complexity.User.Avatar == nil {
break
}
return e.complexity.User.Avatar(childComplexity), true
case "User.followed":
if e.complexity.User.Followed == nil {
break
}
return e.complexity.User.Followed(childComplexity), true
case "User.id":
if e.complexity.User.ID == nil {
break
}
return e.complexity.User.ID(childComplexity), true
case "User.name":
if e.complexity.User.Name == nil {
break
}
return e.complexity.User.Name(childComplexity), true
case "User.photos":
if e.complexity.User.Photos == nil {
break
}
args, err := ec.field_User_photos_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.User.Photos(childComplexity, args["count"].(int)), true
}
return 0, false
}
func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler {
rc := graphql.GetOperationContext(ctx)
ec := executionContext{rc, e}
first := true
switch rc.Operation.Operation {
case ast.Query:
return func(ctx context.Context) *graphql.Response {
if !first {
return nil
}
first = false
data := ec._Query(ctx, rc.Operation.SelectionSet)
var buf bytes.Buffer
data.MarshalGQL(&buf)
return &graphql.Response{
Data: buf.Bytes(),
}
}
case ast.Mutation:
return func(ctx context.Context) *graphql.Response {
if !first {
return nil
}
first = false
data := ec._Mutation(ctx, rc.Operation.SelectionSet)
var buf bytes.Buffer
data.MarshalGQL(&buf)
return &graphql.Response{
Data: buf.Bytes(),
}
}
default:
return graphql.OneShot(graphql.ErrorResponse(ctx, "unsupported GraphQL operation"))
}
}
type executionContext struct {
*graphql.OperationContext
*executableSchema
}
func (ec *executionContext) introspectSchema() (*introspection.Schema, error) {
if ec.DisableIntrospection {
return nil, errors.New("introspection disabled")
}
return introspection.WrapSchema(parsedSchema), nil
}
func (ec *executionContext) introspectType(name string) (*introspection.Type, error) {
if ec.DisableIntrospection {
return nil, errors.New("introspection disabled")
}
return introspection.WrapTypeFromDef(parsedSchema, parsedSchema.Types[name]), nil
}
var sources = []*ast.Source{
&ast.Source{Name: "schema.graphql", Input: `type User {
id: ID!
name: String!
avatar: String!
followed: Boolean!
# subscriptions(count: Int! = 10): [User!]!
# subscribers(count: Int! = 10): [User!]!
"""возвращает фотограции данного пользователя"""
photos(count: Int! = 10): [Photo!]!
}
type Photo {
id: ID!
user: User!
url: String!
comment: String!
rating: Int!
liked: Boolean!
}
type Query {
# query{timeline{id,url,user{id,name}}}
"""возвращает ленту текущего пользователя - фото тех, на кого он подписан"""
timeline: [Photo!]!
# query{user(userID:"1"){id,name,avatar}}
"""возвращает выбранного пользователя"""
user(userID: ID!): User!
# query{user(userID:"1"){id,avatar,name}}
"""возвращает фотограции выбранного пользователя"""
photos(userID: ID!): [Photo!]!
}
type Mutation {
# mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
ratePhoto(photoID: ID!, direction: String!): Photo!
}
# go run github.com/99designs/gqlgen init
# go run github.com/99designs/gqlgen -v
`, BuiltIn: false},
}
var parsedSchema = gqlparser.MustLoadSchema(sources...)
// endregion ************************** generated!.gotpl **************************
// region ***************************** args.gotpl *****************************
func (ec *executionContext) field_Mutation_ratePhoto_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["photoID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["photoID"] = arg0
var arg1 string
if tmp, ok := rawArgs["direction"]; ok {
arg1, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["direction"] = arg1
return args, nil
}
func (ec *executionContext) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["name"]; ok {
arg0, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["name"] = arg0
return args, nil
}
func (ec *executionContext) field_Query_photos_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["userID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["userID"] = arg0
return args, nil
}
func (ec *executionContext) field_Query_user_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["userID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["userID"] = arg0
return args, nil
}
func (ec *executionContext) field_User_photos_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 int
if tmp, ok := rawArgs["count"]; ok {
arg0, err = ec.unmarshalNInt2int(ctx, tmp)
if err != nil {
return nil, err
}
}
args["count"] = arg0
return args, nil
}
func (ec *executionContext) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 bool
if tmp, ok := rawArgs["includeDeprecated"]; ok {
arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
if err != nil {
return nil, err
}
}
args["includeDeprecated"] = arg0
return args, nil
}
func (ec *executionContext) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 bool
if tmp, ok := rawArgs["includeDeprecated"]; ok {
arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
if err != nil {
return nil, err
}
}
args["includeDeprecated"] = arg0
return args, nil
}
// endregion ***************************** args.gotpl *****************************
// region ************************** directives.gotpl **************************
// endregion ************************** directives.gotpl **************************
// region **************************** field.gotpl *****************************
func (ec *executionContext) _Mutation_ratePhoto(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Mutation",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Mutation_ratePhoto_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Mutation().RatePhoto(rctx, args["photoID"].(string), args["direction"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚖgqlgen4ᚐPhoto(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_id(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Photo().ID(rctx, obj)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNID2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_user(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Photo().User(rctx, obj)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*User)
fc.Result = res
return ec.marshalNUser2ᚖgqlgen4ᚐUser(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_url(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.URL, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_comment(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Comment, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_rating(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Rating, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(int)
fc.Result = res
return ec.marshalNInt2int(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_liked(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Liked, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_timeline(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().Timeline(rctx)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚕᚖgqlgen4ᚐPhotoᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_user(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query_user_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().User(rctx, args["userID"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*User)
fc.Result = res
return ec.marshalNUser2ᚖgqlgen4ᚐUser(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_photos(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query_photos_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().Photos(rctx, args["userID"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚕᚖgqlgen4ᚐPhotoᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) _Query___type(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query___type_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.introspectType(args["name"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.introspectSchema()
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Schema)
fc.Result = res
return ec.marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx, field.Selections, res)
}
func (ec *executionContext) _User_id(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.ID, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNID2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_name(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_avatar(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Avatar, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_followed(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Followed, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) _User_photos(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_User_photos_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.User().Photos(rctx, obj, args["count"].(int))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚕᚖgqlgen4ᚐPhotoᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Locations, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]string)
fc.Result = res
return ec.marshalN__DirectiveLocation2ᚕstringᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Args, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
fc.Result = res
return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.IsDeprecated(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DeprecationReason(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Args, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
fc.Result = res
return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Type, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.IsDeprecated(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DeprecationReason(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Type, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DefaultValue, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Types(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.QueryType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.MutationType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.SubscriptionType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Directives(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.Directive)
fc.Result = res
return ec.marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Kind(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalN__TypeKind2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field___Type_fields_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Fields(args["includeDeprecated"].(bool)), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Field)
fc.Result = res
return ec.marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Interfaces(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.PossibleTypes(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field___Type_enumValues_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.EnumValues(args["includeDeprecated"].(bool)), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.EnumValue)
fc.Result = res
return ec.marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.InputFields(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
fc.Result = res
return ec.marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.OfType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
// endregion **************************** field.gotpl *****************************
// region **************************** input.gotpl *****************************
// endregion **************************** input.gotpl *****************************
// region ************************** interface.gotpl ***************************
// endregion ************************** interface.gotpl ***************************
// region **************************** object.gotpl ****************************
var mutationImplementors = []string{"Mutation"}
func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, mutationImplementors)
ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{
Object: "Mutation",
})
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Mutation")
case "ratePhoto":
out.Values[i] = ec._Mutation_ratePhoto(ctx, field)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var photoImplementors = []string{"Photo"}
func (ec *executionContext) _Photo(ctx context.Context, sel ast.SelectionSet, obj *Photo) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, photoImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Photo")
case "id":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Photo_id(ctx, field, obj)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "user":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Photo_user(ctx, field, obj)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "url":
out.Values[i] = ec._Photo_url(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "comment":
out.Values[i] = ec._Photo_comment(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "rating":
out.Values[i] = ec._Photo_rating(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "liked":
out.Values[i] = ec._Photo_liked(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var queryImplementors = []string{"Query"}
func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, queryImplementors)
ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{
Object: "Query",
})
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Query")
case "timeline":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_timeline(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "user":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_user(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "photos":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_photos(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "__type":
out.Values[i] = ec._Query___type(ctx, field)
case "__schema":
out.Values[i] = ec._Query___schema(ctx, field)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var userImplementors = []string{"User"}
func (ec *executionContext) _User(ctx context.Context, sel ast.SelectionSet, obj *User) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, userImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("User")
case "id":
out.Values[i] = ec._User_id(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "name":
out.Values[i] = ec._User_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "avatar":
out.Values[i] = ec._User_avatar(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "followed":
out.Values[i] = ec._User_followed(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "photos":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._User_photos(ctx, field, obj)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __DirectiveImplementors = []string{"__Directive"}
func (ec *executionContext) ___Directive(ctx context.Context, sel ast.SelectionSet, obj *introspection.Directive) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __DirectiveImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Directive")
case "name":
out.Values[i] = ec.___Directive_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___Directive_description(ctx, field, obj)
case "locations":
out.Values[i] = ec.___Directive_locations(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "args":
out.Values[i] = ec.___Directive_args(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __EnumValueImplementors = []string{"__EnumValue"}
func (ec *executionContext) ___EnumValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.EnumValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __EnumValueImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__EnumValue")
case "name":
out.Values[i] = ec.___EnumValue_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___EnumValue_description(ctx, field, obj)
case "isDeprecated":
out.Values[i] = ec.___EnumValue_isDeprecated(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "deprecationReason":
out.Values[i] = ec.___EnumValue_deprecationReason(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __FieldImplementors = []string{"__Field"}
func (ec *executionContext) ___Field(ctx context.Context, sel ast.SelectionSet, obj *introspection.Field) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __FieldImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Field")
case "name":
out.Values[i] = ec.___Field_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___Field_description(ctx, field, obj)
case "args":
out.Values[i] = ec.___Field_args(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "type":
out.Values[i] = ec.___Field_type(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "isDeprecated":
out.Values[i] = ec.___Field_isDeprecated(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "deprecationReason":
out.Values[i] = ec.___Field_deprecationReason(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __InputValueImplementors = []string{"__InputValue"}
func (ec *executionContext) ___InputValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.InputValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __InputValueImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__InputValue")
case "name":
out.Values[i] = ec.___InputValue_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___InputValue_description(ctx, field, obj)
case "type":
out.Values[i] = ec.___InputValue_type(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "defaultValue":
out.Values[i] = ec.___InputValue_defaultValue(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __SchemaImplementors = []string{"__Schema"}
func (ec *executionContext) ___Schema(ctx context.Context, sel ast.SelectionSet, obj *introspection.Schema) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __SchemaImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Schema")
case "types":
out.Values[i] = ec.___Schema_types(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "queryType":
out.Values[i] = ec.___Schema_queryType(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "mutationType":
out.Values[i] = ec.___Schema_mutationType(ctx, field, obj)
case "subscriptionType":
out.Values[i] = ec.___Schema_subscriptionType(ctx, field, obj)
case "directives":
out.Values[i] = ec.___Schema_directives(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __TypeImplementors = []string{"__Type"}
func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, obj *introspection.Type) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __TypeImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Type")
case "kind":
out.Values[i] = ec.___Type_kind(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "name":
out.Values[i] = ec.___Type_name(ctx, field, obj)
case "description":
out.Values[i] = ec.___Type_description(ctx, field, obj)
case "fields":
out.Values[i] = ec.___Type_fields(ctx, field, obj)
case "interfaces":
out.Values[i] = ec.___Type_interfaces(ctx, field, obj)
case "possibleTypes":
out.Values[i] = ec.___Type_possibleTypes(ctx, field, obj)
case "enumValues":
out.Values[i] = ec.___Type_enumValues(ctx, field, obj)
case "inputFields":
out.Values[i] = ec.___Type_inputFields(ctx, field, obj)
case "ofType":
out.Values[i] = ec.___Type_ofType(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
// endregion **************************** object.gotpl ****************************
// region ***************************** type.gotpl *****************************
func (ec *executionContext) unmarshalNBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
return graphql.UnmarshalBoolean(v)
}
func (ec *executionContext) marshalNBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
res := graphql.MarshalBoolean(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNID2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalID(v)
}
func (ec *executionContext) marshalNID2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalID(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNInt2int(ctx context.Context, v interface{}) (int, error) {
return graphql.UnmarshalInt(v)
}
func (ec *executionContext) marshalNInt2int(ctx context.Context, sel ast.SelectionSet, v int) graphql.Marshaler {
res := graphql.MarshalInt(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) marshalNPhoto2gqlgen4ᚐPhoto(ctx context.Context, sel ast.SelectionSet, v Photo) graphql.Marshaler {
return ec._Photo(ctx, sel, &v)
}
func (ec *executionContext) marshalNPhoto2ᚕᚖgqlgen4ᚐPhotoᚄ(ctx context.Context, sel ast.SelectionSet, v []*Photo) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalNPhoto2ᚖgqlgen4ᚐPhoto(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalNPhoto2ᚖgqlgen4ᚐPhoto(ctx context.Context, sel ast.SelectionSet, v *Photo) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec._Photo(ctx, sel, v)
}
func (ec *executionContext) unmarshalNString2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalNString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) marshalNUser2gqlgen4ᚐUser(ctx context.Context, sel ast.SelectionSet, v User) graphql.Marshaler {
return ec._User(ctx, sel, &v)
}
func (ec *executionContext) marshalNUser2ᚖgqlgen4ᚐUser(ctx context.Context, sel ast.SelectionSet, v *User) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec._User(ctx, sel, v)
}
func (ec *executionContext) marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx context.Context, sel ast.SelectionSet, v introspection.Directive) graphql.Marshaler {
return ec.___Directive(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Directive) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) unmarshalN__DirectiveLocation2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalN__DirectiveLocation2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalN__DirectiveLocation2ᚕstringᚄ(ctx context.Context, v interface{}) ([]string, error) {
var vSlice []interface{}
if v != nil {
if tmp1, ok := v.([]interface{}); ok {
vSlice = tmp1
} else {
vSlice = []interface{}{v}
}
}
var err error
res := make([]string, len(vSlice))
for i := range vSlice {
res[i], err = ec.unmarshalN__DirectiveLocation2string(ctx, vSlice[i])
if err != nil {
return nil, err
}
}
return res, nil
}
func (ec *executionContext) marshalN__DirectiveLocation2ᚕstringᚄ(ctx context.Context, sel ast.SelectionSet, v []string) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__DirectiveLocation2string(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx context.Context, sel ast.SelectionSet, v introspection.EnumValue) graphql.Marshaler {
return ec.___EnumValue(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx context.Context, sel ast.SelectionSet, v introspection.Field) graphql.Marshaler {
return ec.___Field(ctx, sel, &v)
}
func (ec *executionContext) marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx context.Context, sel ast.SelectionSet, v introspection.InputValue) graphql.Marshaler {
return ec.___InputValue(ctx, sel, &v)
}
func (ec *executionContext) marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
return ec.___Type(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec.___Type(ctx, sel, v)
}
func (ec *executionContext) unmarshalN__TypeKind2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalN__TypeKind2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalOBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
return graphql.UnmarshalBoolean(v)
}
func (ec *executionContext) marshalOBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
return graphql.MarshalBoolean(v)
}
func (ec *executionContext) unmarshalOBoolean2ᚖbool(ctx context.Context, v interface{}) (*bool, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalOBoolean2bool(ctx, v)
return &res, err
}
func (ec *executionContext) marshalOBoolean2ᚖbool(ctx context.Context, sel ast.SelectionSet, v *bool) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.marshalOBoolean2bool(ctx, sel, *v)
}
func (ec *executionContext) unmarshalOString2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalOString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
return graphql.MarshalString(v)
}
func (ec *executionContext) unmarshalOString2ᚖstring(ctx context.Context, v interface{}) (*string, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalOString2string(ctx, v)
return &res, err
}
func (ec *executionContext) marshalOString2ᚖstring(ctx context.Context, sel ast.SelectionSet, v *string) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.marshalOString2string(ctx, sel, *v)
}
func (ec *executionContext) marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.EnumValue) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Field) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Schema2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v introspection.Schema) graphql.Marshaler {
return ec.___Schema(ctx, sel, &v)
}
func (ec *executionContext) marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v *introspection.Schema) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.___Schema(ctx, sel, v)
}
func (ec *executionContext) marshalO__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
return ec.___Type(ctx, sel, &v)
}
func (ec *executionContext) marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.___Type(ctx, sel, v)
}
// endregion ***************************** type.gotpl *****************************
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen4/go.mod
================================================
module gqlgen4
go 1.13
require (
github.com/99designs/gqlgen v0.11.1
github.com/vektah/gqlparser/v2 v2.0.1
)
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen4/go.sum
================================================
github.com/99designs/gqlgen v0.11.1 h1:QoSL8/AAJ2T3UOeQbdnBR32JcG4pO08+P/g5jdbFkUg=
github.com/99designs/gqlgen v0.11.1/go.mod h1:vjFOyBZ7NwDl+GdSD4PFn7BQn5Fy7ohJwXn7Vk8zz+c=
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
github.com/agnivade/levenshtein v1.0.3 h1:M5ZnqLOoZR8ygVq0FfkXsNOKzMCk0xRiow0R5+5VkQ0=
github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgryski/trifles v0.0.0-20190318185328-a8d75aae118c/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
github.com/go-chi/chi v3.3.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/mux v1.6.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/websocket v1.2.0 h1:VJtLvh6VQym50czpZzx07z/kw9EgAxI3x1ZB8taTMQQ=
github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
github.com/matryer/moq v0.0.0-20200106131100-75d0ddfc0007/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047 h1:zCoDWFD5nrJJVjbXiDZcVhOBSzKn3o9LgRLLMRNuru8=
github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
github.com/shurcooL/vfsgen v0.0.0-20180121065927-ffb13db8def0/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/vektah/dataloaden v0.2.1-0.20190515034641-a19b9a6e7c9e/go.mod h1:/HUdMve7rvxZma+2ZELQeNh88+003LL7Pf/CZ089j8U=
github.com/vektah/gqlparser/v2 v2.0.1 h1:xgl5abVnsd4hkN9rk65OJID9bfcLSMuTaTcZj777q1o=
github.com/vektah/gqlparser/v2 v2.0.1/go.mod h1:SyUiHgLATUR8BiYURfTirrTcGpcE+4XkV2se04Px1Ms=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190515012406-7d7faa4812bd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589 h1:rjUrONFu4kLchcZTfp3/96bR8bW8dIa8uz3cR5n0cgM=
golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
sourcegraph.com/sourcegraph/appdash v0.0.0-20180110180208-2cc67fd64755/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k=
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen4/gqlgen.yml
================================================
schema:
- schema.graphql
exec:
filename: generated.go
model:
filename: models_gen.go
resolver:
filename: resolver.go
type: Resolver
models:
Photo:
model: gqlgen4.Photo
fields:
user:
resolver: true
User:
fields:
photos:
resolver: true
autobind: []
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen4/models_gen.go
================================================
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
package gqlgen4
type User struct {
ID string `json:"id"`
Name string `json:"name"`
Avatar string `json:"avatar"`
Followed bool `json:"followed"`
// возвращает фотограции данного пользователя
Photos []*Photo `json:"photos"`
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen4/photo.go
================================================
package gqlgen4
import (
// "log"
"strconv"
)
type Photo struct {
ID uint `json:"id"`
UserID uint `json:"-"`
// User *User `json:"user"`
URL string `json:"url"`
Comment string `json:"comment"`
Rating int `json:"rating"`
Liked bool `json:"liked"`
}
func (ph *Photo) Id() string {
// log.Println("call Photo.Id method", ph.ID)
return strconv.Itoa(int(ph.ID))
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen4/queries.txt
================================================
query {
user(userID: "1") {
id
name
avatar
}
}
# -----
query {
user(userID: "1") {
id
name
avatar
photos {
id
url
user {
id
name
photos {
id
url
}
}
}
}
}
# -----
query {
user(userID: "1") {
id
name
avatar
photos(count:20) {
id
url
user {
id
name
photos(count:100) {
id
url
}
}
}
}
}
# ----
query getFullUser($userID: ID!, $cnt1:Int!, $cnt2:Int! ) {
user(userID: $userID) {
id
name
avatar
photos(count:$cnt1) {
id
url
user {
id
name
photos(count:$cnt2) {
id
url
}
}
}
}
photos(userID:$userID) {id, url}
}
{
"userID":"1",
"cnt1":10,
"cnt2":20
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen4/resolver.go
================================================
package gqlgen4
//go:generate go run github.com/99designs/gqlgen
import (
"context"
"fmt"
"log"
"strconv"
"time"
) // THIS CODE IS A STARTING POINT ONLY. IT WILL NOT BE UPDATED WITH SCHEMA CHANGES.
type Resolver struct {
PhotosData map[string]*Photo
Users map[uint]*User
}
func (r *Resolver) Mutation() MutationResolver {
return &mutationResolver{r}
}
func (r *Resolver) Photo() PhotoResolver {
return &photoResolver{r}
}
func (r *Resolver) User() UserResolver {
return &userResolver{r}
}
func (r *Resolver) Query() QueryResolver {
return &queryResolver{r}
}
type mutationResolver struct{ *Resolver }
func (r *mutationResolver) RatePhoto(ctx context.Context, id string, direction string) (*Photo, error) {
log.Println("call mutationResolver.RatePhoto method with id", id, direction)
rate := 1
if direction != "up" {
rate = -1
}
ph, ok := r.PhotosData[id]
if !ok {
return nil, fmt.Errorf("no photo %v found", id)
}
ph.Rating += rate
return ph, nil
}
type userResolver struct{ *Resolver }
func (r *userResolver) Photos(ctx context.Context, obj *User, count int) ([]*Photo, error) {
log.Println("call userResolver.Photos with count", count)
id, _ := strconv.Atoi(obj.ID)
items := []*Photo{}
for _, ph := range r.PhotosData {
if ph.UserID != uint(id) {
continue
}
items = append(items, ph)
}
return items, nil
}
type photoResolver struct{ *Resolver }
func (r *photoResolver) ID(ctx context.Context, obj *Photo) (string, error) {
return obj.Id(), nil
}
func (r *photoResolver) User(ctx context.Context, obj *Photo) (*User, error) {
// return r.Users[obj.UserID], nil
log.Println("call photoResolver.User", obj.UserID)
start := time.Now()
user, err := ctx.Value("userLoaderKey").(*UserLoader).Load(obj.UserID)
log.Println("get photoResolver.User", obj.UserID, "from UserLoader, time ", time.Since(start))
return user, err
}
type queryResolver struct{ *Resolver }
func (r *queryResolver) Timeline(ctx context.Context) ([]*Photo, error) {
log.Println("call queryResolver.Timeline with ctx.userID", ctx.Value("userID"))
items := []*Photo{}
for _, ph := range r.PhotosData {
items = append(items, ph)
}
return items, nil
}
func (r *queryResolver) User(ctx context.Context, userID string) (*User, error) {
log.Println("call queryResolver.User for", userID)
id, _ := strconv.Atoi(userID)
return r.Users[uint(id)], nil
}
func (r *queryResolver) Photos(ctx context.Context, userID string) ([]*Photo, error) {
log.Println("call queryResolver.Photos")
id, _ := strconv.Atoi(userID)
items := []*Photo{}
for _, ph := range r.PhotosData {
if ph.UserID != uint(id) {
continue
}
items = append(items, ph)
}
return items, nil
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen4/schema.graphql
================================================
type User {
id: ID!
name: String!
avatar: String!
followed: Boolean!
# subscriptions(count: Int! = 10): [User!]!
# subscribers(count: Int! = 10): [User!]!
"""возвращает фотограции данного пользователя"""
photos(count: Int! = 10): [Photo!]!
}
type Photo {
id: ID!
user: User!
url: String!
comment: String!
rating: Int!
liked: Boolean!
}
type Query {
# query{timeline{id,url,user{id,name}}}
"""возвращает ленту текущего пользователя - фото тех, на кого он подписан"""
timeline: [Photo!]!
# query{user(userID:"1"){id,name,avatar}}
"""возвращает выбранного пользователя"""
user(userID: ID!): User!
# query{user(userID:"1"){id,avatar,name}}
"""возвращает фотограции выбранного пользователя"""
photos(userID: ID!): [Photo!]!
}
type Mutation {
# mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
ratePhoto(photoID: ID!, direction: String!): Photo!
}
# go run github.com/99designs/gqlgen init
# go run github.com/99designs/gqlgen -v
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen4/server/server.go
================================================
package main
import (
"context"
gqlgen "gqlgen4"
"log"
"net/http"
"time"
"github.com/99designs/gqlgen/handler"
)
/*
query{timeline{id,url,user{id,name}}}
query{user(userID:"1"){id,avatar, name}}
mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
*/
var users = map[uint]*gqlgen.User{
1: {
ID: "1",
Name: "rvasily",
Avatar: "https://via.placeholder.com/150",
},
2: {
ID: "2",
Name: "v.romanov",
Avatar: "https://via.placeholder.com/150",
},
}
var photos = map[string]*gqlgen.Photo{
"1": {
ID: 1,
UserID: 1,
URL: "https://via.placeholder.com/300",
Comment: "fromn studio",
Rating: 1,
Liked: true,
},
"2": {
ID: 2,
UserID: 1,
URL: "https://via.placeholder.com/300",
Comment: "cool view",
Rating: 0,
Liked: false,
},
"3": {
ID: 3,
UserID: 2,
URL: "https://via.placeholder.com/300",
Comment: "at work",
Rating: 0,
Liked: false,
},
}
// go run github.com/vektah/dataloaden UserLoader uint *coursera/3p/graphql/gqlgen3.User
func UserLoaderMiddleware(resolver *gqlgen.Resolver, next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
cfg := gqlgen.UserLoaderConfig{
MaxBatch: 100,
Wait: 1 * time.Millisecond,
Fetch: func(ids []uint) ([]*gqlgen.User, []error) {
// имеем доступ до r *http.Request - там context с сессией пользователя
sessionUserID := r.Context().Value("userID").(uint)
log.Printf("UserLoader Request - ids %v for user %v\n", ids, sessionUserID)
users := make([]*gqlgen.User, len(ids))
for i, id := range ids {
// имеем доступ до resolver *gqlgen.Resolver - там коннет к базе
users[i] = resolver.Users[id]
}
return users, nil
},
}
userLoader := gqlgen.NewUserLoader(cfg)
ctx := context.WithValue(r.Context(), "userLoaderKey", userLoader)
r = r.WithContext(ctx)
next.ServeHTTP(w, r)
})
}
func AuthMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// log.Println("new request")
ctx := context.WithValue(r.Context(), "userID", uint(1))
r = r.WithContext(ctx)
next.ServeHTTP(w, r)
})
}
func main() {
http.Handle("/", handler.Playground("GraphQL playground", "/query"))
resolver := &gqlgen.Resolver{
Users: users,
PhotosData: photos,
}
cfg := gqlgen.Config{
Resolvers: resolver,
}
cfg.Complexity.User.Photos = func(childComplexity, count int) int {
return count * childComplexity
}
gqlHandler := handler.GraphQL(
gqlgen.NewExecutableSchema(cfg),
handler.ComplexityLimit(500),
)
handler := UserLoaderMiddleware(resolver, gqlHandler)
handler = AuthMiddleware(handler)
http.Handle("/query", handler)
port := "8080"
log.Printf("connect to http://localhost:%s/ for GraphQL playground", port)
log.Fatal(http.ListenAndServe(":"+port, nil))
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen4/userloader_gen.go
================================================
// Code generated by github.com/vektah/dataloaden, DO NOT EDIT.
package gqlgen4
import (
"sync"
"time"
)
// UserLoaderConfig captures the config to create a new UserLoader
type UserLoaderConfig struct {
// Fetch is a method that provides the data for the loader
Fetch func(keys []uint) ([]*User, []error)
// Wait is how long wait before sending a batch
Wait time.Duration
// MaxBatch will limit the maximum number of keys to send in one batch, 0 = not limit
MaxBatch int
}
// NewUserLoader creates a new UserLoader given a fetch, wait, and maxBatch
func NewUserLoader(config UserLoaderConfig) *UserLoader {
return &UserLoader{
fetch: config.Fetch,
wait: config.Wait,
maxBatch: config.MaxBatch,
}
}
// UserLoader batches and caches requests
type UserLoader struct {
// this method provides the data for the loader
fetch func(keys []uint) ([]*User, []error)
// how long to done before sending a batch
wait time.Duration
// this will limit the maximum number of keys to send in one batch, 0 = no limit
maxBatch int
// INTERNAL
// lazily created cache
cache map[uint]*User
// the current batch. keys will continue to be collected until timeout is hit,
// then everything will be sent to the fetch method and out to the listeners
batch *userLoaderBatch
// mutex to prevent races
mu sync.Mutex
}
type userLoaderBatch struct {
keys []uint
data []*User
error []error
closing bool
done chan struct{}
}
// Load a User by key, batching and caching will be applied automatically
func (l *UserLoader) Load(key uint) (*User, error) {
return l.LoadThunk(key)()
}
// LoadThunk returns a function that when called will block waiting for a User.
// This method should be used if you want one goroutine to make requests to many
// different data loaders without blocking until the thunk is called.
func (l *UserLoader) LoadThunk(key uint) func() (*User, error) {
l.mu.Lock()
if it, ok := l.cache[key]; ok {
l.mu.Unlock()
return func() (*User, error) {
return it, nil
}
}
if l.batch == nil {
l.batch = &userLoaderBatch{done: make(chan struct{})}
}
batch := l.batch
pos := batch.keyIndex(l, key)
l.mu.Unlock()
return func() (*User, error) {
<-batch.done
var data *User
if pos < len(batch.data) {
data = batch.data[pos]
}
var err error
// its convenient to be able to return a single error for everything
if len(batch.error) == 1 {
err = batch.error[0]
} else if batch.error != nil {
err = batch.error[pos]
}
if err == nil {
l.mu.Lock()
l.unsafeSet(key, data)
l.mu.Unlock()
}
return data, err
}
}
// LoadAll fetches many keys at once. It will be broken into appropriate sized
// sub batches depending on how the loader is configured
func (l *UserLoader) LoadAll(keys []uint) ([]*User, []error) {
results := make([]func() (*User, error), len(keys))
for i, key := range keys {
results[i] = l.LoadThunk(key)
}
users := make([]*User, len(keys))
errors := make([]error, len(keys))
for i, thunk := range results {
users[i], errors[i] = thunk()
}
return users, errors
}
// LoadAllThunk returns a function that when called will block waiting for a Users.
// This method should be used if you want one goroutine to make requests to many
// different data loaders without blocking until the thunk is called.
func (l *UserLoader) LoadAllThunk(keys []uint) func() ([]*User, []error) {
results := make([]func() (*User, error), len(keys))
for i, key := range keys {
results[i] = l.LoadThunk(key)
}
return func() ([]*User, []error) {
users := make([]*User, len(keys))
errors := make([]error, len(keys))
for i, thunk := range results {
users[i], errors[i] = thunk()
}
return users, errors
}
}
// Prime the cache with the provided key and value. If the key already exists, no change is made
// and false is returned.
// (To forcefully prime the cache, clear the key first with loader.clear(key).prime(key, value).)
func (l *UserLoader) Prime(key uint, value *User) bool {
l.mu.Lock()
var found bool
if _, found = l.cache[key]; !found {
// make a copy when writing to the cache, its easy to pass a pointer in from a loop var
// and end up with the whole cache pointing to the same value.
cpy := *value
l.unsafeSet(key, &cpy)
}
l.mu.Unlock()
return !found
}
// Clear the value at key from the cache, if it exists
func (l *UserLoader) Clear(key uint) {
l.mu.Lock()
delete(l.cache, key)
l.mu.Unlock()
}
func (l *UserLoader) unsafeSet(key uint, value *User) {
if l.cache == nil {
l.cache = map[uint]*User{}
}
l.cache[key] = value
}
// keyIndex will return the location of the key in the batch, if its not found
// it will add the key to the batch
func (b *userLoaderBatch) keyIndex(l *UserLoader, key uint) int {
for i, existingKey := range b.keys {
if key == existingKey {
return i
}
}
pos := len(b.keys)
b.keys = append(b.keys, key)
if pos == 0 {
go b.startTimer(l)
}
if l.maxBatch != 0 && pos >= l.maxBatch-1 {
if !b.closing {
b.closing = true
l.batch = nil
go b.end(l)
}
}
return pos
}
func (b *userLoaderBatch) startTimer(l *UserLoader) {
time.Sleep(l.wait)
l.mu.Lock()
// we must have hit a batch limit and are already finalizing this batch
if b.closing {
l.mu.Unlock()
return
}
l.batch = nil
l.mu.Unlock()
b.end(l)
}
func (b *userLoaderBatch) end(l *UserLoader) {
b.data, b.error = l.fetch(b.keys)
close(b.done)
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen5/generated.go
================================================
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
package gqlgen5
import (
"bytes"
"context"
"errors"
"strconv"
"sync"
"sync/atomic"
"github.com/99designs/gqlgen/graphql"
"github.com/99designs/gqlgen/graphql/introspection"
gqlparser "github.com/vektah/gqlparser/v2"
"github.com/vektah/gqlparser/v2/ast"
)
// region ************************** generated!.gotpl **************************
// NewExecutableSchema creates an ExecutableSchema from the ResolverRoot interface.
func NewExecutableSchema(cfg Config) graphql.ExecutableSchema {
return &executableSchema{
resolvers: cfg.Resolvers,
directives: cfg.Directives,
complexity: cfg.Complexity,
}
}
type Config struct {
Resolvers ResolverRoot
Directives DirectiveRoot
Complexity ComplexityRoot
}
type ResolverRoot interface {
Mutation() MutationResolver
Photo() PhotoResolver
Query() QueryResolver
User() UserResolver
}
type DirectiveRoot struct {
}
type ComplexityRoot struct {
Mutation struct {
RatePhoto func(childComplexity int, photoID string, direction string) int
UploadPhoto func(childComplexity int, comment string, file graphql.Upload) int
}
Photo struct {
Comment func(childComplexity int) int
ID func(childComplexity int) int
Liked func(childComplexity int) int
Rating func(childComplexity int) int
URL func(childComplexity int) int
User func(childComplexity int) int
}
Query struct {
Photos func(childComplexity int, userID string) int
Timeline func(childComplexity int) int
User func(childComplexity int, userID string) int
}
User struct {
Avatar func(childComplexity int) int
Followed func(childComplexity int) int
ID func(childComplexity int) int
Name func(childComplexity int) int
Photos func(childComplexity int, count int) int
}
}
type MutationResolver interface {
RatePhoto(ctx context.Context, photoID string, direction string) (*Photo, error)
UploadPhoto(ctx context.Context, comment string, file graphql.Upload) (*Photo, error)
}
type PhotoResolver interface {
ID(ctx context.Context, obj *Photo) (string, error)
User(ctx context.Context, obj *Photo) (*User, error)
}
type QueryResolver interface {
Timeline(ctx context.Context) ([]*Photo, error)
User(ctx context.Context, userID string) (*User, error)
Photos(ctx context.Context, userID string) ([]*Photo, error)
}
type UserResolver interface {
Photos(ctx context.Context, obj *User, count int) ([]*Photo, error)
}
type executableSchema struct {
resolvers ResolverRoot
directives DirectiveRoot
complexity ComplexityRoot
}
func (e *executableSchema) Schema() *ast.Schema {
return parsedSchema
}
func (e *executableSchema) Complexity(typeName, field string, childComplexity int, rawArgs map[string]interface{}) (int, bool) {
ec := executionContext{nil, e}
_ = ec
switch typeName + "." + field {
case "Mutation.ratePhoto":
if e.complexity.Mutation.RatePhoto == nil {
break
}
args, err := ec.field_Mutation_ratePhoto_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Mutation.RatePhoto(childComplexity, args["photoID"].(string), args["direction"].(string)), true
case "Mutation.uploadPhoto":
if e.complexity.Mutation.UploadPhoto == nil {
break
}
args, err := ec.field_Mutation_uploadPhoto_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Mutation.UploadPhoto(childComplexity, args["comment"].(string), args["file"].(graphql.Upload)), true
case "Photo.comment":
if e.complexity.Photo.Comment == nil {
break
}
return e.complexity.Photo.Comment(childComplexity), true
case "Photo.id":
if e.complexity.Photo.ID == nil {
break
}
return e.complexity.Photo.ID(childComplexity), true
case "Photo.liked":
if e.complexity.Photo.Liked == nil {
break
}
return e.complexity.Photo.Liked(childComplexity), true
case "Photo.rating":
if e.complexity.Photo.Rating == nil {
break
}
return e.complexity.Photo.Rating(childComplexity), true
case "Photo.url":
if e.complexity.Photo.URL == nil {
break
}
return e.complexity.Photo.URL(childComplexity), true
case "Photo.user":
if e.complexity.Photo.User == nil {
break
}
return e.complexity.Photo.User(childComplexity), true
case "Query.photos":
if e.complexity.Query.Photos == nil {
break
}
args, err := ec.field_Query_photos_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Query.Photos(childComplexity, args["userID"].(string)), true
case "Query.timeline":
if e.complexity.Query.Timeline == nil {
break
}
return e.complexity.Query.Timeline(childComplexity), true
case "Query.user":
if e.complexity.Query.User == nil {
break
}
args, err := ec.field_Query_user_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Query.User(childComplexity, args["userID"].(string)), true
case "User.avatar":
if e.complexity.User.Avatar == nil {
break
}
return e.complexity.User.Avatar(childComplexity), true
case "User.followed":
if e.complexity.User.Followed == nil {
break
}
return e.complexity.User.Followed(childComplexity), true
case "User.id":
if e.complexity.User.ID == nil {
break
}
return e.complexity.User.ID(childComplexity), true
case "User.name":
if e.complexity.User.Name == nil {
break
}
return e.complexity.User.Name(childComplexity), true
case "User.photos":
if e.complexity.User.Photos == nil {
break
}
args, err := ec.field_User_photos_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.User.Photos(childComplexity, args["count"].(int)), true
}
return 0, false
}
func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler {
rc := graphql.GetOperationContext(ctx)
ec := executionContext{rc, e}
first := true
switch rc.Operation.Operation {
case ast.Query:
return func(ctx context.Context) *graphql.Response {
if !first {
return nil
}
first = false
data := ec._Query(ctx, rc.Operation.SelectionSet)
var buf bytes.Buffer
data.MarshalGQL(&buf)
return &graphql.Response{
Data: buf.Bytes(),
}
}
case ast.Mutation:
return func(ctx context.Context) *graphql.Response {
if !first {
return nil
}
first = false
data := ec._Mutation(ctx, rc.Operation.SelectionSet)
var buf bytes.Buffer
data.MarshalGQL(&buf)
return &graphql.Response{
Data: buf.Bytes(),
}
}
default:
return graphql.OneShot(graphql.ErrorResponse(ctx, "unsupported GraphQL operation"))
}
}
type executionContext struct {
*graphql.OperationContext
*executableSchema
}
func (ec *executionContext) introspectSchema() (*introspection.Schema, error) {
if ec.DisableIntrospection {
return nil, errors.New("introspection disabled")
}
return introspection.WrapSchema(parsedSchema), nil
}
func (ec *executionContext) introspectType(name string) (*introspection.Type, error) {
if ec.DisableIntrospection {
return nil, errors.New("introspection disabled")
}
return introspection.WrapTypeFromDef(parsedSchema, parsedSchema.Types[name]), nil
}
var sources = []*ast.Source{
&ast.Source{Name: "schema.graphql", Input: `# gqlgen знает как с этим работать и что парсить это надо через multipart-form
scalar Upload
type User {
id: ID!
name: String!
avatar: String!
followed: Boolean!
# subscriptions(count: Int! = 10): [User!]!
# subscribers(count: Int! = 10): [User!]!
"""возвращает фотограции данного пользователя"""
photos(count: Int! = 10): [Photo!]!
}
type Photo {
id: ID!
user: User!
url: String!
comment: String!
rating: Int!
liked: Boolean!
}
type Query {
# query{timeline{id,url,user{id,name}}}
"""возвращает ленту текущего пользователя - фото тех, на кого он подписан"""
timeline: [Photo!]!
# query{user(userID:"1"){id,name,avatar}}
"""возвращает выбранного пользователя"""
user(userID: ID!): User!
# query{user(userID:"1"){id,avatar,name}}
"""возвращает фотограции выбранного пользователя"""
photos(userID: ID!): [Photo!]!
}
type Mutation {
# mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
ratePhoto(photoID: ID!, direction: String!): Photo!
uploadPhoto(comment: String!, file: Upload!): Photo!
}
# go run github.com/99designs/gqlgen init
# go run github.com/99designs/gqlgen -v
`, BuiltIn: false},
}
var parsedSchema = gqlparser.MustLoadSchema(sources...)
// endregion ************************** generated!.gotpl **************************
// region ***************************** args.gotpl *****************************
func (ec *executionContext) field_Mutation_ratePhoto_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["photoID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["photoID"] = arg0
var arg1 string
if tmp, ok := rawArgs["direction"]; ok {
arg1, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["direction"] = arg1
return args, nil
}
func (ec *executionContext) field_Mutation_uploadPhoto_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["comment"]; ok {
arg0, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["comment"] = arg0
var arg1 graphql.Upload
if tmp, ok := rawArgs["file"]; ok {
arg1, err = ec.unmarshalNUpload2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚐUpload(ctx, tmp)
if err != nil {
return nil, err
}
}
args["file"] = arg1
return args, nil
}
func (ec *executionContext) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["name"]; ok {
arg0, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["name"] = arg0
return args, nil
}
func (ec *executionContext) field_Query_photos_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["userID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["userID"] = arg0
return args, nil
}
func (ec *executionContext) field_Query_user_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["userID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["userID"] = arg0
return args, nil
}
func (ec *executionContext) field_User_photos_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 int
if tmp, ok := rawArgs["count"]; ok {
arg0, err = ec.unmarshalNInt2int(ctx, tmp)
if err != nil {
return nil, err
}
}
args["count"] = arg0
return args, nil
}
func (ec *executionContext) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 bool
if tmp, ok := rawArgs["includeDeprecated"]; ok {
arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
if err != nil {
return nil, err
}
}
args["includeDeprecated"] = arg0
return args, nil
}
func (ec *executionContext) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 bool
if tmp, ok := rawArgs["includeDeprecated"]; ok {
arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
if err != nil {
return nil, err
}
}
args["includeDeprecated"] = arg0
return args, nil
}
// endregion ***************************** args.gotpl *****************************
// region ************************** directives.gotpl **************************
// endregion ************************** directives.gotpl **************************
// region **************************** field.gotpl *****************************
func (ec *executionContext) _Mutation_ratePhoto(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Mutation",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Mutation_ratePhoto_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Mutation().RatePhoto(rctx, args["photoID"].(string), args["direction"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚖgqlgen5ᚐPhoto(ctx, field.Selections, res)
}
func (ec *executionContext) _Mutation_uploadPhoto(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Mutation",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Mutation_uploadPhoto_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Mutation().UploadPhoto(rctx, args["comment"].(string), args["file"].(graphql.Upload))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚖgqlgen5ᚐPhoto(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_id(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Photo().ID(rctx, obj)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNID2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_user(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Photo().User(rctx, obj)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*User)
fc.Result = res
return ec.marshalNUser2ᚖgqlgen5ᚐUser(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_url(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.URL, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_comment(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Comment, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_rating(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Rating, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(int)
fc.Result = res
return ec.marshalNInt2int(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_liked(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Liked, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_timeline(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().Timeline(rctx)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚕᚖgqlgen5ᚐPhotoᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_user(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query_user_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().User(rctx, args["userID"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*User)
fc.Result = res
return ec.marshalNUser2ᚖgqlgen5ᚐUser(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_photos(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query_photos_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().Photos(rctx, args["userID"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚕᚖgqlgen5ᚐPhotoᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) _Query___type(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query___type_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.introspectType(args["name"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.introspectSchema()
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Schema)
fc.Result = res
return ec.marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx, field.Selections, res)
}
func (ec *executionContext) _User_id(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.ID, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNID2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_name(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_avatar(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Avatar, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_followed(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Followed, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) _User_photos(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_User_photos_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.User().Photos(rctx, obj, args["count"].(int))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Photo)
fc.Result = res
return ec.marshalNPhoto2ᚕᚖgqlgen5ᚐPhotoᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Locations, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]string)
fc.Result = res
return ec.marshalN__DirectiveLocation2ᚕstringᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Args, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
fc.Result = res
return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.IsDeprecated(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DeprecationReason(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Args, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
fc.Result = res
return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Type, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.IsDeprecated(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
fc.Result = res
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DeprecationReason(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Type, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DefaultValue, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Types(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.QueryType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.MutationType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.SubscriptionType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Directives(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.Directive)
fc.Result = res
return ec.marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Kind(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !graphql.HasFieldError(ctx, fc) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalN__TypeKind2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
fc.Result = res
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
fc.Result = res
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field___Type_fields_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Fields(args["includeDeprecated"].(bool)), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Field)
fc.Result = res
return ec.marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Interfaces(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.PossibleTypes(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field___Type_enumValues_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
fc.Args = args
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.EnumValues(args["includeDeprecated"].(bool)), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.EnumValue)
fc.Result = res
return ec.marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.InputFields(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
fc.Result = res
return ec.marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
}()
fc := &graphql.FieldContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithFieldContext(ctx, fc)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.OfType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
fc.Result = res
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
// endregion **************************** field.gotpl *****************************
// region **************************** input.gotpl *****************************
// endregion **************************** input.gotpl *****************************
// region ************************** interface.gotpl ***************************
// endregion ************************** interface.gotpl ***************************
// region **************************** object.gotpl ****************************
var mutationImplementors = []string{"Mutation"}
func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, mutationImplementors)
ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{
Object: "Mutation",
})
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Mutation")
case "ratePhoto":
out.Values[i] = ec._Mutation_ratePhoto(ctx, field)
if out.Values[i] == graphql.Null {
invalids++
}
case "uploadPhoto":
out.Values[i] = ec._Mutation_uploadPhoto(ctx, field)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var photoImplementors = []string{"Photo"}
func (ec *executionContext) _Photo(ctx context.Context, sel ast.SelectionSet, obj *Photo) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, photoImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Photo")
case "id":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Photo_id(ctx, field, obj)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "user":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Photo_user(ctx, field, obj)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "url":
out.Values[i] = ec._Photo_url(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "comment":
out.Values[i] = ec._Photo_comment(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "rating":
out.Values[i] = ec._Photo_rating(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "liked":
out.Values[i] = ec._Photo_liked(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var queryImplementors = []string{"Query"}
func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, queryImplementors)
ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{
Object: "Query",
})
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Query")
case "timeline":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_timeline(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "user":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_user(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "photos":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_photos(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "__type":
out.Values[i] = ec._Query___type(ctx, field)
case "__schema":
out.Values[i] = ec._Query___schema(ctx, field)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var userImplementors = []string{"User"}
func (ec *executionContext) _User(ctx context.Context, sel ast.SelectionSet, obj *User) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, userImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("User")
case "id":
out.Values[i] = ec._User_id(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "name":
out.Values[i] = ec._User_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "avatar":
out.Values[i] = ec._User_avatar(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "followed":
out.Values[i] = ec._User_followed(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "photos":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._User_photos(ctx, field, obj)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __DirectiveImplementors = []string{"__Directive"}
func (ec *executionContext) ___Directive(ctx context.Context, sel ast.SelectionSet, obj *introspection.Directive) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __DirectiveImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Directive")
case "name":
out.Values[i] = ec.___Directive_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___Directive_description(ctx, field, obj)
case "locations":
out.Values[i] = ec.___Directive_locations(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "args":
out.Values[i] = ec.___Directive_args(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __EnumValueImplementors = []string{"__EnumValue"}
func (ec *executionContext) ___EnumValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.EnumValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __EnumValueImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__EnumValue")
case "name":
out.Values[i] = ec.___EnumValue_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___EnumValue_description(ctx, field, obj)
case "isDeprecated":
out.Values[i] = ec.___EnumValue_isDeprecated(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "deprecationReason":
out.Values[i] = ec.___EnumValue_deprecationReason(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __FieldImplementors = []string{"__Field"}
func (ec *executionContext) ___Field(ctx context.Context, sel ast.SelectionSet, obj *introspection.Field) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __FieldImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Field")
case "name":
out.Values[i] = ec.___Field_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___Field_description(ctx, field, obj)
case "args":
out.Values[i] = ec.___Field_args(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "type":
out.Values[i] = ec.___Field_type(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "isDeprecated":
out.Values[i] = ec.___Field_isDeprecated(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "deprecationReason":
out.Values[i] = ec.___Field_deprecationReason(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __InputValueImplementors = []string{"__InputValue"}
func (ec *executionContext) ___InputValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.InputValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __InputValueImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__InputValue")
case "name":
out.Values[i] = ec.___InputValue_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___InputValue_description(ctx, field, obj)
case "type":
out.Values[i] = ec.___InputValue_type(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "defaultValue":
out.Values[i] = ec.___InputValue_defaultValue(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __SchemaImplementors = []string{"__Schema"}
func (ec *executionContext) ___Schema(ctx context.Context, sel ast.SelectionSet, obj *introspection.Schema) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __SchemaImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Schema")
case "types":
out.Values[i] = ec.___Schema_types(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "queryType":
out.Values[i] = ec.___Schema_queryType(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "mutationType":
out.Values[i] = ec.___Schema_mutationType(ctx, field, obj)
case "subscriptionType":
out.Values[i] = ec.___Schema_subscriptionType(ctx, field, obj)
case "directives":
out.Values[i] = ec.___Schema_directives(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __TypeImplementors = []string{"__Type"}
func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, obj *introspection.Type) graphql.Marshaler {
fields := graphql.CollectFields(ec.OperationContext, sel, __TypeImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Type")
case "kind":
out.Values[i] = ec.___Type_kind(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "name":
out.Values[i] = ec.___Type_name(ctx, field, obj)
case "description":
out.Values[i] = ec.___Type_description(ctx, field, obj)
case "fields":
out.Values[i] = ec.___Type_fields(ctx, field, obj)
case "interfaces":
out.Values[i] = ec.___Type_interfaces(ctx, field, obj)
case "possibleTypes":
out.Values[i] = ec.___Type_possibleTypes(ctx, field, obj)
case "enumValues":
out.Values[i] = ec.___Type_enumValues(ctx, field, obj)
case "inputFields":
out.Values[i] = ec.___Type_inputFields(ctx, field, obj)
case "ofType":
out.Values[i] = ec.___Type_ofType(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
// endregion **************************** object.gotpl ****************************
// region ***************************** type.gotpl *****************************
func (ec *executionContext) unmarshalNBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
return graphql.UnmarshalBoolean(v)
}
func (ec *executionContext) marshalNBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
res := graphql.MarshalBoolean(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNID2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalID(v)
}
func (ec *executionContext) marshalNID2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalID(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNInt2int(ctx context.Context, v interface{}) (int, error) {
return graphql.UnmarshalInt(v)
}
func (ec *executionContext) marshalNInt2int(ctx context.Context, sel ast.SelectionSet, v int) graphql.Marshaler {
res := graphql.MarshalInt(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) marshalNPhoto2gqlgen5ᚐPhoto(ctx context.Context, sel ast.SelectionSet, v Photo) graphql.Marshaler {
return ec._Photo(ctx, sel, &v)
}
func (ec *executionContext) marshalNPhoto2ᚕᚖgqlgen5ᚐPhotoᚄ(ctx context.Context, sel ast.SelectionSet, v []*Photo) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalNPhoto2ᚖgqlgen5ᚐPhoto(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalNPhoto2ᚖgqlgen5ᚐPhoto(ctx context.Context, sel ast.SelectionSet, v *Photo) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec._Photo(ctx, sel, v)
}
func (ec *executionContext) unmarshalNString2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalNString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNUpload2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚐUpload(ctx context.Context, v interface{}) (graphql.Upload, error) {
return graphql.UnmarshalUpload(v)
}
func (ec *executionContext) marshalNUpload2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚐUpload(ctx context.Context, sel ast.SelectionSet, v graphql.Upload) graphql.Marshaler {
res := graphql.MarshalUpload(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) marshalNUser2gqlgen5ᚐUser(ctx context.Context, sel ast.SelectionSet, v User) graphql.Marshaler {
return ec._User(ctx, sel, &v)
}
func (ec *executionContext) marshalNUser2ᚖgqlgen5ᚐUser(ctx context.Context, sel ast.SelectionSet, v *User) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec._User(ctx, sel, v)
}
func (ec *executionContext) marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx context.Context, sel ast.SelectionSet, v introspection.Directive) graphql.Marshaler {
return ec.___Directive(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Directive) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) unmarshalN__DirectiveLocation2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalN__DirectiveLocation2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalN__DirectiveLocation2ᚕstringᚄ(ctx context.Context, v interface{}) ([]string, error) {
var vSlice []interface{}
if v != nil {
if tmp1, ok := v.([]interface{}); ok {
vSlice = tmp1
} else {
vSlice = []interface{}{v}
}
}
var err error
res := make([]string, len(vSlice))
for i := range vSlice {
res[i], err = ec.unmarshalN__DirectiveLocation2string(ctx, vSlice[i])
if err != nil {
return nil, err
}
}
return res, nil
}
func (ec *executionContext) marshalN__DirectiveLocation2ᚕstringᚄ(ctx context.Context, sel ast.SelectionSet, v []string) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__DirectiveLocation2string(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx context.Context, sel ast.SelectionSet, v introspection.EnumValue) graphql.Marshaler {
return ec.___EnumValue(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx context.Context, sel ast.SelectionSet, v introspection.Field) graphql.Marshaler {
return ec.___Field(ctx, sel, &v)
}
func (ec *executionContext) marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx context.Context, sel ast.SelectionSet, v introspection.InputValue) graphql.Marshaler {
return ec.___InputValue(ctx, sel, &v)
}
func (ec *executionContext) marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
return ec.___Type(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
if v == nil {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec.___Type(ctx, sel, v)
}
func (ec *executionContext) unmarshalN__TypeKind2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalN__TypeKind2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalOBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
return graphql.UnmarshalBoolean(v)
}
func (ec *executionContext) marshalOBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
return graphql.MarshalBoolean(v)
}
func (ec *executionContext) unmarshalOBoolean2ᚖbool(ctx context.Context, v interface{}) (*bool, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalOBoolean2bool(ctx, v)
return &res, err
}
func (ec *executionContext) marshalOBoolean2ᚖbool(ctx context.Context, sel ast.SelectionSet, v *bool) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.marshalOBoolean2bool(ctx, sel, *v)
}
func (ec *executionContext) unmarshalOString2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalOString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
return graphql.MarshalString(v)
}
func (ec *executionContext) unmarshalOString2ᚖstring(ctx context.Context, v interface{}) (*string, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalOString2string(ctx, v)
return &res, err
}
func (ec *executionContext) marshalOString2ᚖstring(ctx context.Context, sel ast.SelectionSet, v *string) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.marshalOString2string(ctx, sel, *v)
}
func (ec *executionContext) marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.EnumValue) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Field) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Schema2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v introspection.Schema) graphql.Marshaler {
return ec.___Schema(ctx, sel, &v)
}
func (ec *executionContext) marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v *introspection.Schema) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.___Schema(ctx, sel, v)
}
func (ec *executionContext) marshalO__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
return ec.___Type(ctx, sel, &v)
}
func (ec *executionContext) marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
fc := &graphql.FieldContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithFieldContext(ctx, fc)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.___Type(ctx, sel, v)
}
// endregion ***************************** type.gotpl *****************************
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen5/go.mod
================================================
module gqlgen5
go 1.13
require (
github.com/99designs/gqlgen v0.11.1
github.com/vektah/gqlparser/v2 v2.0.1
)
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen5/go.sum
================================================
github.com/99designs/gqlgen v0.11.1 h1:QoSL8/AAJ2T3UOeQbdnBR32JcG4pO08+P/g5jdbFkUg=
github.com/99designs/gqlgen v0.11.1/go.mod h1:vjFOyBZ7NwDl+GdSD4PFn7BQn5Fy7ohJwXn7Vk8zz+c=
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
github.com/agnivade/levenshtein v1.0.3 h1:M5ZnqLOoZR8ygVq0FfkXsNOKzMCk0xRiow0R5+5VkQ0=
github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgryski/trifles v0.0.0-20190318185328-a8d75aae118c/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
github.com/go-chi/chi v3.3.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/mux v1.6.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/websocket v1.2.0 h1:VJtLvh6VQym50czpZzx07z/kw9EgAxI3x1ZB8taTMQQ=
github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
github.com/matryer/moq v0.0.0-20200106131100-75d0ddfc0007/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047 h1:zCoDWFD5nrJJVjbXiDZcVhOBSzKn3o9LgRLLMRNuru8=
github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
github.com/shurcooL/vfsgen v0.0.0-20180121065927-ffb13db8def0/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/vektah/dataloaden v0.2.1-0.20190515034641-a19b9a6e7c9e/go.mod h1:/HUdMve7rvxZma+2ZELQeNh88+003LL7Pf/CZ089j8U=
github.com/vektah/gqlparser/v2 v2.0.1 h1:xgl5abVnsd4hkN9rk65OJID9bfcLSMuTaTcZj777q1o=
github.com/vektah/gqlparser/v2 v2.0.1/go.mod h1:SyUiHgLATUR8BiYURfTirrTcGpcE+4XkV2se04Px1Ms=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190515012406-7d7faa4812bd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589 h1:rjUrONFu4kLchcZTfp3/96bR8bW8dIa8uz3cR5n0cgM=
golang.org/x/tools v0.0.0-20200114235610-7ae403b6b589/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
sourcegraph.com/sourcegraph/appdash v0.0.0-20180110180208-2cc67fd64755/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k=
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen5/gqlgen.yml
================================================
schema:
- schema.graphql
exec:
filename: generated.go
model:
filename: models_gen.go
resolver:
filename: resolver.go
type: Resolver
models:
Photo:
model: gqlgen5.Photo
fields:
user:
resolver: true
User:
fields:
photos:
resolver: true
autobind: []
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen5/models_gen.go
================================================
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
package gqlgen5
type User struct {
ID string `json:"id"`
Name string `json:"name"`
Avatar string `json:"avatar"`
Followed bool `json:"followed"`
// возвращает фотограции данного пользователя
Photos []*Photo `json:"photos"`
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen5/photo.go
================================================
package gqlgen5
import (
// "log"
"strconv"
)
type Photo struct {
ID uint `json:"id"`
UserID uint `json:"-"`
// User *User `json:"user"`
URL string `json:"url"`
Comment string `json:"comment"`
Rating int `json:"rating"`
Liked bool `json:"liked"`
}
func (ph *Photo) Id() string {
// log.Println("call Photo.Id method", ph.ID)
return strconv.Itoa(int(ph.ID))
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen5/queries.txt
================================================
query {
user(userID: "1") {
id
name
avatar
}
}
query {
user(userID: "1") {
id
name
avatar
photos {id, url, user{
id
name
photos {
id, url
}
}}
}
}
# -----
query {
user(userID: "1") {
id
name
avatar
photos(count:20) {
id
url
user {
id
name
photos(count:100) {
id
url
}
}
}
}
}
# ----
query($userID: ID!, $cnt1:Int!, $cnt2:Int! ) {
user(userID: $userID) {
id
name
avatar
photos(count:$cnt1) {
id
url
user {
id
name
photos(count:$cnt2) {
id
url
}
}
}
}
photos(userID:$userID) {id, url}
}
{
"userID":"1",
"cnt1":10,
"cnt2":20
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen5/resolver.go
================================================
package gqlgen5
//go:generate go run github.com/99designs/gqlgen -v
import (
"context"
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"strconv"
"time"
"github.com/99designs/gqlgen/graphql"
)
type Resolver struct {
PhotosData map[string]*Photo
Users map[uint]*User
}
func (r *Resolver) Mutation() MutationResolver {
return &mutationResolver{r}
}
func (r *Resolver) Photo() PhotoResolver {
return &photoResolver{r}
}
func (r *Resolver) User() UserResolver {
return &userResolver{r}
}
func (r *Resolver) Query() QueryResolver {
return &queryResolver{r}
}
type mutationResolver struct{ *Resolver }
func (r *mutationResolver) RatePhoto(ctx context.Context, id string, direction string) (*Photo, error) {
log.Println("call mutationResolver.RatePhoto method with id", id, direction)
rate := 1
if direction != "up" {
rate = -1
}
ph, ok := r.PhotosData[id]
if !ok {
return nil, fmt.Errorf("no photo %v found", id)
}
ph.Rating += rate
return ph, nil
}
func (r *mutationResolver) UploadPhoto(ctx context.Context, comment string, file graphql.Upload) (*Photo, error) {
sessionUserID := ctx.Value("userID").(uint)
content, err := ioutil.ReadAll(file.File)
if err != nil {
return nil, err
}
hasher := md5.New()
hasher.Write(content)
log.Printf("incoming file %v, %v bytes, md5 %x", file.Filename, file.Size, hasher.Sum(nil))
ph := &Photo{
ID: 42,
UserID: sessionUserID,
Comment: comment,
URL: "/photos/" + file.Filename,
}
r.PhotosData[strconv.Itoa(int(ph.ID))] = ph
return ph, nil
}
type userResolver struct{ *Resolver }
func (r *userResolver) Photos(ctx context.Context, obj *User, count int) ([]*Photo, error) {
log.Println("call userResolver.Photos with count", count)
id, _ := strconv.Atoi(obj.ID)
items := []*Photo{}
for _, ph := range r.PhotosData {
if ph.UserID != uint(id) {
continue
}
items = append(items, ph)
}
return items, nil
}
type photoResolver struct{ *Resolver }
func (r *photoResolver) ID(ctx context.Context, obj *Photo) (string, error) {
return obj.Id(), nil
}
func (r *photoResolver) User(ctx context.Context, obj *Photo) (*User, error) {
// return r.Users[obj.UserID], nil
log.Println("call photoResolver.User", obj.UserID)
start := time.Now()
user, err := ctx.Value("userLoaderKey").(*UserLoader).Load(obj.UserID)
log.Println("get photoResolver.User", obj.UserID, "from UserLoader, time ", time.Since(start))
return user, err
}
type queryResolver struct{ *Resolver }
func (r *queryResolver) Timeline(ctx context.Context) ([]*Photo, error) {
log.Println("call queryResolver.Timeline with ctx.userID", ctx.Value("userID"))
items := []*Photo{}
for _, ph := range r.PhotosData {
items = append(items, ph)
}
return items, nil
}
func (r *queryResolver) User(ctx context.Context, userID string) (*User, error) {
log.Println("call queryResolver.User for", userID)
id, _ := strconv.Atoi(userID)
return r.Users[uint(id)], nil
}
func (r *queryResolver) Photos(ctx context.Context, userID string) ([]*Photo, error) {
log.Println("call queryResolver.Photos")
id, _ := strconv.Atoi(userID)
items := []*Photo{}
for _, ph := range r.PhotosData {
if ph.UserID != uint(id) {
continue
}
items = append(items, ph)
}
return items, nil
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen5/schema.graphql
================================================
# gqlgen знает как с этим работать и что парсить это надо через multipart-form
scalar Upload
type User {
id: ID!
name: String!
avatar: String!
followed: Boolean!
# subscriptions(count: Int! = 10): [User!]!
# subscribers(count: Int! = 10): [User!]!
"""возвращает фотограции данного пользователя"""
photos(count: Int! = 10): [Photo!]!
}
type Photo {
id: ID!
user: User!
url: String!
comment: String!
rating: Int!
liked: Boolean!
}
type Query {
# query{timeline{id,url,user{id,name}}}
"""возвращает ленту текущего пользователя - фото тех, на кого он подписан"""
timeline: [Photo!]!
# query{user(userID:"1"){id,name,avatar}}
"""возвращает выбранного пользователя"""
user(userID: ID!): User!
# query{user(userID:"1"){id,avatar,name}}
"""возвращает фотограции выбранного пользователя"""
photos(userID: ID!): [Photo!]!
}
type Mutation {
# mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
ratePhoto(photoID: ID!, direction: String!): Photo!
uploadPhoto(comment: String!, file: Upload!): Photo!
}
# go run github.com/99designs/gqlgen init
# go run github.com/99designs/gqlgen -v
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen5/server/server.go
================================================
package main
import (
"context"
gqlgen "gqlgen5"
"log"
"net/http"
"time"
"github.com/99designs/gqlgen/handler"
)
/*
curl localhost:8080/query \
-F operations='{ "query": "mutation($comment: String!, $file: Upload!) { uploadPhoto(comment: $comment, file: $file) { id } }", "variables": { "comment": "building 5 comment", "file": null } }' \
-F map='{ "0": ["variables.file"] }' \
-F 0=@./test_file.txt \
--trace-ascii -
{
query: `
mutation($comment: String!, $file: Upload!) {
uploadPhoto(comment: $comment, file: $file) {
id
}
}
`,
variables: {
comment: "building 5 comment",
file: File // test_file.txt
}
}
*/
var users = map[uint]*gqlgen.User{
1: {
ID: "1",
Name: "rvasily",
Avatar: "https://via.placeholder.com/150",
},
2: {
ID: "2",
Name: "v.romanov",
Avatar: "https://via.placeholder.com/150",
},
}
var photos = map[string]*gqlgen.Photo{
"1": {
ID: 1,
UserID: 1,
URL: "https://via.placeholder.com/300",
Comment: "from studio",
Rating: 1,
Liked: true,
},
// "2": {
// ID: 2,
// UserID: 1,
// URL: "https://via.placeholder.com/300",
// Comment: "cool view",
// Rating: 0,
// Liked: false,
// },
"3": {
ID: 3,
UserID: 2,
URL: "https://via.placeholder.com/300",
Comment: "at work",
Rating: 0,
Liked: false,
},
}
// go run github.com/vektah/dataloaden UserLoader uint *coursera/3p/graphql/gqlgen3.User
func UserLoaderMiddleware(resolver *gqlgen.Resolver, next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
cfg := gqlgen.UserLoaderConfig{
MaxBatch: 100,
Wait: 1 * time.Millisecond,
Fetch: func(ids []uint) ([]*gqlgen.User, []error) {
// имеем доступ до r *http.Request - там context с сессией пользователя
sessionUserID := r.Context().Value("userID").(uint)
log.Printf("UserLoader Request - ids %v for user %v\n", ids, sessionUserID)
log.Printf("request %v\n", r)
log.Printf("ctx %v\n", r.Context())
users := make([]*gqlgen.User, len(ids))
for i, id := range ids {
// имеем доступ до resolver *gqlgen.Resolver - там коннет к базе
users[i] = resolver.Users[id]
}
return users, nil
},
}
userLoader := gqlgen.NewUserLoader(cfg)
ctx := context.WithValue(r.Context(), "userLoaderKey", userLoader)
r = r.WithContext(ctx)
next.ServeHTTP(w, r)
})
}
func AuthMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// log.Println("new request")
ctx := context.WithValue(r.Context(), "userID", uint(1))
r = r.WithContext(ctx)
next.ServeHTTP(w, r)
})
}
func main() {
http.Handle("/", handler.Playground("GraphQL playground", "/query"))
resolver := &gqlgen.Resolver{
Users: users,
PhotosData: photos,
}
cfg := gqlgen.Config{
Resolvers: resolver,
}
cfg.Complexity.User.Photos = func(childComplexity, count int) int {
return count * childComplexity
}
gqlHandler := handler.GraphQL(
gqlgen.NewExecutableSchema(cfg),
handler.ComplexityLimit(500),
)
handler := UserLoaderMiddleware(resolver, gqlHandler)
handler = AuthMiddleware(handler)
http.Handle("/query", handler)
port := "8080"
log.Printf("connect to http://localhost:%s/ for GraphQL playground", port)
log.Fatal(http.ListenAndServe(":"+port, nil))
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen5/test_file.txt
================================================
TEST_FILE_XXXXXXXXXXXXXXXXXX
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen5/userloader_gen.go
================================================
// Code generated by github.com/vektah/dataloaden, DO NOT EDIT.
package gqlgen5
import (
"sync"
"time"
)
// UserLoaderConfig captures the config to create a new UserLoader
type UserLoaderConfig struct {
// Fetch is a method that provides the data for the loader
Fetch func(keys []uint) ([]*User, []error)
// Wait is how long wait before sending a batch
Wait time.Duration
// MaxBatch will limit the maximum number of keys to send in one batch, 0 = not limit
MaxBatch int
}
// NewUserLoader creates a new UserLoader given a fetch, wait, and maxBatch
func NewUserLoader(config UserLoaderConfig) *UserLoader {
return &UserLoader{
fetch: config.Fetch,
wait: config.Wait,
maxBatch: config.MaxBatch,
}
}
// UserLoader batches and caches requests
type UserLoader struct {
// this method provides the data for the loader
fetch func(keys []uint) ([]*User, []error)
// how long to done before sending a batch
wait time.Duration
// this will limit the maximum number of keys to send in one batch, 0 = no limit
maxBatch int
// INTERNAL
// lazily created cache
cache map[uint]*User
// the current batch. keys will continue to be collected until timeout is hit,
// then everything will be sent to the fetch method and out to the listeners
batch *userLoaderBatch
// mutex to prevent races
mu sync.Mutex
}
type userLoaderBatch struct {
keys []uint
data []*User
error []error
closing bool
done chan struct{}
}
// Load a User by key, batching and caching will be applied automatically
func (l *UserLoader) Load(key uint) (*User, error) {
return l.LoadThunk(key)()
}
// LoadThunk returns a function that when called will block waiting for a User.
// This method should be used if you want one goroutine to make requests to many
// different data loaders without blocking until the thunk is called.
func (l *UserLoader) LoadThunk(key uint) func() (*User, error) {
l.mu.Lock()
if it, ok := l.cache[key]; ok {
l.mu.Unlock()
return func() (*User, error) {
return it, nil
}
}
if l.batch == nil {
l.batch = &userLoaderBatch{done: make(chan struct{})}
}
batch := l.batch
pos := batch.keyIndex(l, key)
l.mu.Unlock()
return func() (*User, error) {
<-batch.done
var data *User
if pos < len(batch.data) {
data = batch.data[pos]
}
var err error
// its convenient to be able to return a single error for everything
if len(batch.error) == 1 {
err = batch.error[0]
} else if batch.error != nil {
err = batch.error[pos]
}
if err == nil {
l.mu.Lock()
l.unsafeSet(key, data)
l.mu.Unlock()
}
return data, err
}
}
// LoadAll fetches many keys at once. It will be broken into appropriate sized
// sub batches depending on how the loader is configured
func (l *UserLoader) LoadAll(keys []uint) ([]*User, []error) {
results := make([]func() (*User, error), len(keys))
for i, key := range keys {
results[i] = l.LoadThunk(key)
}
users := make([]*User, len(keys))
errors := make([]error, len(keys))
for i, thunk := range results {
users[i], errors[i] = thunk()
}
return users, errors
}
// LoadAllThunk returns a function that when called will block waiting for a Users.
// This method should be used if you want one goroutine to make requests to many
// different data loaders without blocking until the thunk is called.
func (l *UserLoader) LoadAllThunk(keys []uint) func() ([]*User, []error) {
results := make([]func() (*User, error), len(keys))
for i, key := range keys {
results[i] = l.LoadThunk(key)
}
return func() ([]*User, []error) {
users := make([]*User, len(keys))
errors := make([]error, len(keys))
for i, thunk := range results {
users[i], errors[i] = thunk()
}
return users, errors
}
}
// Prime the cache with the provided key and value. If the key already exists, no change is made
// and false is returned.
// (To forcefully prime the cache, clear the key first with loader.clear(key).prime(key, value).)
func (l *UserLoader) Prime(key uint, value *User) bool {
l.mu.Lock()
var found bool
if _, found = l.cache[key]; !found {
// make a copy when writing to the cache, its easy to pass a pointer in from a loop var
// and end up with the whole cache pointing to the same value.
cpy := *value
l.unsafeSet(key, &cpy)
}
l.mu.Unlock()
return !found
}
// Clear the value at key from the cache, if it exists
func (l *UserLoader) Clear(key uint) {
l.mu.Lock()
delete(l.cache, key)
l.mu.Unlock()
}
func (l *UserLoader) unsafeSet(key uint, value *User) {
if l.cache == nil {
l.cache = map[uint]*User{}
}
l.cache[key] = value
}
// keyIndex will return the location of the key in the batch, if its not found
// it will add the key to the batch
func (b *userLoaderBatch) keyIndex(l *UserLoader, key uint) int {
for i, existingKey := range b.keys {
if key == existingKey {
return i
}
}
pos := len(b.keys)
b.keys = append(b.keys, key)
if pos == 0 {
go b.startTimer(l)
}
if l.maxBatch != 0 && pos >= l.maxBatch-1 {
if !b.closing {
b.closing = true
l.batch = nil
go b.end(l)
}
}
return pos
}
func (b *userLoaderBatch) startTimer(l *UserLoader) {
time.Sleep(l.wait)
l.mu.Lock()
// we must have hit a batch limit and are already finalizing this batch
if b.closing {
l.mu.Unlock()
return
}
l.batch = nil
l.mu.Unlock()
b.end(l)
}
func (b *userLoaderBatch) end(l *UserLoader) {
b.data, b.error = l.fetch(b.keys)
close(b.done)
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen6/generated.go
================================================
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
package gqlgen6
import (
"bytes"
"context"
"errors"
"fmt"
"strconv"
"sync"
"sync/atomic"
"github.com/99designs/gqlgen/graphql"
"github.com/99designs/gqlgen/graphql/introspection"
"github.com/vektah/gqlparser"
"github.com/vektah/gqlparser/ast"
)
// region ************************** generated!.gotpl **************************
// NewExecutableSchema creates an ExecutableSchema from the ResolverRoot interface.
func NewExecutableSchema(cfg Config) graphql.ExecutableSchema {
return &executableSchema{
resolvers: cfg.Resolvers,
directives: cfg.Directives,
complexity: cfg.Complexity,
}
}
type Config struct {
Resolvers ResolverRoot
Directives DirectiveRoot
Complexity ComplexityRoot
}
type ResolverRoot interface {
Mutation() MutationResolver
Photo() PhotoResolver
Query() QueryResolver
User() UserResolver
}
type DirectiveRoot struct {
IsSubscribed func(ctx context.Context, obj interface{}, next graphql.Resolver) (res interface{}, err error)
Validation func(ctx context.Context, obj interface{}, next graphql.Resolver, funcs []string) (res interface{}, err error)
}
type ComplexityRoot struct {
Mutation struct {
RatePhoto func(childComplexity int, photoID string, direction string) int
UploadPhoto func(childComplexity int, comment string, file graphql.Upload) int
}
Photo struct {
Comment func(childComplexity int) int
ID func(childComplexity int) int
Liked func(childComplexity int) int
Rating func(childComplexity int) int
URL func(childComplexity int) int
User func(childComplexity int) int
}
Query struct {
Photos func(childComplexity int, userID string) int
Timeline func(childComplexity int) int
User func(childComplexity int, userID string) int
}
User struct {
Avatar func(childComplexity int) int
Followed func(childComplexity int) int
ID func(childComplexity int) int
Name func(childComplexity int) int
Photos func(childComplexity int, count int) int
}
}
type MutationResolver interface {
RatePhoto(ctx context.Context, photoID string, direction string) (*Photo, error)
UploadPhoto(ctx context.Context, comment string, file graphql.Upload) (*Photo, error)
}
type PhotoResolver interface {
ID(ctx context.Context, obj *Photo) (string, error)
User(ctx context.Context, obj *Photo) (*User, error)
}
type QueryResolver interface {
Timeline(ctx context.Context) ([]*Photo, error)
User(ctx context.Context, userID string) (*User, error)
Photos(ctx context.Context, userID string) ([]*Photo, error)
}
type UserResolver interface {
Photos(ctx context.Context, obj *User, count int) ([]*Photo, error)
}
type executableSchema struct {
resolvers ResolverRoot
directives DirectiveRoot
complexity ComplexityRoot
}
func (e *executableSchema) Schema() *ast.Schema {
return parsedSchema
}
func (e *executableSchema) Complexity(typeName, field string, childComplexity int, rawArgs map[string]interface{}) (int, bool) {
ec := executionContext{nil, e}
_ = ec
switch typeName + "." + field {
case "Mutation.ratePhoto":
if e.complexity.Mutation.RatePhoto == nil {
break
}
args, err := ec.field_Mutation_ratePhoto_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Mutation.RatePhoto(childComplexity, args["photoID"].(string), args["direction"].(string)), true
case "Mutation.uploadPhoto":
if e.complexity.Mutation.UploadPhoto == nil {
break
}
args, err := ec.field_Mutation_uploadPhoto_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Mutation.UploadPhoto(childComplexity, args["comment"].(string), args["file"].(graphql.Upload)), true
case "Photo.comment":
if e.complexity.Photo.Comment == nil {
break
}
return e.complexity.Photo.Comment(childComplexity), true
case "Photo.id":
if e.complexity.Photo.ID == nil {
break
}
return e.complexity.Photo.ID(childComplexity), true
case "Photo.liked":
if e.complexity.Photo.Liked == nil {
break
}
return e.complexity.Photo.Liked(childComplexity), true
case "Photo.rating":
if e.complexity.Photo.Rating == nil {
break
}
return e.complexity.Photo.Rating(childComplexity), true
case "Photo.url":
if e.complexity.Photo.URL == nil {
break
}
return e.complexity.Photo.URL(childComplexity), true
case "Photo.user":
if e.complexity.Photo.User == nil {
break
}
return e.complexity.Photo.User(childComplexity), true
case "Query.photos":
if e.complexity.Query.Photos == nil {
break
}
args, err := ec.field_Query_photos_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Query.Photos(childComplexity, args["userID"].(string)), true
case "Query.timeline":
if e.complexity.Query.Timeline == nil {
break
}
return e.complexity.Query.Timeline(childComplexity), true
case "Query.user":
if e.complexity.Query.User == nil {
break
}
args, err := ec.field_Query_user_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.Query.User(childComplexity, args["userID"].(string)), true
case "User.avatar":
if e.complexity.User.Avatar == nil {
break
}
return e.complexity.User.Avatar(childComplexity), true
case "User.followed":
if e.complexity.User.Followed == nil {
break
}
return e.complexity.User.Followed(childComplexity), true
case "User.id":
if e.complexity.User.ID == nil {
break
}
return e.complexity.User.ID(childComplexity), true
case "User.name":
if e.complexity.User.Name == nil {
break
}
return e.complexity.User.Name(childComplexity), true
case "User.photos":
if e.complexity.User.Photos == nil {
break
}
args, err := ec.field_User_photos_args(context.TODO(), rawArgs)
if err != nil {
return 0, false
}
return e.complexity.User.Photos(childComplexity, args["count"].(int)), true
}
return 0, false
}
func (e *executableSchema) Query(ctx context.Context, op *ast.OperationDefinition) *graphql.Response {
ec := executionContext{graphql.GetRequestContext(ctx), e}
buf := ec.RequestMiddleware(ctx, func(ctx context.Context) []byte {
data := ec._Query(ctx, op.SelectionSet)
var buf bytes.Buffer
data.MarshalGQL(&buf)
return buf.Bytes()
})
return &graphql.Response{
Data: buf,
Errors: ec.Errors,
Extensions: ec.Extensions,
}
}
func (e *executableSchema) Mutation(ctx context.Context, op *ast.OperationDefinition) *graphql.Response {
ec := executionContext{graphql.GetRequestContext(ctx), e}
buf := ec.RequestMiddleware(ctx, func(ctx context.Context) []byte {
data := ec._Mutation(ctx, op.SelectionSet)
var buf bytes.Buffer
data.MarshalGQL(&buf)
return buf.Bytes()
})
return &graphql.Response{
Data: buf,
Errors: ec.Errors,
Extensions: ec.Extensions,
}
}
func (e *executableSchema) Subscription(ctx context.Context, op *ast.OperationDefinition) func() *graphql.Response {
return graphql.OneShot(graphql.ErrorResponse(ctx, "subscriptions are not supported"))
}
type executionContext struct {
*graphql.RequestContext
*executableSchema
}
func (ec *executionContext) introspectSchema() (*introspection.Schema, error) {
if ec.DisableIntrospection {
return nil, errors.New("introspection disabled")
}
return introspection.WrapSchema(parsedSchema), nil
}
func (ec *executionContext) introspectType(name string) (*introspection.Type, error) {
if ec.DisableIntrospection {
return nil, errors.New("introspection disabled")
}
return introspection.WrapTypeFromDef(parsedSchema, parsedSchema.Types[name]), nil
}
var parsedSchema = gqlparser.MustLoadSchema(
&ast.Source{Name: "schema.graphql", Input: `# gqlgen знает как с этим работать и что парсить это надо через multipart-form
scalar Upload
directive @isSubscribed on FIELD_DEFINITION
directive @validation(funcs: [String!]!) on ARGUMENT_DEFINITION
type User {
id: ID!
name: String!
avatar: String!
followed: Boolean!
# subscriptions(count: Int! = 10): [User!]!
# subscribers(count: Int! = 10): [User!]!
"""возвращает фотограции данного пользователя"""
photos(count: Int! = 10): [Photo!]! @isSubscribed
}
type Photo {
id: ID!
user: User!
url: String!
comment: String!
rating: Int!
liked: Boolean!
}
type Query {
# query{timeline{id,url,user{id,name}}}
"""возвращает ленту текущего пользователя - фото тех, на кого он подписан"""
timeline: [Photo!]!
# query{user(userID:"1"){id,name,avatar}}
"""возвращает выбранного пользователя"""
user(userID: ID!): User!
# query{user(userID:"1"){id,avatar,name}}
"""возвращает фотограции выбранного пользователя"""
photos(userID: ID!): [Photo!]!
}
type Mutation {
# mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
ratePhoto(photoID: ID!, direction: String!): Photo!
uploadPhoto(
comment: String! @validation(funcs: ["noBadUrls", "noMatureLanguage"])
file: Upload!
): Photo!
}
# go run github.com/99designs/gqlgen init
# go run github.com/99designs/gqlgen -v
`},
)
// endregion ************************** generated!.gotpl **************************
// region ***************************** args.gotpl *****************************
func (ec *executionContext) dir_validation_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 []string
if tmp, ok := rawArgs["funcs"]; ok {
arg0, err = ec.unmarshalNString2ᚕstringᚄ(ctx, tmp)
if err != nil {
return nil, err
}
}
args["funcs"] = arg0
return args, nil
}
func (ec *executionContext) field_Mutation_ratePhoto_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["photoID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["photoID"] = arg0
var arg1 string
if tmp, ok := rawArgs["direction"]; ok {
arg1, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["direction"] = arg1
return args, nil
}
func (ec *executionContext) field_Mutation_uploadPhoto_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["comment"]; ok {
directive0 := func(ctx context.Context) (interface{}, error) { return ec.unmarshalNString2string(ctx, tmp) }
directive1 := func(ctx context.Context) (interface{}, error) {
funcs, err := ec.unmarshalNString2ᚕstringᚄ(ctx, []interface{}{"noBadUrls", "noMatureLanguage"})
if err != nil {
return nil, err
}
if ec.directives.Validation == nil {
return nil, errors.New("directive validation is not implemented")
}
return ec.directives.Validation(ctx, rawArgs, directive0, funcs)
}
tmp, err = directive1(ctx)
if err != nil {
return nil, err
}
if data, ok := tmp.(string); ok {
arg0 = data
} else {
return nil, fmt.Errorf(`unexpected type %T from directive, should be string`, tmp)
}
}
args["comment"] = arg0
var arg1 graphql.Upload
if tmp, ok := rawArgs["file"]; ok {
arg1, err = ec.unmarshalNUpload2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚐUpload(ctx, tmp)
if err != nil {
return nil, err
}
}
args["file"] = arg1
return args, nil
}
func (ec *executionContext) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["name"]; ok {
arg0, err = ec.unmarshalNString2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["name"] = arg0
return args, nil
}
func (ec *executionContext) field_Query_photos_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["userID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["userID"] = arg0
return args, nil
}
func (ec *executionContext) field_Query_user_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 string
if tmp, ok := rawArgs["userID"]; ok {
arg0, err = ec.unmarshalNID2string(ctx, tmp)
if err != nil {
return nil, err
}
}
args["userID"] = arg0
return args, nil
}
func (ec *executionContext) field_User_photos_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 int
if tmp, ok := rawArgs["count"]; ok {
arg0, err = ec.unmarshalNInt2int(ctx, tmp)
if err != nil {
return nil, err
}
}
args["count"] = arg0
return args, nil
}
func (ec *executionContext) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 bool
if tmp, ok := rawArgs["includeDeprecated"]; ok {
arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
if err != nil {
return nil, err
}
}
args["includeDeprecated"] = arg0
return args, nil
}
func (ec *executionContext) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) {
var err error
args := map[string]interface{}{}
var arg0 bool
if tmp, ok := rawArgs["includeDeprecated"]; ok {
arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp)
if err != nil {
return nil, err
}
}
args["includeDeprecated"] = arg0
return args, nil
}
// endregion ***************************** args.gotpl *****************************
// region ************************** directives.gotpl **************************
// endregion ************************** directives.gotpl **************************
// region **************************** field.gotpl *****************************
func (ec *executionContext) _Mutation_ratePhoto(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Mutation",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Mutation_ratePhoto_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
rctx.Args = args
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Mutation().RatePhoto(rctx, args["photoID"].(string), args["direction"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*Photo)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNPhoto2ᚖgqlgen6ᚐPhoto(ctx, field.Selections, res)
}
func (ec *executionContext) _Mutation_uploadPhoto(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Mutation",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Mutation_uploadPhoto_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
rctx.Args = args
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Mutation().UploadPhoto(rctx, args["comment"].(string), args["file"].(graphql.Upload))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*Photo)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNPhoto2ᚖgqlgen6ᚐPhoto(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_id(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Photo().ID(rctx, obj)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNID2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_user(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Photo().User(rctx, obj)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*User)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNUser2ᚖgqlgen6ᚐUser(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_url(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.URL, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_comment(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Comment, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_rating(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Rating, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(int)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNInt2int(ctx, field.Selections, res)
}
func (ec *executionContext) _Photo_liked(ctx context.Context, field graphql.CollectedField, obj *Photo) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Photo",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Liked, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_timeline(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().Timeline(rctx)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Photo)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNPhoto2ᚕᚖgqlgen6ᚐPhotoᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_user(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query_user_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
rctx.Args = args
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().User(rctx, args["userID"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*User)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNUser2ᚖgqlgen6ᚐUser(ctx, field.Selections, res)
}
func (ec *executionContext) _Query_photos(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query_photos_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
rctx.Args = args
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.Query().Photos(rctx, args["userID"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Photo)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNPhoto2ᚕᚖgqlgen6ᚐPhotoᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) _Query___type(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_Query___type_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
rctx.Args = args
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.introspectType(args["name"].(string))
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "Query",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.introspectSchema()
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Schema)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx, field.Selections, res)
}
func (ec *executionContext) _User_id(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.ID, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNID2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_name(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_avatar(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Avatar, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) _User_followed(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Followed, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) _User_photos(ctx context.Context, field graphql.CollectedField, obj *User) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "User",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field_User_photos_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
rctx.Args = args
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
directive0 := func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return ec.resolvers.User().Photos(rctx, obj, args["count"].(int))
}
directive1 := func(ctx context.Context) (interface{}, error) {
if ec.directives.IsSubscribed == nil {
return nil, errors.New("directive isSubscribed is not implemented")
}
return ec.directives.IsSubscribed(ctx, obj, directive0)
}
tmp, err := directive1(rctx)
if err != nil {
return nil, err
}
if tmp == nil {
return nil, nil
}
if data, ok := tmp.([]*Photo); ok {
return data, nil
}
return nil, fmt.Errorf(`unexpected type %T from directive, should be []*gqlgen6.Photo`, tmp)
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]*Photo)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNPhoto2ᚕᚖgqlgen6ᚐPhotoᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Locations, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__DirectiveLocation2ᚕstringᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Directive",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Args, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.IsDeprecated(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__EnumValue",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DeprecationReason(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Args, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Type, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.IsDeprecated(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(bool)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
}
func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Field",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DeprecationReason(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalNString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Type, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__InputValue",
Field: field,
Args: nil,
IsMethod: false,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.DefaultValue, nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Types(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.QueryType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(*introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.MutationType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.SubscriptionType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Schema",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Directives(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.([]introspection.Directive)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Kind(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
if !ec.HasError(rctx) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalN__TypeKind2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Name(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Description(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(string)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalOString2string(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field___Type_fields_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
rctx.Args = args
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Fields(args["includeDeprecated"].(bool)), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Field)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.Interfaces(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.PossibleTypes(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
rawArgs := field.ArgumentMap(ec.Variables)
args, err := ec.field___Type_enumValues_args(ctx, rawArgs)
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
rctx.Args = args
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.EnumValues(args["includeDeprecated"].(bool)), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.EnumValue)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.InputFields(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.([]introspection.InputValue)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, field.Selections, res)
}
func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) {
ctx = ec.Tracer.StartFieldExecution(ctx, field)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = graphql.Null
}
ec.Tracer.EndFieldExecution(ctx)
}()
rctx := &graphql.ResolverContext{
Object: "__Type",
Field: field,
Args: nil,
IsMethod: true,
}
ctx = graphql.WithResolverContext(ctx, rctx)
ctx = ec.Tracer.StartFieldResolverExecution(ctx, rctx)
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
ctx = rctx // use context from middleware stack in children
return obj.OfType(), nil
})
if err != nil {
ec.Error(ctx, err)
return graphql.Null
}
if resTmp == nil {
return graphql.Null
}
res := resTmp.(*introspection.Type)
rctx.Result = res
ctx = ec.Tracer.StartFieldChildExecution(ctx)
return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, field.Selections, res)
}
// endregion **************************** field.gotpl *****************************
// region **************************** input.gotpl *****************************
// endregion **************************** input.gotpl *****************************
// region ************************** interface.gotpl ***************************
// endregion ************************** interface.gotpl ***************************
// region **************************** object.gotpl ****************************
var mutationImplementors = []string{"Mutation"}
func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, mutationImplementors)
ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{
Object: "Mutation",
})
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Mutation")
case "ratePhoto":
out.Values[i] = ec._Mutation_ratePhoto(ctx, field)
if out.Values[i] == graphql.Null {
invalids++
}
case "uploadPhoto":
out.Values[i] = ec._Mutation_uploadPhoto(ctx, field)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var photoImplementors = []string{"Photo"}
func (ec *executionContext) _Photo(ctx context.Context, sel ast.SelectionSet, obj *Photo) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, photoImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Photo")
case "id":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Photo_id(ctx, field, obj)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "user":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Photo_user(ctx, field, obj)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "url":
out.Values[i] = ec._Photo_url(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "comment":
out.Values[i] = ec._Photo_comment(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "rating":
out.Values[i] = ec._Photo_rating(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "liked":
out.Values[i] = ec._Photo_liked(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var queryImplementors = []string{"Query"}
func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, queryImplementors)
ctx = graphql.WithResolverContext(ctx, &graphql.ResolverContext{
Object: "Query",
})
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("Query")
case "timeline":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_timeline(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "user":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_user(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "photos":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._Query_photos(ctx, field)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
case "__type":
out.Values[i] = ec._Query___type(ctx, field)
case "__schema":
out.Values[i] = ec._Query___schema(ctx, field)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var userImplementors = []string{"User"}
func (ec *executionContext) _User(ctx context.Context, sel ast.SelectionSet, obj *User) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, userImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("User")
case "id":
out.Values[i] = ec._User_id(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "name":
out.Values[i] = ec._User_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "avatar":
out.Values[i] = ec._User_avatar(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "followed":
out.Values[i] = ec._User_followed(ctx, field, obj)
if out.Values[i] == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
case "photos":
field := field
out.Concurrently(i, func() (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
}
}()
res = ec._User_photos(ctx, field, obj)
if res == graphql.Null {
atomic.AddUint32(&invalids, 1)
}
return res
})
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __DirectiveImplementors = []string{"__Directive"}
func (ec *executionContext) ___Directive(ctx context.Context, sel ast.SelectionSet, obj *introspection.Directive) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, __DirectiveImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Directive")
case "name":
out.Values[i] = ec.___Directive_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___Directive_description(ctx, field, obj)
case "locations":
out.Values[i] = ec.___Directive_locations(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "args":
out.Values[i] = ec.___Directive_args(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __EnumValueImplementors = []string{"__EnumValue"}
func (ec *executionContext) ___EnumValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.EnumValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, __EnumValueImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__EnumValue")
case "name":
out.Values[i] = ec.___EnumValue_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___EnumValue_description(ctx, field, obj)
case "isDeprecated":
out.Values[i] = ec.___EnumValue_isDeprecated(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "deprecationReason":
out.Values[i] = ec.___EnumValue_deprecationReason(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __FieldImplementors = []string{"__Field"}
func (ec *executionContext) ___Field(ctx context.Context, sel ast.SelectionSet, obj *introspection.Field) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, __FieldImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Field")
case "name":
out.Values[i] = ec.___Field_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___Field_description(ctx, field, obj)
case "args":
out.Values[i] = ec.___Field_args(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "type":
out.Values[i] = ec.___Field_type(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "isDeprecated":
out.Values[i] = ec.___Field_isDeprecated(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "deprecationReason":
out.Values[i] = ec.___Field_deprecationReason(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __InputValueImplementors = []string{"__InputValue"}
func (ec *executionContext) ___InputValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.InputValue) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, __InputValueImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__InputValue")
case "name":
out.Values[i] = ec.___InputValue_name(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "description":
out.Values[i] = ec.___InputValue_description(ctx, field, obj)
case "type":
out.Values[i] = ec.___InputValue_type(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "defaultValue":
out.Values[i] = ec.___InputValue_defaultValue(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __SchemaImplementors = []string{"__Schema"}
func (ec *executionContext) ___Schema(ctx context.Context, sel ast.SelectionSet, obj *introspection.Schema) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, __SchemaImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Schema")
case "types":
out.Values[i] = ec.___Schema_types(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "queryType":
out.Values[i] = ec.___Schema_queryType(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "mutationType":
out.Values[i] = ec.___Schema_mutationType(ctx, field, obj)
case "subscriptionType":
out.Values[i] = ec.___Schema_subscriptionType(ctx, field, obj)
case "directives":
out.Values[i] = ec.___Schema_directives(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
var __TypeImplementors = []string{"__Type"}
func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, obj *introspection.Type) graphql.Marshaler {
fields := graphql.CollectFields(ec.RequestContext, sel, __TypeImplementors)
out := graphql.NewFieldSet(fields)
var invalids uint32
for i, field := range fields {
switch field.Name {
case "__typename":
out.Values[i] = graphql.MarshalString("__Type")
case "kind":
out.Values[i] = ec.___Type_kind(ctx, field, obj)
if out.Values[i] == graphql.Null {
invalids++
}
case "name":
out.Values[i] = ec.___Type_name(ctx, field, obj)
case "description":
out.Values[i] = ec.___Type_description(ctx, field, obj)
case "fields":
out.Values[i] = ec.___Type_fields(ctx, field, obj)
case "interfaces":
out.Values[i] = ec.___Type_interfaces(ctx, field, obj)
case "possibleTypes":
out.Values[i] = ec.___Type_possibleTypes(ctx, field, obj)
case "enumValues":
out.Values[i] = ec.___Type_enumValues(ctx, field, obj)
case "inputFields":
out.Values[i] = ec.___Type_inputFields(ctx, field, obj)
case "ofType":
out.Values[i] = ec.___Type_ofType(ctx, field, obj)
default:
panic("unknown field " + strconv.Quote(field.Name))
}
}
out.Dispatch()
if invalids > 0 {
return graphql.Null
}
return out
}
// endregion **************************** object.gotpl ****************************
// region ***************************** type.gotpl *****************************
func (ec *executionContext) unmarshalNBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
return graphql.UnmarshalBoolean(v)
}
func (ec *executionContext) marshalNBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
res := graphql.MarshalBoolean(v)
if res == graphql.Null {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNID2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalID(v)
}
func (ec *executionContext) marshalNID2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalID(v)
if res == graphql.Null {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNInt2int(ctx context.Context, v interface{}) (int, error) {
return graphql.UnmarshalInt(v)
}
func (ec *executionContext) marshalNInt2int(ctx context.Context, sel ast.SelectionSet, v int) graphql.Marshaler {
res := graphql.MarshalInt(v)
if res == graphql.Null {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) marshalNPhoto2gqlgen6ᚐPhoto(ctx context.Context, sel ast.SelectionSet, v Photo) graphql.Marshaler {
return ec._Photo(ctx, sel, &v)
}
func (ec *executionContext) marshalNPhoto2ᚕᚖgqlgen6ᚐPhotoᚄ(ctx context.Context, sel ast.SelectionSet, v []*Photo) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalNPhoto2ᚖgqlgen6ᚐPhoto(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalNPhoto2ᚖgqlgen6ᚐPhoto(ctx context.Context, sel ast.SelectionSet, v *Photo) graphql.Marshaler {
if v == nil {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec._Photo(ctx, sel, v)
}
func (ec *executionContext) unmarshalNString2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalNString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalNString2ᚕstringᚄ(ctx context.Context, v interface{}) ([]string, error) {
var vSlice []interface{}
if v != nil {
if tmp1, ok := v.([]interface{}); ok {
vSlice = tmp1
} else {
vSlice = []interface{}{v}
}
}
var err error
res := make([]string, len(vSlice))
for i := range vSlice {
res[i], err = ec.unmarshalNString2string(ctx, vSlice[i])
if err != nil {
return nil, err
}
}
return res, nil
}
func (ec *executionContext) marshalNString2ᚕstringᚄ(ctx context.Context, sel ast.SelectionSet, v []string) graphql.Marshaler {
ret := make(graphql.Array, len(v))
for i := range v {
ret[i] = ec.marshalNString2string(ctx, sel, v[i])
}
return ret
}
func (ec *executionContext) unmarshalNUpload2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚐUpload(ctx context.Context, v interface{}) (graphql.Upload, error) {
return graphql.UnmarshalUpload(v)
}
func (ec *executionContext) marshalNUpload2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚐUpload(ctx context.Context, sel ast.SelectionSet, v graphql.Upload) graphql.Marshaler {
res := graphql.MarshalUpload(v)
if res == graphql.Null {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) marshalNUser2gqlgen6ᚐUser(ctx context.Context, sel ast.SelectionSet, v User) graphql.Marshaler {
return ec._User(ctx, sel, &v)
}
func (ec *executionContext) marshalNUser2ᚖgqlgen6ᚐUser(ctx context.Context, sel ast.SelectionSet, v *User) graphql.Marshaler {
if v == nil {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec._User(ctx, sel, v)
}
func (ec *executionContext) marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx context.Context, sel ast.SelectionSet, v introspection.Directive) graphql.Marshaler {
return ec.___Directive(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Directive) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Directive2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirective(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) unmarshalN__DirectiveLocation2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalN__DirectiveLocation2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalN__DirectiveLocation2ᚕstringᚄ(ctx context.Context, v interface{}) ([]string, error) {
var vSlice []interface{}
if v != nil {
if tmp1, ok := v.([]interface{}); ok {
vSlice = tmp1
} else {
vSlice = []interface{}{v}
}
}
var err error
res := make([]string, len(vSlice))
for i := range vSlice {
res[i], err = ec.unmarshalN__DirectiveLocation2string(ctx, vSlice[i])
if err != nil {
return nil, err
}
}
return res, nil
}
func (ec *executionContext) marshalN__DirectiveLocation2ᚕstringᚄ(ctx context.Context, sel ast.SelectionSet, v []string) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__DirectiveLocation2string(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx context.Context, sel ast.SelectionSet, v introspection.EnumValue) graphql.Marshaler {
return ec.___EnumValue(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx context.Context, sel ast.SelectionSet, v introspection.Field) graphql.Marshaler {
return ec.___Field(ctx, sel, &v)
}
func (ec *executionContext) marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx context.Context, sel ast.SelectionSet, v introspection.InputValue) graphql.Marshaler {
return ec.___InputValue(ctx, sel, &v)
}
func (ec *executionContext) marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
return ec.___Type(ctx, sel, &v)
}
func (ec *executionContext) marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
if v == nil {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
return graphql.Null
}
return ec.___Type(ctx, sel, v)
}
func (ec *executionContext) unmarshalN__TypeKind2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalN__TypeKind2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
res := graphql.MarshalString(v)
if res == graphql.Null {
if !ec.HasError(graphql.GetResolverContext(ctx)) {
ec.Errorf(ctx, "must not be null")
}
}
return res
}
func (ec *executionContext) unmarshalOBoolean2bool(ctx context.Context, v interface{}) (bool, error) {
return graphql.UnmarshalBoolean(v)
}
func (ec *executionContext) marshalOBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler {
return graphql.MarshalBoolean(v)
}
func (ec *executionContext) unmarshalOBoolean2ᚖbool(ctx context.Context, v interface{}) (*bool, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalOBoolean2bool(ctx, v)
return &res, err
}
func (ec *executionContext) marshalOBoolean2ᚖbool(ctx context.Context, sel ast.SelectionSet, v *bool) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.marshalOBoolean2bool(ctx, sel, *v)
}
func (ec *executionContext) unmarshalOString2string(ctx context.Context, v interface{}) (string, error) {
return graphql.UnmarshalString(v)
}
func (ec *executionContext) marshalOString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler {
return graphql.MarshalString(v)
}
func (ec *executionContext) unmarshalOString2ᚖstring(ctx context.Context, v interface{}) (*string, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalOString2string(ctx, v)
return &res, err
}
func (ec *executionContext) marshalOString2ᚖstring(ctx context.Context, sel ast.SelectionSet, v *string) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.marshalOString2string(ctx, sel, *v)
}
func (ec *executionContext) marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.EnumValue) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__EnumValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Field) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Field2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐField(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__InputValue2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValue(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Schema2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v introspection.Schema) graphql.Marshaler {
return ec.___Schema(ctx, sel, &v)
}
func (ec *executionContext) marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v *introspection.Schema) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.___Schema(ctx, sel, v)
}
func (ec *executionContext) marshalO__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler {
return ec.___Type(ctx, sel, &v)
}
func (ec *executionContext) marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler {
if v == nil {
return graphql.Null
}
ret := make(graphql.Array, len(v))
var wg sync.WaitGroup
isLen1 := len(v) == 1
if !isLen1 {
wg.Add(len(v))
}
for i := range v {
i := i
rctx := &graphql.ResolverContext{
Index: &i,
Result: &v[i],
}
ctx := graphql.WithResolverContext(ctx, rctx)
f := func(i int) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
ret = nil
}
}()
if !isLen1 {
defer wg.Done()
}
ret[i] = ec.marshalN__Type2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, sel, v[i])
}
if isLen1 {
f(i)
} else {
go f(i)
}
}
wg.Wait()
return ret
}
func (ec *executionContext) marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler {
if v == nil {
return graphql.Null
}
return ec.___Type(ctx, sel, v)
}
// endregion ***************************** type.gotpl *****************************
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen6/go.mod
================================================
module gqlgen6
go 1.13
require (
github.com/99designs/gqlgen v0.10.2
github.com/vektah/gqlparser v1.2.0
)
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen6/go.sum
================================================
github.com/99designs/gqlgen v0.10.2 h1:FfjCqIWejHDJeLpQTI0neoZo5vDO3sdo5oNCucet3A0=
github.com/99designs/gqlgen v0.10.2/go.mod h1:aDB7oabSAyZ4kUHLEySsLxnWrBy3lA0A2gWKU+qoHwI=
github.com/agnivade/levenshtein v1.0.1 h1:3oJU7J3FGFmyhn8KHjmVaZCN5hxTr7GxgRue+sxIXdQ=
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-chi/chi v3.3.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/mux v1.6.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/websocket v1.2.0 h1:VJtLvh6VQym50czpZzx07z/kw9EgAxI3x1ZB8taTMQQ=
github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/mitchellh/mapstructure v0.0.0-20180203102830-a4e142e9c047/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
github.com/shurcooL/vfsgen v0.0.0-20180121065927-ffb13db8def0/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/vektah/dataloaden v0.2.1-0.20190515034641-a19b9a6e7c9e/go.mod h1:/HUdMve7rvxZma+2ZELQeNh88+003LL7Pf/CZ089j8U=
github.com/vektah/gqlparser v1.2.0 h1:ntkSCX7F5ZJKl+HIVnmLaO269MruasVpNiMOjX9kgo0=
github.com/vektah/gqlparser v1.2.0/go.mod h1:bkVf0FX+Stjg/MHnm8mEyubuaArhNEqfQhF+OTiAL74=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190515012406-7d7faa4812bd h1:oMEQDWVXVNpceQoVd1JN3CQ7LYJJzs5qWqZIUcxXHHw=
golang.org/x/tools v0.0.0-20190515012406-7d7faa4812bd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
sourcegraph.com/sourcegraph/appdash v0.0.0-20180110180208-2cc67fd64755/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k=
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen6/gqlgen.yml
================================================
schema:
- schema.graphql
exec:
filename: generated.go
model:
filename: models_gen.go
resolver:
filename: resolver.go
type: Resolver
models:
Photo:
model: gqlgen6.Photo
fields:
user:
resolver: true
User:
fields:
photos:
resolver: true
autobind: []
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen6/models_gen.go
================================================
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
package gqlgen6
type User struct {
ID string `json:"id"`
Name string `json:"name"`
Avatar string `json:"avatar"`
Followed bool `json:"followed"`
// возвращает фотограции данного пользователя
Photos []*Photo `json:"photos"`
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen6/photo.go
================================================
package gqlgen6
import (
// "log"
"strconv"
)
type Photo struct {
ID uint `json:"id"`
UserID uint `json:"-"`
// User *User `json:"user"`
URL string `json:"url"`
Comment string `json:"comment"`
Rating int `json:"rating"`
Liked bool `json:"liked"`
}
func (ph *Photo) Id() string {
// log.Println("call Photo.Id method", ph.ID)
return strconv.Itoa(int(ph.ID))
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen6/queries.txt
================================================
query {
user(userID: "1") {
id
name
avatar
}
}
query {
user(userID: "1") {
id
name
avatar
photos {id, url, user{
id
name
photos {
id, url
}
}}
}
}
# -----
query {
user(userID: "1") {
id
name
avatar
photos(count:20) {
id
url
user {
id
name
photos(count:100) {
id
url
}
}
}
}
}
# ----
query($userID: ID!, $cnt1:Int!, $cnt2:Int! ) {
user(userID: $userID) {
id
name
avatar
photos(count:$cnt1) {
id
url
user {
id
name
photos(count:$cnt2) {
id
url
}
}
}
}
photos(userID:$userID) {id, url}
}
{
"userID":"1",
"cnt1":10,
"cnt2":20
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen6/resolver.go
================================================
package gqlgen6
//go:generate go run github.com/99designs/gqlgen -v
import (
"context"
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"strconv"
"time"
"github.com/99designs/gqlgen/graphql"
)
type Resolver struct {
PhotosData map[string]*Photo
Users map[uint]*User
}
func (r *Resolver) Mutation() MutationResolver {
return &mutationResolver{r}
}
func (r *Resolver) Photo() PhotoResolver {
return &photoResolver{r}
}
func (r *Resolver) User() UserResolver {
return &userResolver{r}
}
func (r *Resolver) Query() QueryResolver {
return &queryResolver{r}
}
type mutationResolver struct{ *Resolver }
func (r *mutationResolver) RatePhoto(ctx context.Context, id string, direction string) (*Photo, error) {
log.Println("call mutationResolver.RatePhoto method with id", id, direction)
rate := 1
if direction != "up" {
rate = -1
}
ph, ok := r.PhotosData[id]
if !ok {
return nil, fmt.Errorf("no photo %v found", id)
}
ph.Rating += rate
return ph, nil
}
func (r *mutationResolver) UploadPhoto(ctx context.Context, comment string, file graphql.Upload) (*Photo, error) {
sessionUserID := ctx.Value("userID").(uint)
content, err := ioutil.ReadAll(file.File)
if err != nil {
return nil, err
}
hasher := md5.New()
hasher.Write(content)
log.Printf("incoming file %v, %v bytes, md5 %x", file.Filename, file.Size, hasher.Sum(nil))
ph := &Photo{
ID: 42,
UserID: sessionUserID,
Comment: comment,
URL: "/photos/" + file.Filename,
}
r.PhotosData[strconv.Itoa(int(ph.ID))] = ph
return ph, nil
}
type userResolver struct{ *Resolver }
func (r *userResolver) Photos(ctx context.Context, obj *User, count int) ([]*Photo, error) {
log.Println("call userResolver.Photos with count", count)
id, _ := strconv.Atoi(obj.ID)
items := []*Photo{}
for _, ph := range r.PhotosData {
if ph.UserID != uint(id) {
continue
}
items = append(items, ph)
}
return items, nil
}
type photoResolver struct{ *Resolver }
func (r *photoResolver) ID(ctx context.Context, obj *Photo) (string, error) {
return obj.Id(), nil
}
func (r *photoResolver) User(ctx context.Context, obj *Photo) (*User, error) {
// return r.Users[obj.UserID], nil
log.Println("call photoResolver.User", obj.UserID)
start := time.Now()
user, err := ctx.Value("userLoaderKey").(*UserLoader).Load(obj.UserID)
log.Println("get photoResolver.User", obj.UserID, "from UserLoader, time ", time.Since(start))
return user, err
}
type queryResolver struct{ *Resolver }
func (r *queryResolver) Timeline(ctx context.Context) ([]*Photo, error) {
log.Println("call queryResolver.Timeline with ctx.userID", ctx.Value("userID"))
items := []*Photo{}
for _, ph := range r.PhotosData {
items = append(items, ph)
}
return items, nil
}
func (r *queryResolver) User(ctx context.Context, userID string) (*User, error) {
log.Println("call queryResolver.User for", userID)
id, _ := strconv.Atoi(userID)
return r.Users[uint(id)], nil
}
func (r *queryResolver) Photos(ctx context.Context, userID string) ([]*Photo, error) {
log.Println("call queryResolver.Photos")
id, _ := strconv.Atoi(userID)
items := []*Photo{}
for _, ph := range r.PhotosData {
if ph.UserID != uint(id) {
continue
}
items = append(items, ph)
}
return items, nil
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen6/schema.graphql
================================================
# gqlgen знает как с этим работать и что парсить это надо через multipart-form
scalar Upload
directive @isSubscribed on FIELD_DEFINITION
directive @validation(funcs: [String!]!) on ARGUMENT_DEFINITION
type User {
id: ID!
name: String!
avatar: String!
followed: Boolean!
# subscriptions(count: Int! = 10): [User!]!
# subscribers(count: Int! = 10): [User!]!
"""возвращает фотограции данного пользователя"""
photos(count: Int! = 10): [Photo!]! @isSubscribed
}
type Photo {
id: ID!
user: User!
url: String!
comment: String!
rating: Int!
liked: Boolean!
}
type Query {
# query{timeline{id,url,user{id,name}}}
"""возвращает ленту текущего пользователя - фото тех, на кого он подписан"""
timeline: [Photo!]!
# query{user(userID:"1"){id,name,avatar}}
"""возвращает выбранного пользователя"""
user(userID: ID!): User!
# query{user(userID:"1"){id,avatar,name}}
"""возвращает фотограции выбранного пользователя"""
photos(userID: ID!): [Photo!]!
}
type Mutation {
# mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
ratePhoto(photoID: ID!, direction: String!): Photo!
uploadPhoto(
comment: String! @validation(funcs: ["noBadUrls", "noMatureLanguage"])
file: Upload!
): Photo!
}
# go run github.com/99designs/gqlgen init
# go run github.com/99designs/gqlgen -v
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen6/server/server.go
================================================
package main
import (
"context"
"fmt"
gqlgen "gqlgen6"
"log"
"net/http"
"strconv"
"strings"
"time"
"github.com/99designs/gqlgen/graphql"
"github.com/99designs/gqlgen/handler"
)
/*
# ok
curl localhost:8080/query \
-F operations='{ "query": "mutation($comment: String!, $file: Upload!) { uploadPhoto(comment: $comment, file: $file) { id } }", "variables": { "comment": "cool photo", "file": null } }' \
-F map='{ "0": ["variables.file"] }' \
-F 0=@./test_file.txt \
--trace-ascii -
# mature language
curl localhost:8080/query \
-F operations='{ "query": "mutation($comment: String!, $file: Upload!) { uploadPhoto(comment: $comment, file: $file) { id } }", "variables": { "comment": "блин!", "file": null } }' \
-F map='{ "0": ["variables.file"] }' \
-F 0=@./test_file.txt
# bad url
curl localhost:8080/query \
-F operations='{ "query": "mutation($comment: String!, $file: Upload!) { uploadPhoto(comment: $comment, file: $file) { id } }", "variables": { "comment": "https://evil.com", "file": null } }' \
-F map='{ "0": ["variables.file"] }' \
-F 0=@./test_file.txt
query($userID: ID!){
user(userID: $userID) {
id
avatar
name
photos {
id
}
}
}
*/
var users = map[uint]*gqlgen.User{
1: {
ID: "1",
Name: "rvasily",
Avatar: "https://via.placeholder.com/150",
},
2: {
ID: "2",
Name: "v.romanov",
Avatar: "https://via.placeholder.com/150",
},
3: {
ID: "3",
Name: "romanov.vasily",
Avatar: "https://via.placeholder.com/150",
},
}
var photos = map[string]*gqlgen.Photo{
"1": {
ID: 1,
UserID: 1,
URL: "https://via.placeholder.com/300",
Comment: "from studio",
Rating: 1,
Liked: true,
},
"2": {
ID: 2,
UserID: 1,
URL: "https://via.placeholder.com/300",
Comment: "cool view",
Rating: 0,
Liked: false,
},
"3": {
ID: 3,
UserID: 2,
URL: "https://via.placeholder.com/300",
Comment: "at work",
Rating: 0,
Liked: false,
},
"4": {
ID: 3,
UserID: 3,
URL: "https://via.placeholder.com/300",
Comment: "at work",
Rating: 0,
Liked: false,
},
}
// go run github.com/vektah/dataloaden UserLoader uint *coursera/3p/graphql/gqlgen3.User
func UserLoaderMiddleware(resolver *gqlgen.Resolver, next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
cfg := gqlgen.UserLoaderConfig{
MaxBatch: 100,
Wait: 1 * time.Millisecond,
Fetch: func(ids []uint) ([]*gqlgen.User, []error) {
// имеем доступ до r *http.Request - там context с сессией пользователя
sessionUserID := r.Context().Value("userID").(uint)
log.Printf("UserLoader Request - ids %v for user %v\n", ids, sessionUserID)
log.Printf("request %v\n", r)
log.Printf("ctx %v\n", r.Context())
users := make([]*gqlgen.User, len(ids))
for i, id := range ids {
// имеем доступ до resolver *gqlgen.Resolver - там коннет к базе
users[i] = resolver.Users[id]
}
return users, nil
},
}
userLoader := gqlgen.NewUserLoader(cfg)
ctx := context.WithValue(r.Context(), "userLoaderKey", userLoader)
r = r.WithContext(ctx)
next.ServeHTTP(w, r)
})
}
func AuthMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// log.Println("new request")
ctx := context.WithValue(r.Context(), "userID", uint(1))
r = r.WithContext(ctx)
next.ServeHTTP(w, r)
})
}
// 1-й подписан на 2-го
var followedData = map[uint]map[uint]struct{}{
1: map[uint]struct{}{
2: struct{}{},
},
}
func IsFollowed(userID, currUserID uint) bool {
currSubs, ok := followedData[currUserID]
if !ok {
return false
}
_, isFollowed := currSubs[userID]
return isFollowed
}
func CheckIsSubscribed(ctx context.Context, obj interface{}, next graphql.Resolver) (interface{}, error) {
log.Printf("CheckIsSubscribed %T %#V", obj, obj)
sessionUserID := ctx.Value("userID").(uint)
switch obj.(type) {
case *gqlgen.User:
u := obj.(*gqlgen.User)
userID, _ := strconv.Atoi(u.ID)
if uint(userID) == sessionUserID {
break
}
if !IsFollowed(uint(userID), sessionUserID) {
return nil, fmt.Errorf("availible only for followers")
}
}
return next(ctx)
}
func noBadUrls(vars map[string]interface{}) bool {
val, ok := vars["comment"].(string)
if !ok {
return false
}
return !strings.Contains(val, "evil.com")
}
func noMatureLanguage(vars map[string]interface{}) bool {
val, ok := vars["comment"].(string)
if !ok {
return false
}
return !strings.Contains(val, "блин")
}
var validators = map[string]func(map[string]interface{}) bool{
"noBadUrls": noBadUrls,
"noMatureLanguage": noMatureLanguage,
}
func CheckValidation(ctx context.Context, obj interface{}, next graphql.Resolver, callbacks []string) (interface{}, error) {
log.Printf("CheckValidation %T %#V %#v", obj, obj, callbacks)
for _, cbName := range callbacks {
cb, ok := validators[cbName]
if !ok {
return nil, fmt.Errorf("cant find callback %s", cbName)
}
vars, ok := obj.(map[string]interface{})
if !ok {
return nil, fmt.Errorf("unexpected args type: %T", obj)
}
if !cb(vars) {
return nil, fmt.Errorf("check %s failed", cbName)
}
}
return next(ctx)
}
func main() {
http.Handle("/", handler.Playground("GraphQL playground", "/query"))
resolver := &gqlgen.Resolver{
Users: users,
PhotosData: photos,
}
cfg := gqlgen.Config{
Resolvers: resolver,
}
cfg.Complexity.User.Photos = func(childComplexity, count int) int {
return count * childComplexity
}
cfg.Directives.IsSubscribed = CheckIsSubscribed
cfg.Directives.Validation = CheckValidation
gqlHandler := handler.GraphQL(
gqlgen.NewExecutableSchema(cfg),
handler.ComplexityLimit(500),
)
handler := UserLoaderMiddleware(resolver, gqlHandler)
handler = AuthMiddleware(handler)
http.Handle("/query", handler)
port := "8080"
log.Printf("connect to http://localhost:%s/ for GraphQL playground", port)
log.Fatal(http.ListenAndServe(":"+port, nil))
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen6/test_file.txt
================================================
TEST_FILE_XXXXXXXXXXXXXXXXXX
================================================
FILE: 4-api/3_graphql/gqlgen_full/gqlgen6/userloader_gen.go
================================================
// Code generated by github.com/vektah/dataloaden, DO NOT EDIT.
package gqlgen6
import (
"sync"
"time"
)
// UserLoaderConfig captures the config to create a new UserLoader
type UserLoaderConfig struct {
// Fetch is a method that provides the data for the loader
Fetch func(keys []uint) ([]*User, []error)
// Wait is how long wait before sending a batch
Wait time.Duration
// MaxBatch will limit the maximum number of keys to send in one batch, 0 = not limit
MaxBatch int
}
// NewUserLoader creates a new UserLoader given a fetch, wait, and maxBatch
func NewUserLoader(config UserLoaderConfig) *UserLoader {
return &UserLoader{
fetch: config.Fetch,
wait: config.Wait,
maxBatch: config.MaxBatch,
}
}
// UserLoader batches and caches requests
type UserLoader struct {
// this method provides the data for the loader
fetch func(keys []uint) ([]*User, []error)
// how long to done before sending a batch
wait time.Duration
// this will limit the maximum number of keys to send in one batch, 0 = no limit
maxBatch int
// INTERNAL
// lazily created cache
cache map[uint]*User
// the current batch. keys will continue to be collected until timeout is hit,
// then everything will be sent to the fetch method and out to the listeners
batch *userLoaderBatch
// mutex to prevent races
mu sync.Mutex
}
type userLoaderBatch struct {
keys []uint
data []*User
error []error
closing bool
done chan struct{}
}
// Load a User by key, batching and caching will be applied automatically
func (l *UserLoader) Load(key uint) (*User, error) {
return l.LoadThunk(key)()
}
// LoadThunk returns a function that when called will block waiting for a User.
// This method should be used if you want one goroutine to make requests to many
// different data loaders without blocking until the thunk is called.
func (l *UserLoader) LoadThunk(key uint) func() (*User, error) {
l.mu.Lock()
if it, ok := l.cache[key]; ok {
l.mu.Unlock()
return func() (*User, error) {
return it, nil
}
}
if l.batch == nil {
l.batch = &userLoaderBatch{done: make(chan struct{})}
}
batch := l.batch
pos := batch.keyIndex(l, key)
l.mu.Unlock()
return func() (*User, error) {
<-batch.done
var data *User
if pos < len(batch.data) {
data = batch.data[pos]
}
var err error
// its convenient to be able to return a single error for everything
if len(batch.error) == 1 {
err = batch.error[0]
} else if batch.error != nil {
err = batch.error[pos]
}
if err == nil {
l.mu.Lock()
l.unsafeSet(key, data)
l.mu.Unlock()
}
return data, err
}
}
// LoadAll fetches many keys at once. It will be broken into appropriate sized
// sub batches depending on how the loader is configured
func (l *UserLoader) LoadAll(keys []uint) ([]*User, []error) {
results := make([]func() (*User, error), len(keys))
for i, key := range keys {
results[i] = l.LoadThunk(key)
}
users := make([]*User, len(keys))
errors := make([]error, len(keys))
for i, thunk := range results {
users[i], errors[i] = thunk()
}
return users, errors
}
// LoadAllThunk returns a function that when called will block waiting for a Users.
// This method should be used if you want one goroutine to make requests to many
// different data loaders without blocking until the thunk is called.
func (l *UserLoader) LoadAllThunk(keys []uint) func() ([]*User, []error) {
results := make([]func() (*User, error), len(keys))
for i, key := range keys {
results[i] = l.LoadThunk(key)
}
return func() ([]*User, []error) {
users := make([]*User, len(keys))
errors := make([]error, len(keys))
for i, thunk := range results {
users[i], errors[i] = thunk()
}
return users, errors
}
}
// Prime the cache with the provided key and value. If the key already exists, no change is made
// and false is returned.
// (To forcefully prime the cache, clear the key first with loader.clear(key).prime(key, value).)
func (l *UserLoader) Prime(key uint, value *User) bool {
l.mu.Lock()
var found bool
if _, found = l.cache[key]; !found {
// make a copy when writing to the cache, its easy to pass a pointer in from a loop var
// and end up with the whole cache pointing to the same value.
cpy := *value
l.unsafeSet(key, &cpy)
}
l.mu.Unlock()
return !found
}
// Clear the value at key from the cache, if it exists
func (l *UserLoader) Clear(key uint) {
l.mu.Lock()
delete(l.cache, key)
l.mu.Unlock()
}
func (l *UserLoader) unsafeSet(key uint, value *User) {
if l.cache == nil {
l.cache = map[uint]*User{}
}
l.cache[key] = value
}
// keyIndex will return the location of the key in the batch, if its not found
// it will add the key to the batch
func (b *userLoaderBatch) keyIndex(l *UserLoader, key uint) int {
for i, existingKey := range b.keys {
if key == existingKey {
return i
}
}
pos := len(b.keys)
b.keys = append(b.keys, key)
if pos == 0 {
go b.startTimer(l)
}
if l.maxBatch != 0 && pos >= l.maxBatch-1 {
if !b.closing {
b.closing = true
l.batch = nil
go b.end(l)
}
}
return pos
}
func (b *userLoaderBatch) startTimer(l *UserLoader) {
time.Sleep(l.wait)
l.mu.Lock()
// we must have hit a batch limit and are already finalizing this batch
if b.closing {
l.mu.Unlock()
return
}
l.batch = nil
l.mu.Unlock()
b.end(l)
}
func (b *userLoaderBatch) end(l *UserLoader) {
b.data, b.error = l.fetch(b.keys)
close(b.done)
}
================================================
FILE: 4-api/3_graphql/gqlgen_full/note.txt
================================================
go run github.com/99designs/gqlgen init
go run github.com/99designs/gqlgen -v
go generate ./...
dataloaden coursera/3p/graphql/gqlgen3.User
https://github.com/99designs/gqlgen/blob/master/example/dataloader/dataloaders.go
go run github.com/vektah/dataloaden UserLoader uint *coursera/3p/graphql/gqlgen3.User
uploadPhoto(comment: String!, file: Upload!) Photo!
curl localhost:8080/graphql \
-F operations='{ "query": "mutation ($file: Upload!) { singleUpload(file: $file) { id } }", "variables": { "file": null } }' \
-F map='{ "0": ["variables.file"] }' \
-F 0=@../photo_samples/building_1.jpg
{
query: `
mutation($file: Upload!) {
singleUpload(file: $file) {
id
}
}
`,
variables: {
file: File // a.txt
}
}
https://99designs.com/blog/engineering/gqlgen-a-graphql-server-generator-for-go/
https://github.com/99designs/gqlgen
query{timeline{id,url,user{id,name}}}
query{user(userID:"1"){id,avatar, name}}
mutation _{ratePhoto(photoID:"1", direction:"up"){id,url,rating,user{id,name}}}
================================================
FILE: 4-api/3_graphql/graphql-go/main.go
================================================
package main
import (
"encoding/json"
"fmt"
"log"
"math/rand"
"net/http"
"time"
"github.com/graphql-go/graphql"
)
/*
Create
http://127.0.0.1:8080/graphql?query=mutation+_{create(title:%22taocp%22,price:2500,author:1){id,title,price}}
Read
http://127.0.0.1:8080/graphql?query={books{id,title,author{name}}}
http://127.0.0.1:8080/graphql?query={book(id:1){id,title,author{name}}}
Update
http://127.0.0.1:8080/graphql?query=mutation+_{update(id:1,price:42.0,title:"test"){id,title,price}}
Delete
http://127.0.0.1:8080/graphql?query=mutation+_{delete(id:1){id,title,price}}
*/
type Author struct {
Name string `json:"string"`
}
type Book struct {
ID int64 `json:"id"`
Title string `json:"title"`
Author uint `json:"author"`
Price float64 `json:"price"`
}
var authors = map[uint]Author{
1: Author{
Name: "Robert Heinlein",
},
}
var books = []Book{
Book{
ID: 1,
Title: "The Moon is a harsh mistress",
Author: 1,
Price: 200,
},
}
var authorType = graphql.NewObject(
graphql.ObjectConfig{
Name: "Author",
Fields: graphql.Fields{
"name": &graphql.Field{
Type: graphql.String,
},
},
},
)
var bookType = graphql.NewObject(
graphql.ObjectConfig{
Name: "Book",
Fields: graphql.Fields{
"id": &graphql.Field{
Type: graphql.Int,
},
"title": &graphql.Field{
Type: graphql.String,
},
"author": &graphql.Field{
Type: authorType,
Resolve: func(params graphql.ResolveParams) (interface{}, error) {
book, ok := params.Source.(Book)
if !ok {
return nil, fmt.Errorf("cannot convert source to Book")
}
return authors[book.Author], nil
},
},
"price": &graphql.Field{
Type: graphql.Float,
},
},
},
)
var mutationType = graphql.NewObject(graphql.ObjectConfig{
Name: "Mutation",
Fields: graphql.Fields{
"create": &graphql.Field{
Type: bookType,
Description: "Create new book",
Args: graphql.FieldConfigArgument{
"title": &graphql.ArgumentConfig{
Type: graphql.NewNonNull(graphql.String),
},
"author": &graphql.ArgumentConfig{
Type: graphql.NewNonNull(graphql.Int),
},
"price": &graphql.ArgumentConfig{
Type: graphql.NewNonNull(graphql.Float),
},
},
Resolve: func(params graphql.ResolveParams) (interface{}, error) {
rand.Seed(time.Now().UnixNano())
log.Println(params.Args)
book := Book{
ID: int64(rand.Intn(100000)), // генерируем случайный ID
Title: params.Args["title"].(string),
Author: uint(params.Args["author"].(int)),
Price: params.Args["price"].(float64),
}
books = append(books, book)
return book, nil
},
},
"update": &graphql.Field{
Type: bookType,
Description: "Update book by id",
Args: graphql.FieldConfigArgument{
"id": &graphql.ArgumentConfig{
Type: graphql.NewNonNull(graphql.Int),
},
"title": &graphql.ArgumentConfig{
Type: graphql.String,
},
"author": &graphql.ArgumentConfig{
Type: graphql.Int,
},
"price": &graphql.ArgumentConfig{
Type: graphql.Float,
},
},
Resolve: func(params graphql.ResolveParams) (interface{}, error) {
id, _ := params.Args["id"].(int)
title, titleOk := params.Args["title"].(string)
author, authorOk := params.Args["author"].(int)
price, priceOk := params.Args["price"].(float64)
book := Book{}
for i, p := range books {
if int64(id) != p.ID {
continue
}
if titleOk {
books[i].Title = title
}
if authorOk {
books[i].Author = uint(author)
}
if priceOk {
books[i].Price = price
}
book = books[i]
}
return book, nil
},
},
"delete": &graphql.Field{
Type: bookType,
Description: "Delete book by id",
Args: graphql.FieldConfigArgument{
"id": &graphql.ArgumentConfig{
Type: graphql.NewNonNull(graphql.Int),
},
},
Resolve: func(params graphql.ResolveParams) (interface{}, error) {
id, _ := params.Args["id"].(int)
book := Book{}
for i, p := range books {
if int64(id) == p.ID {
book = books[i]
books = append(books[:i], books[i+1:]...)
}
}
return book, nil
},
},
},
})
var queryType = graphql.NewObject(
graphql.ObjectConfig{
Name: "Query",
Fields: graphql.Fields{
"book": &graphql.Field{
Type: bookType,
Description: "Get book by id",
Args: graphql.FieldConfigArgument{
"id": &graphql.ArgumentConfig{
Type: graphql.Int,
},
},
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
id, ok := p.Args["id"].(int)
if ok {
for _, book := range books {
if int(book.ID) == id {
return book, nil
}
}
}
return nil, nil
},
},
"books": &graphql.Field{
Type: graphql.NewList(bookType),
Description: "Get books list",
Resolve: func(params graphql.ResolveParams) (interface{}, error) {
return books, nil
},
},
},
})
var schema, _ = graphql.NewSchema(
graphql.SchemaConfig{
Query: queryType,
Mutation: mutationType,
},
)
func executeQuery(query string, schema graphql.Schema) *graphql.Result {
result := graphql.Do(graphql.Params{
Schema: schema,
RequestString: query,
})
if len(result.Errors) > 0 {
fmt.Printf("errors: %v", result.Errors)
}
return result
}
func main() {
http.HandleFunc("/graphql", func(w http.ResponseWriter, r *http.Request) {
result := executeQuery(r.URL.Query().Get("query"), schema)
json.NewEncoder(w).Encode(result)
})
http.ListenAndServe(":8080", nil)
}
================================================
FILE: 4-api/3_graphql/intro/instagram_gql.txt
================================================
{"5095":"viewer() {
eligible_promotions.ig_parameters().surface_nux_id().external_gating_permitted_qps() {
edges {
priority,
time_range {
start,
end
},
node {
id,
promotion_id,
max_impressions,
triggers,
template {
name,
parameters {
name,
string_value
}
},
creatives {
title {
text
},
content {
text
},
footer {
text
},
social_context {
text
},
primary_action{
title {
text
},
url,
limit,
dismiss_promotion
},
secondary_action{
title {
text
},
url,
limit,
dismiss_promotion
},
dismiss_action{
title {
text
},
url,
limit,
dismiss_promotion
},
image {
uri
}
}
}
}
}
}","5780":"viewer() {
eligible_promotions.ig_parameters().surface_nux_id().external_gating_permitted_qps() {
edges {
priority,
time_range {
start,
end
},
node {
id,
promotion_id,
max_impressions,
triggers,
template {
name,
parameters {
name,
string_value
}
},
creatives {
title {
text
},
content {
text
},
footer {
text
},
social_context {
text
},
primary_action{
title {
text
},
url,
limit,
dismiss_promotion
},
secondary_action{
title {
text
},
url,
limit,
dismiss_promotion
},
dismiss_action{
title {
text
},
url,
limit,
dismiss_promotion
},
image {
uri
}
}
}
}
}
}"}
================================================
FILE: 4-api/3_graphql/intro/instagram_sql_resp.json
================================================
{
"data":{
"user":{
"id":"8783838119",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/62df74739256182ff0c6e649b92af2e1/5DF8D1FD/t51.2885-19/s150x150/47581251_1143495042491718_7332190549358673920_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"rvasily.msk",
"edge_web_feed_timeline":{
"page_info":{
"has_next_page":true,
"end_cursor":"KKkBARAAAAIoABgAEAAQAAgACAAIAP____9_______-______5___9f____3______v6f__9___-__v_7__7_____5_________9___7_______f9_-vS-94VU4v6MKqzsf8f__2-_____nfr___79v_7f_-f__7v_P___1_f_v7v__9vf__79___-_7__7_3__7___-b8___-173_____3_5_d7vfKyMEsCABb8tfaXmVsA"
},
"edges":[
{
"node":{
"__typename":"GraphImage",
"id":"2118287177818397102",
"dimensions":{
"height":1080,
"width":1080
},
"display_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/0e72e01774b67986c7956914c964d537/5E05EFA3/t51.2885-15/e35/67194079_764206027315731_4716759996914198074_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"display_resources":[
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/e8d3c843e8d18da582ad809e6fc33339/5DFF9846/t51.2885-15/sh0.08/e35/s640x640/67194079_764206027315731_4716759996914198074_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":640,
"config_height":640
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/eff3cb4a484f7c4116778a638e004441/5E0A8746/t51.2885-15/sh0.08/e35/s750x750/67194079_764206027315731_4716759996914198074_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":750,
"config_height":750
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/0e72e01774b67986c7956914c964d537/5E05EFA3/t51.2885-15/e35/67194079_764206027315731_4716759996914198074_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":1080,
"config_height":1080
}
],
"follow_hashtag_info":null,
"is_video":false,
"should_log_client_event":false,
"tracking_token":"eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiZDNkNWVkZTkzNjg3NDM0MmI5MzdmMGMzNDA1NWVlMTIyMTE4Mjg3MTc3ODE4Mzk3MTAyIiwic2VydmVyX3Rva2VuIjoiMTU2Njc0ODY2MTIyMXwyMTE4Mjg3MTc3ODE4Mzk3MTAyfDg3ODM4MzgxMTl8YzliZjQyYTcxMjU2OTQ5YzRjNWI4ZGYyNzVjYmQ4YmU4NmM4NDQzZGZmNzQ0OTE1Y2M5YjM2NTczOThkZmQ5OSJ9LCJzaWduYXR1cmUiOiIifQ==",
"edge_media_to_tagged_user":{
"edges":[
]
},
"accessibility_caption":"\u041d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f: \u0432 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438",
"attribution":null,
"shortcode":"B1lqvcOIVmu",
"edge_media_to_caption":{
"edges":[
{
"node":{
"text":"@_nguan_\n#dreamermagazine"
}
}
]
},
"edge_media_preview_comment":{
"count":5,
"page_info":{
"has_next_page":true,
"end_cursor":"QVFCUFJ4TjhSWUNORmpoc1JuY0NpU3N3ZFo5R2M4ZnJyNC1CWmowTG55ZHd6bzI1QkNHSGFGZUhwdTY0OVA2UkhXeS0yaFU1NVQ3VDNiY1JMQ0ItQWp4cA=="
},
"edges":[
{
"node":{
"id":"17926872490309142",
"text":"Love these soft colours \ud83d\ude0d",
"created_at":1566742952,
"did_report_as_spam":false,
"owner":{
"id":"178548294",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/4e56dc1ed1127c6aa7143cdfe4fbc757/5DFB45AF/t51.2885-19/s150x150/60207369_1069359416582248_7611132281343705088_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"clancywhiteside"
},
"viewer_has_liked":false
}
},
{
"node":{
"id":"17886040774395916",
"text":"\u606d\u559c\u53d1\u8d22\u8d22\u8fd0\u6eda\u6eda",
"created_at":1566746198,
"did_report_as_spam":false,
"owner":{
"id":"296852447",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/803fc113b05cd13756959c302ea38632/5DF8E15A/t51.2885-19/s150x150/42494087_269469293907798_1214459997887397888_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"lingyang37"
},
"viewer_has_liked":false
}
}
]
},
"gating_info":null,
"media_preview":"ACoqsyRFee34UwHNaQwfzP8AD/n86pzxbBuTHJxj3/z60DKu8LwSAaUMG6HNROu7kgZNIMx9hz2FRd3sVZWvrcsFgoy1Q+cx6Co5Ac85JzgADp7emfzqE7gfuH/vo1RmdDn/ANCP8Wf0/pVaWTIx3BzUAvWMm3GFyTnABx68/wA6gnZhkjJH8qTd9i2miQyCR+TjA7cdaJgMAjoP/r1SjTfznH+e9X43AbnoSAPfPWmkK5E03JGcbG+lRM7Ek5PU9/8A61XZrNJMkcFutZx02T1/Q1Vn0J9Vcvtk5zyTWfL8xbFaB6VQkHzn6CpYyWEYFPZXLAjG0EH3oSphVokug5paij6VJTGf/9k=",
"comments_disabled":false,
"taken_at_timestamp":1566739531,
"edge_media_preview_like":{
"count":2432,
"edges":[
]
},
"edge_media_to_sponsor_user":{
"edges":[
]
},
"location":null,
"viewer_has_liked":false,
"viewer_has_saved":false,
"viewer_has_saved_to_collection":false,
"viewer_in_photo_of_you":false,
"viewer_can_reshare":true,
"owner":{
"id":"3468082085",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/1f1d7f216ca0db2ef61fb3c97684bd1f/5E09D9AF/t51.2885-19/s150x150/29088365_857696394412136_6657610564803493888_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"dreamermagazine",
"followed_by_viewer":true,
"full_name":"Dreamer Magazine",
"is_private":false,
"requested_by_viewer":false,
"blocked_by_viewer":false,
"has_blocked_viewer":false
}
}
},
{
"node":{
"__typename":"GraphImage",
"id":"2118363188411259641",
"dimensions":{
"height":720,
"width":1080
},
"display_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/815edcb93bf99ca182af26333e782a2d/5DDA3A0C/t51.2885-15/e35/67758159_228810251346840_1820141147555273790_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"display_resources":[
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/c381a9e65286f7d7532472225eff2ccd/5DDBCFE9/t51.2885-15/sh0.08/e35/s640x640/67758159_228810251346840_1820141147555273790_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":640,
"config_height":426
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/1b6b9a47b22180dc18f2e953284ee1f7/5E078CE9/t51.2885-15/sh0.08/e35/s750x750/67758159_228810251346840_1820141147555273790_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":750,
"config_height":500
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/815edcb93bf99ca182af26333e782a2d/5DDA3A0C/t51.2885-15/e35/67758159_228810251346840_1820141147555273790_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":1080,
"config_height":720
}
],
"follow_hashtag_info":null,
"is_video":false,
"should_log_client_event":false,
"tracking_token":"eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiZDNkNWVkZTkzNjg3NDM0MmI5MzdmMGMzNDA1NWVlMTIyMTE4MzYzMTg4NDExMjU5NjQxIiwic2VydmVyX3Rva2VuIjoiMTU2Njc0ODY2MTIyMnwyMTE4MzYzMTg4NDExMjU5NjQxfDg3ODM4MzgxMTl8ZGEzMDQxM2Y2NTBiYmM0ZWM2Nzc1Y2FjMzE0YjQxNTExNzcxZDE0M2QxNTU3MGM3YmNjZmIxNjY4M2FlZWY5NyJ9LCJzaWduYXR1cmUiOiIifQ==",
"edge_media_to_tagged_user":{
"edges":[
{
"node":{
"user":{
"full_name":"National Geographic",
"id":"787132",
"is_verified":true,
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/06ec75947ace6228666ef7ac7c8d9e1b/5E1141E8/t51.2885-19/s150x150/13597791_261499887553333_1855531912_a.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"natgeo"
},
"x":0.16064453,
"y":0.29320475
}
},
{
"node":{
"user":{
"full_name":"Emily Harrington",
"id":"2111892",
"is_verified":true,
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/14de7d046fbc7832e15492b14cbac7c2/5DF87F25/t51.2885-19/s150x150/30841415_118979385642417_7215694693940592640_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"emilyaharrington"
},
"x":0.8378906,
"y":0.4833903
}
},
{
"node":{
"user":{
"full_name":"Renan Ozturk",
"id":"4326362",
"is_verified":true,
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/0778dbbd7fdc7259847bd3107455345c/5DFF0858/t51.2885-19/10818112_782853255108470_946076930_a.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"renan_ozturk"
},
"x":0.8527832,
"y":0.13703613
}
},
{
"node":{
"user":{
"full_name":"Hilaree Nelson (ONeill)",
"id":"14999609",
"is_verified":true,
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/d8d07b6f6c6d8aac8954134754fe7c25/5E0528F1/t51.2885-19/s150x150/40542885_2133241663559023_7643319590893649920_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"hilareenelson"
},
"x":0.6057129,
"y":0.19656576
}
},
{
"node":{
"user":{
"full_name":"Cory Richards",
"id":"19028900",
"is_verified":true,
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/34065202c8a29a3c4b6e4ef8a02a0491/5E165C53/t51.2885-19/57674276_1190161047810775_5208218548769390592_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"coryrichards"
},
"x":0.6813965,
"y":0.8799967
}
},
{
"node":{
"user":{
"full_name":"National Geographic Travel",
"id":"23947096",
"is_verified":true,
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/e56487890a4a526c8e866eadbc3159fb/5DF5DD39/t51.2885-19/s150x150/12132724_850743081710560_180824582_a.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"natgeotravel"
},
"x":0.35473633,
"y":0.529777
}
},
{
"node":{
"user":{
"full_name":"National Geographic Adventure",
"id":"414805671",
"is_verified":true,
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/6c8274ce8b5c0eba7753b77e1a61800e/5DFA6E24/t51.2885-19/s150x150/12724642_511974045653432_550060489_a.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"natgeoadventure"
},
"x":0.2944336,
"y":0.7671224
}
}
]
},
"accessibility_caption":"\u041d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f: \u043d\u0435\u0431\u043e, \u043f\u0440\u0438\u0440\u043e\u0434\u0430 \u0438 \u043d\u0430 \u0443\u043b\u0438\u0446\u0435",
"attribution":null,
"shortcode":"B1l8BimhFr5",
"edge_media_to_caption":{
"edges":[
{
"node":{
"text":"Photo by @coryrichards | Believing and doubting are very much two sides of the same coin for me. It follows me through life.. I believe I can accomplish the goals I attempt, yet the journey of exploring this potential success is littered with doubt. Or another example would be: Doubt feeds my discernment on the mountain keeping me safe. At the same time, intense doubt can create stagnation, preventing me from going deeper or trying harder, which as result, could end in final failure. Join the conversation about this on my main feed: @coryrichards \nPictured here: An expedition teammate sets up a tent while on #expedition to attempt summiting Hkakabo Razi, Southeast Asia\u2019s tallest mountain. Shot #onassignment for #natgeo magazine\u2019s article \u201cHow A remote Peak in Myanmar Nearly Broke an Elite Team of Climbers\u201d. #followme @coryrichards for more stories about the tallest #mountains of the world shot #onassignment for #natgeo.\n\n#yeswesleptthere #travel #adventure #climbing #mountains #nature"
}
}
]
},
"edge_media_preview_comment":{
"count":1,
"page_info":{
"has_next_page":false,
"end_cursor":null
},
"edges":[
{
"node":{
"id":"17981765863273328",
"text":"\ud83d\ude0d",
"created_at":1566748621,
"did_report_as_spam":false,
"owner":{
"id":"9065557070",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/4d50996537fb9c6ac3889c5c87e70911/5DFD7A80/t51.2885-19/s150x150/66647324_473121356862840_463404860746760192_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"xipolita_maria"
},
"viewer_has_liked":false
}
}
]
},
"gating_info":null,
"media_preview":"ACoctWrYAxWtHJkc1z9vLitBJc1z83KzS1zU3ComK+tVPMzULyVTmLlLrFfUVX+T1FZjzFelVjcGldhYhDhcAVdjlrFVyTVxCcUpLUpGqJQKgkkP51XRiTipXNTHXQb7leRyCQeCKq76nkqrgVryk3P/2Q==",
"comments_disabled":false,
"taken_at_timestamp":1566748592,
"edge_media_preview_like":{
"count":247,
"edges":[
]
},
"edge_media_to_sponsor_user":{
"edges":[
]
},
"location":{
"id":"566972341",
"has_public_page":true,
"name":"Myanmar",
"slug":"myanmar"
},
"viewer_has_liked":false,
"viewer_has_saved":false,
"viewer_has_saved_to_collection":false,
"viewer_in_photo_of_you":false,
"viewer_can_reshare":true,
"owner":{
"id":"414805671",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/6c8274ce8b5c0eba7753b77e1a61800e/5DFA6E24/t51.2885-19/s150x150/12724642_511974045653432_550060489_a.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"natgeoadventure",
"followed_by_viewer":true,
"full_name":"National Geographic Adventure",
"is_private":false,
"requested_by_viewer":false,
"blocked_by_viewer":false,
"has_blocked_viewer":false
}
}
},
{
"node":{
"__typename":"GraphImage",
"id":"2118332148355221552",
"dimensions":{
"height":1260,
"width":1080
},
"display_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/737829f54a4db52c3d96a4d12e35cf01/5DFD5F4B/t51.2885-15/e35/67503943_151408589261654_3928871968013976403_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"display_resources":[
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/0314f5bc174611bb6b7ff191be8bac33/5E09F0BD/t51.2885-15/sh0.08/e35/p640x640/67503943_151408589261654_3928871968013976403_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":640,
"config_height":746
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/df12b15d492d1866a0172a98fea6383e/5DF366BD/t51.2885-15/sh0.08/e35/p750x750/67503943_151408589261654_3928871968013976403_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":750,
"config_height":875
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/737829f54a4db52c3d96a4d12e35cf01/5DFD5F4B/t51.2885-15/e35/67503943_151408589261654_3928871968013976403_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":1080,
"config_height":1260
}
],
"follow_hashtag_info":null,
"is_video":false,
"should_log_client_event":false,
"tracking_token":"eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiZDNkNWVkZTkzNjg3NDM0MmI5MzdmMGMzNDA1NWVlMTIyMTE4MzMyMTQ4MzU1MjIxNTUyIiwic2VydmVyX3Rva2VuIjoiMTU2Njc0ODY2MTIyMnwyMTE4MzMyMTQ4MzU1MjIxNTUyfDg3ODM4MzgxMTl8YjFhOTQ4OWYwMmNmNGM3NDcyN2NkZjUzZDE2YWZlYThmY2U3Nzg3YTY5NDQ0NDdkNjVkZjljNjFlOWU1MGFmOSJ9LCJzaWduYXR1cmUiOiIifQ==",
"edge_media_to_tagged_user":{
"edges":[
]
},
"accessibility_caption":"\u041d\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0444\u043e\u0442\u043e.",
"attribution":null,
"shortcode":"B1l092TAMgw",
"edge_media_to_caption":{
"edges":[
{
"node":{
"text":"\u041f\u043e\u043b\u0443\u043e\u0441\u0442\u0440\u043e\u0432 \u0420\u044b\u0431\u0430\u0447\u0438\u0439, \u041c\u0443\u0440\u043c\u0430\u043d\u0441\u043a\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c. \u0410\u0432\u0442\u043e\u0440 \u0444\u043e\u0442\u043e: @ksergart."
}
}
]
},
"edge_media_preview_comment":{
"count":12,
"page_info":{
"has_next_page":true,
"end_cursor":"QVFDNUtWVWFJaDBYc0xvRE52bHh4SFVCaGI3bV9VNnhzWTNDS0ZzRUQzS2ZiSG80cU5IZGtVMTROMm9oa0dac1pVbHhBS2ZJVjlkX3JBNV9EaXVtMWFscg=="
},
"edges":[
{
"node":{
"id":"17890215628384852",
"text":"\u0411\u0443\u0434\u0442\u043e \u0441\u043a\u0430\u0437\u043a\u0430 \ud83d\udc9a",
"created_at":1566747768,
"did_report_as_spam":false,
"owner":{
"id":"1318188656",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/ddae0523184feb0c3f7532b1116552f4/5E0BAB9A/t51.2885-19/s150x150/35999127_2123071171056159_1209990032148922368_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"elvira_mva"
},
"viewer_has_liked":false
}
},
{
"node":{
"id":"18075684361128313",
"text":"\ud83d\udc4d",
"created_at":1566748420,
"did_report_as_spam":false,
"owner":{
"id":"827758337",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/aa82522da7085d993a1a63584067dd77/5DF0BA2B/t51.2885-19/s150x150/12353182_1009321239130297_1860918634_a.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"petrkob62"
},
"viewer_has_liked":false
}
}
]
},
"gating_info":null,
"media_preview":"ACQqgECSDKkGowhiPqKoWzKjZbOPatyLZJ91s+xrJ+76HO046bopPAHG5aznj2mt0x+Wcr0PUVDcW+4bh0oUiou2nQwmGDRUsi4bFFbGxMIyeasRK0ZBXrTIlT+Mj6DJ/wDrVJIFZfkJGOpIAz+XP4VDfQi5fNyxHQA/oajaUkfOxPfAxj6etUoJ0ZdjD6N3x70SIoOcZXsynBH1ByKiyQtiJ1BOefyNFRFVz95h9R/hxRWhQAqg55JHA9Pc/wBKcsm0YqseopaAsODnOTTmfP4VF3pwpjE3GikNFAz/2Q==",
"comments_disabled":false,
"taken_at_timestamp":1566744892,
"edge_media_preview_like":{
"count":1757,
"edges":[
]
},
"edge_media_to_sponsor_user":{
"edges":[
]
},
"location":null,
"viewer_has_liked":false,
"viewer_has_saved":false,
"viewer_has_saved_to_collection":false,
"viewer_in_photo_of_you":false,
"viewer_can_reshare":true,
"owner":{
"id":"22563005",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/adbf0833f39d8466c28cd856428cb57c/5DF0D946/t51.2885-19/s150x150/29416770_171824350185992_3381245009872289792_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"natgeomagazineru",
"followed_by_viewer":true,
"full_name":"National Geographic Russia",
"is_private":false,
"requested_by_viewer":false,
"blocked_by_viewer":false,
"has_blocked_viewer":false
}
}
},
{
"node":{
"__typename":"GraphImage",
"id":"2118335134316253776",
"dimensions":{
"height":1080,
"width":1080
},
"display_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/bce316215da7fb723aae9918b9c788b9/5DF82138/t51.2885-15/e35/67887681_2465654650378600_5958631488163850516_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"display_resources":[
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/9c10d2e28c91592f0193b0dc4e4e21db/5E0A2282/t51.2885-15/sh0.08/e35/s640x640/67887681_2465654650378600_5958631488163850516_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":640,
"config_height":640
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/177982c8ccc90e94d75f85dcf9b18433/5E0DA546/t51.2885-15/sh0.08/e35/s750x750/67887681_2465654650378600_5958631488163850516_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":750,
"config_height":750
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/bce316215da7fb723aae9918b9c788b9/5DF82138/t51.2885-15/e35/67887681_2465654650378600_5958631488163850516_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":1080,
"config_height":1080
}
],
"follow_hashtag_info":null,
"is_video":false,
"should_log_client_event":false,
"tracking_token":"eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiZDNkNWVkZTkzNjg3NDM0MmI5MzdmMGMzNDA1NWVlMTIyMTE4MzM1MTM0MzE2MjUzNzc2Iiwic2VydmVyX3Rva2VuIjoiMTU2Njc0ODY2MTIyMnwyMTE4MzM1MTM0MzE2MjUzNzc2fDg3ODM4MzgxMTl8MDdkZTJjZjE4OWEwMmMwM2E1ZWExNWJmM2VlMzJjNmQ0MDAzNzcxNzgwZTJkYmU0ZDczNGNhOTg3YzIwY2Y5OCJ9LCJzaWduYXR1cmUiOiIifQ==",
"edge_media_to_tagged_user":{
"edges":[
]
},
"accessibility_caption":"\u041d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f: \u0442\u0435\u043a\u0441\u0442",
"attribution":null,
"shortcode":"B1l1pTMJlJQ",
"edge_media_to_caption":{
"edges":[
{
"node":{
"text":"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0439\u0442\u0435 \u0441\u0432\u043e\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445\u00a0\ud83d\ude09\n\u2800\n#adme #adme_\u0432\u043e\u043f\u0440\u043e\u0441"
}
}
]
},
"edge_media_preview_comment":{
"count":54,
"page_info":{
"has_next_page":true,
"end_cursor":"QVFBbk9vUFR3M0FCRFZMZE9LRTFHYjlKbHdvRlFxbVhZdUJoMFFjZzhPRUxYaEpELU5NYjRhQ3dWQWJET0VMcGJ6TWY4R0g2U2VSQm5SUXh4N2ZpbHBpYw=="
},
"edges":[
{
"node":{
"id":"18094140058027449",
"text":"\u042f\u0431\u043b\u043e\u043a\u043e",
"created_at":1566748247,
"did_report_as_spam":false,
"owner":{
"id":"10749647140",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/35267ebedde45d759e1d13e7cc8ccfc1/5DFC312A/t51.2885-19/s150x150/68706303_492164288009157_6648378867608190976_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"thisislauka"
},
"viewer_has_liked":false
}
},
{
"node":{
"id":"17900024605364359",
"text":"\ud83c\udf4b",
"created_at":1566748421,
"did_report_as_spam":false,
"owner":{
"id":"8441599909",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/29365d002b2a3e2fa551e6803d2c87c4/5DFCADF9/t51.2885-19/s150x150/66410920_2440993229292400_5166820540119252992_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"photo_by_vlados"
},
"viewer_has_liked":false
}
}
]
},
"gating_info":null,
"media_preview":"ACoqzwtPC1IFqQJXPcRCFp22pwtLtpXEV9tG2pytNxRcCWOFjg4yOD16jP8A9arAjHTZz/vVVWpBQUT+XgZK9P8AaoMeOq/+Pf57VDSE07/1/SAe0ZPQY/HP41BSk0zNSIaGp4aq4pwpjJ91IXqLNNNFgHlqZuphptMR/9k=",
"comments_disabled":false,
"taken_at_timestamp":1566745248,
"edge_media_preview_like":{
"count":561,
"edges":[
]
},
"edge_media_to_sponsor_user":{
"edges":[
]
},
"location":null,
"viewer_has_liked":false,
"viewer_has_saved":false,
"viewer_has_saved_to_collection":false,
"viewer_in_photo_of_you":false,
"viewer_can_reshare":true,
"owner":{
"id":"2779425302",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/62dd5481e860975939110e0651cf9499/5E08C764/t51.2885-19/s150x150/12816771_994305067322963_421387549_a.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"adme.ru",
"followed_by_viewer":true,
"full_name":"AdMe",
"is_private":false,
"requested_by_viewer":false,
"blocked_by_viewer":false,
"has_blocked_viewer":false
}
}
},
{
"node":{
"__typename":"GraphImage",
"id":"2118305769246977062",
"dimensions":{
"height":1349,
"width":1080
},
"display_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/d4d22101153d599c04ac36ead09e446f/5E008836/t51.2885-15/e35/p1080x1080/67303980_161116331703747_7430462062728824761_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"display_resources":[
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/93653283a63e13cca89203de4c9d6724/5DF766D3/t51.2885-15/sh0.08/e35/p640x640/67303980_161116331703747_7430462062728824761_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":640,
"config_height":799
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/1e32a346c9a3949c35ae6225f133c5f2/5DF18DD3/t51.2885-15/sh0.08/e35/p750x750/67303980_161116331703747_7430462062728824761_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":750,
"config_height":937
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/d4d22101153d599c04ac36ead09e446f/5E008836/t51.2885-15/e35/p1080x1080/67303980_161116331703747_7430462062728824761_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":1080,
"config_height":1349
}
],
"follow_hashtag_info":null,
"is_video":false,
"should_log_client_event":false,
"tracking_token":"eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiZDNkNWVkZTkzNjg3NDM0MmI5MzdmMGMzNDA1NWVlMTIyMTE4MzA1NzY5MjQ2OTc3MDYyIiwic2VydmVyX3Rva2VuIjoiMTU2Njc0ODY2MTIyMnwyMTE4MzA1NzY5MjQ2OTc3MDYyfDg3ODM4MzgxMTl8NTVlZDEyYzAzNjMwMWQ4ZDgzOTdmMWJlZDgyMWY5ZmM2ZmRiYmY3ZDBiNTNjODNlMTAxNjAxNWQ5ZjU4MTVlOSJ9LCJzaWduYXR1cmUiOiIifQ==",
"edge_media_to_tagged_user":{
"edges":[
]
},
"accessibility_caption":"\u041d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f: \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u043b\u044e\u0434\u0438 \u0441\u0438\u0434\u044f\u0442, \u0431\u043e\u0440\u043e\u0434\u0430, \u0432 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u0438 \u0447\u0430\u0441\u0442\u044c \u0442\u0435\u043b\u0430 \u043a\u0440\u0443\u043f\u043d\u044b\u043c \u043f\u043b\u0430\u043d\u043e\u043c",
"attribution":null,
"shortcode":"B1lu9-1oGwm",
"edge_media_to_caption":{
"edges":[
{
"node":{
"text":"Sunday is for shopping! Get inspired by @anthony_colette who is wearing our new Grand Petite in Melrose. Tap to shop the look! #DanielWellington"
}
}
]
},
"edge_media_preview_comment":{
"count":7,
"page_info":{
"has_next_page":true,
"end_cursor":"QVFEOHp1TzZoOHE0V0VnXzNfVEFiQmZQY3hHa3daNmRUSGNyVkpxNWpZNVNBWkpPanNuNmdLdTRIZG12Rmd3MzlhSVFMM1VUSm5zVERGWmdCOFE3NkdVSQ=="
},
"edges":[
{
"node":{
"id":"17883424486407650",
"text":"#cool",
"created_at":1566747095,
"did_report_as_spam":false,
"owner":{
"id":"3023386633",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/5590a713d4dde5cdba6bdc9b45c87f94/5E0FC332/t51.2885-19/s150x150/65580253_2161849217447103_2123178831798861824_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"arcadieus_arcd"
},
"viewer_has_liked":false
}
},
{
"node":{
"id":"17854795318526180",
"text":"Woow \u2764\ufe0f",
"created_at":1566747735,
"did_report_as_spam":false,
"owner":{
"id":"5908938021",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/52a8f3c8d912f774be052aee4c1f445b/5DFED1BC/t51.2885-19/s150x150/65314269_521974431700622_5216210486474833920_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"capturemoments__"
},
"viewer_has_liked":false
}
}
]
},
"gating_info":null,
"media_preview":"ACEqdNcxx98t6Dn/AOtWbZxJI7GT7iDOPX/PWqm8DGBgd607VVSMyH5iw4PoeRioeiLjqyrcRJHiWM456VqqMgE+gqo86fIjgBcjO3/Z7n6k1LLqUacKNxo1YO1ybYaKo/2m/wDd/nRRYVyDTyomDOQFUHk4HXjuR/X6VozoRzG2C3p6n6evtWECCPeprSfypM5wCMfT0P4Gm11BO2gm0qTu4PcentWjaIWBZQuQerDn8KoM+5iW5PPPue9aemtw4PqD/OjoJbljbL6r+VFWcj1H5iipLORFJTn60ytTItAF13AHj9ff/Gmn9KvCqX8VSMOPSilop3A//9k=",
"comments_disabled":false,
"taken_at_timestamp":1566741747,
"edge_media_preview_like":{
"count":6507,
"edges":[
]
},
"edge_media_to_sponsor_user":{
"edges":[
]
},
"location":null,
"viewer_has_liked":false,
"viewer_has_saved":false,
"viewer_has_saved_to_collection":false,
"viewer_in_photo_of_you":false,
"viewer_can_reshare":true,
"owner":{
"id":"47340181",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/200d102d62d14fdc91b31fcae730ebc4/5DF76D17/t51.2885-19/s150x150/36159707_670363839963003_7852937393920278528_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"danielwellington",
"followed_by_viewer":true,
"full_name":"Daniel Wellington",
"is_private":false,
"requested_by_viewer":false,
"blocked_by_viewer":false,
"has_blocked_viewer":false
}
}
},
{
"node":{
"__typename":"GraphImage",
"id":"2118272670440360478",
"dimensions":{
"height":1349,
"width":1080
},
"display_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/437b34008def65237fd1b313fad3ab7b/5DDA21AC/t51.2885-15/e35/p1080x1080/67787998_3521450197881108_6632484576980197817_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"display_resources":[
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/3c8fb0eb371ac8523281acb4132498c8/5E076C69/t51.2885-15/sh0.08/e35/p640x640/67787998_3521450197881108_6632484576980197817_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":640,
"config_height":799
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/a172a928cd4caebe457e999d76d63040/5DF25CAD/t51.2885-15/sh0.08/e35/p750x750/67787998_3521450197881108_6632484576980197817_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":750,
"config_height":936
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/437b34008def65237fd1b313fad3ab7b/5DDA21AC/t51.2885-15/e35/p1080x1080/67787998_3521450197881108_6632484576980197817_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":1080,
"config_height":1349
}
],
"follow_hashtag_info":null,
"is_video":false,
"should_log_client_event":false,
"tracking_token":"eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiZDNkNWVkZTkzNjg3NDM0MmI5MzdmMGMzNDA1NWVlMTIyMTE4MjcyNjcwNDQwMzYwNDc4Iiwic2VydmVyX3Rva2VuIjoiMTU2Njc0ODY2MTIyM3wyMTE4MjcyNjcwNDQwMzYwNDc4fDg3ODM4MzgxMTl8NTExZTA0Y2M2ZmFmY2UyNGVmNjdhMThiMmZkOWE5MzhmOTYyMDllZmMxMTk0MWY5ZWI2NjM1MWQ4YWFlNWNkNCJ9LCJzaWduYXR1cmUiOiIifQ==",
"edge_media_to_tagged_user":{
"edges":[
]
},
"accessibility_caption":"\u041d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f: \u043d\u0430 \u0443\u043b\u0438\u0446\u0435 \u0438 \u043f\u0440\u0438\u0440\u043e\u0434\u0430",
"attribution":null,
"shortcode":"B1lncVLBAoe",
"edge_media_to_caption":{
"edges":[
{
"node":{
"text":"Photo @coreyrichproductions | For most of us, every day is a chance to celebrate climbing around the world. Still, happy global climbing day to everyone who has built a life around chasing rock, making friends in different places, and having incredible adventures with people you love."
}
}
]
},
"edge_media_preview_comment":{
"count":71,
"page_info":{
"has_next_page":true,
"end_cursor":"QVFEeE50bWJ4XzNSY0FWclVyRkpKcThOQkZVSmdlM3lyZ0tjckxpS0djMUlCdlA0d2J0eXgwU3pER0thRzhvZ0hXei0tcGprdy13NzJXWnh5bVlPb1pyQQ=="
},
"edges":[
{
"node":{
"id":"17862621742481329",
"text":"Amazing",
"created_at":1566748582,
"did_report_as_spam":false,
"owner":{
"id":"2137876030",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/c0879fb2bdc75469c347736caeb177f6/5DF3DC1E/t51.2885-19/s150x150/12950311_1031636496901792_515202217_a.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"ahmad.qabaa"
},
"viewer_has_liked":false
}
},
{
"node":{
"id":"17922483298316433",
"text":"Courage and strength\ud83d\udc99\ud83c\udf35\ud83d\ude0e",
"created_at":1566748648,
"did_report_as_spam":false,
"owner":{
"id":"8621536104",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/e328e713e61401462754448c98026483/5DD98E7F/t51.2885-19/s150x150/41280361_319736438803081_2140821784356716544_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"janiceimbeault"
},
"viewer_has_liked":false
}
}
]
},
"gating_info":null,
"media_preview":"ACEq5miniNj0BPOOnf0+tMoAKKKKACiiigDqo1VBgDvu/GkaCJzuZQTnPPf6+o9B0FVxLTvNrqsc9ylc6eAGeM+4X278/wAqySMV0ZkBGDyDWTdgM2R2AB9//r1lKNtUaRlfQpUUuKKyNC95hp3mmqpNJW3OzHkRYaY9BUGaSkNQ23uaJJbC0U2ikM//2Q==",
"comments_disabled":false,
"taken_at_timestamp":1566737801,
"edge_media_preview_like":{
"count":21183,
"edges":[
]
},
"edge_media_to_sponsor_user":{
"edges":[
]
},
"location":null,
"viewer_has_liked":false,
"viewer_has_saved":false,
"viewer_has_saved_to_collection":false,
"viewer_in_photo_of_you":false,
"viewer_can_reshare":true,
"owner":{
"id":"414805671",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/6c8274ce8b5c0eba7753b77e1a61800e/5DFA6E24/t51.2885-19/s150x150/12724642_511974045653432_550060489_a.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"natgeoadventure",
"followed_by_viewer":true,
"full_name":"National Geographic Adventure",
"is_private":false,
"requested_by_viewer":false,
"blocked_by_viewer":false,
"has_blocked_viewer":false
}
}
},
{
"node":{
"__typename":"GraphImage",
"id":"2118327269893232788",
"dimensions":{
"height":1350,
"width":1080
},
"display_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/26e647d89ce68cf54d82bfa1cec7f185/5DDC96D3/t51.2885-15/fr/e15/p1080x1080/67479187_1080461632158935_7347868240441614334_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"display_resources":[
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/c9fd2abd0cb13cd260ba38c3bbfec748/5E05151B/t51.2885-15/sh0.08/e35/p640x640/67479187_1080461632158935_7347868240441614334_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":640,
"config_height":800
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/83a3b2437c88a515cd7127fb74614606/5DDA05DF/t51.2885-15/sh0.08/e35/p750x750/67479187_1080461632158935_7347868240441614334_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":750,
"config_height":937
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/26e647d89ce68cf54d82bfa1cec7f185/5DDC96D3/t51.2885-15/fr/e15/p1080x1080/67479187_1080461632158935_7347868240441614334_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":1080,
"config_height":1350
}
],
"follow_hashtag_info":null,
"is_video":false,
"should_log_client_event":false,
"tracking_token":"eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiZDNkNWVkZTkzNjg3NDM0MmI5MzdmMGMzNDA1NWVlMTIyMTE4MzI3MjY5ODkzMjMyNzg4Iiwic2VydmVyX3Rva2VuIjoiMTU2Njc0ODY2MTIyM3wyMTE4MzI3MjY5ODkzMjMyNzg4fDg3ODM4MzgxMTl8NjIyMTFhZWY2M2QwOTcyNDgwNTIzYzExYjUyMzJmZGRkODcyNWVmMTdkNzcwYzZkOTllYTI1ODFhYmZjYmNmOSJ9LCJzaWduYXR1cmUiOiIifQ==",
"edge_media_to_tagged_user":{
"edges":[
]
},
"accessibility_caption":"\u041d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f: \u043d\u0435\u0431\u043e, \u0433\u043e\u0440\u0430, \u043d\u0430 \u0443\u043b\u0438\u0446\u0435 \u0438 \u0435\u0434\u0430",
"attribution":null,
"shortcode":"B1lz224AliU",
"edge_media_to_caption":{
"edges":[
{
"node":{
"text":"repost @yogabyada : apero with a view \ud83d\ude0d\u2600 #myasconalocarno .\n.\n.\n#switzerland #urlaub #suisse #schweiz #landschaft #switzerland\ud83c\udde8\ud83c\udded #myswitzerland #inlovewithswitzerland #svizzera #visitswitzerland #ticino #switzerlandwonderland #switzerlandpictures #switzerland_vacations #blickheimat #amazingswitzerland #tessin #ticinomoments #visitticino #reise #reisen #reizen #voyage #voyages #voyager #ferien #vakantie #vacances"
}
}
]
},
"edge_media_preview_comment":{
"count":1,
"page_info":{
"has_next_page":false,
"end_cursor":null
},
"edges":[
{
"node":{
"id":"17888396074385239",
"text":"\u2665\ufe0f\ud83c\udde8\ud83c\udded\ud83c\udf79\ud83c\udfe8\ud83c\udf0a\u2600\ufe0f\ud83e\udd20\ud83d\udc4d",
"created_at":1566745792,
"did_report_as_spam":false,
"owner":{
"id":"9489672931",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/8cb5d0fbc56bb46034a11a83256753f9/5E0F79A5/t51.2885-19/s150x150/59814578_318105222220041_1893677838452654080_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"sandrolandi88"
},
"viewer_has_liked":false
}
}
]
},
"gating_info":null,
"media_preview":"ACEqsBKesZNZXnzYxk4/X8+tXLe9kHBG4evQ/wD166LmFh8NsjSSFlBIfHI/2Qa0UQDtmspLtw8m0Y3MDzz/AAgU57ic8BsfTj9ako19ntRWBsm9/wDvr/69FAFaRtncHPpk/wAqYk5z6j6VblgBKhMLxnnj1/OpUsRjJJz2yMf5FYuVtWacqK0DFmbA68nLY6D6elSCcH1H4A/4VrR2oEW1TyQcFh6/TqB29qxZrWW2OHHH94dP/rfjSTY7Ik84/wB4/wDfH/16Kq7hRTu+4rLsdU/I4AYjoD29/wAKy2tJdxkLDex5AJ/zxVOFiZASSTuHf3roqT0K3Mzy5YVy7gDGBkknn04z9PSq7XKmAw8t7uc5z+vB6VJqRO5R7H+dU5VAgBxyS+T+FCXUL9DH80+tFRUUxH//2Q==",
"comments_disabled":false,
"taken_at_timestamp":1566744310,
"edge_media_preview_like":{
"count":276,
"edges":[
]
},
"edge_media_to_sponsor_user":{
"edges":[
]
},
"location":{
"id":"2368275479952352",
"has_public_page":true,
"name":"Hotel Casa Berno",
"slug":"hotel-casa-berno"
},
"viewer_has_liked":false,
"viewer_has_saved":false,
"viewer_has_saved_to_collection":false,
"viewer_in_photo_of_you":false,
"viewer_can_reshare":true,
"owner":{
"id":"10326379",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/61a298fb784d22c06efc77d9d5c5773c/5DDBF4FA/t51.2885-19/10958802_763286217112123_367851535_a.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"ascona_locarno",
"followed_by_viewer":true,
"full_name":"#MyAsconaLocarno",
"is_private":false,
"requested_by_viewer":false,
"blocked_by_viewer":false,
"has_blocked_viewer":false
}
}
},
{
"node":{
"__typename":"GraphImage",
"id":"2118271896163192516",
"dimensions":{
"height":1350,
"width":1080
},
"display_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/9e429a54698127e4232e575e00115e18/5DF001DA/t51.2885-15/fr/e15/p1080x1080/68694466_466076210902073_853238738301639785_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"display_resources":[
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/37d826be8c9d7f9b5840d90faa0769e7/5DFD78E3/t51.2885-15/sh0.08/e35/p640x640/68694466_466076210902073_853238738301639785_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":640,
"config_height":800
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/233b68b468dad0b6251556f2f6d377d1/5E0CFB1C/t51.2885-15/sh0.08/e35/p750x750/68694466_466076210902073_853238738301639785_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":750,
"config_height":937
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/9e429a54698127e4232e575e00115e18/5DF001DA/t51.2885-15/fr/e15/p1080x1080/68694466_466076210902073_853238738301639785_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":1080,
"config_height":1350
}
],
"follow_hashtag_info":null,
"is_video":false,
"should_log_client_event":false,
"tracking_token":"eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiZDNkNWVkZTkzNjg3NDM0MmI5MzdmMGMzNDA1NWVlMTIyMTE4MjcxODk2MTYzMTkyNTE2Iiwic2VydmVyX3Rva2VuIjoiMTU2Njc0ODY2MTIyM3wyMTE4MjcxODk2MTYzMTkyNTE2fDg3ODM4MzgxMTl8ZDExMTdlNmU0ZDM0Y2Y2NGZlODYyYTUxZjY5NTkxNmY4NTk1ZTFiNGYzYmFjNzhkOTg0OTNiMWYwZTEwZjdiNSJ9LCJzaWduYXR1cmUiOiIifQ==",
"edge_media_to_tagged_user":{
"edges":[
]
},
"accessibility_caption":"\u041d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f: \u0433\u043e\u0440\u0430, \u043d\u0435\u0431\u043e, \u043d\u0430 \u0443\u043b\u0438\u0446\u0435, \u043f\u0440\u0438\u0440\u043e\u0434\u0430 \u0438 \u0432\u043e\u0434\u0430",
"attribution":null,
"shortcode":"B1lnREEgA7E",
"edge_media_to_caption":{
"edges":[
{
"node":{
"text":"\ud83d\udccdMALLORCA \ud83c\uddea\ud83c\uddf8\n-\nNestled perfectly between the mountains and the sea, this little group of houses seemed to melt right into the landscape. The pop of green from the surrounding nature brought this charming scene to life. -\n\ufffdPhoto by @vickarellaaa #visitmallorca #mallorca #spain #discovermallorca #ig_mallorca #earthpix #tourtheplanet #discoverglobe #ourplanetdaily #earthfocus #amazingdestinations #cheapflights #jacksflightclub"
}
}
]
},
"edge_media_preview_comment":{
"count":4,
"page_info":{
"has_next_page":true,
"end_cursor":"QVFENTd4Wl93N3p5TGt0eHFxWnNHc1A2QnZoay1iWlpUejUxbWVaZzdDT0ZsWTdFRVB4YUtScGloTGYwWmgxZm1VV085NkFQbmRqT2lDQTg5eUUtN1gzbQ=="
},
"edges":[
{
"node":{
"id":"17981334010272066",
"text":"@benrichardson23",
"created_at":1566741489,
"did_report_as_spam":false,
"owner":{
"id":"338824606",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/12cdd412282fd2612c2a558c6c1c424e/5DF20C07/t51.2885-19/s150x150/39336092_1694262494012680_2312725105895014400_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"britanyleigh_"
},
"viewer_has_liked":false
}
},
{
"node":{
"id":"17867827162457041",
"text":"@cristina_f_dasilva",
"created_at":1566743315,
"did_report_as_spam":false,
"owner":{
"id":"1139258710",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/b28175041513b9672e7f5ca479735304/5DF088CF/t51.2885-19/s150x150/30589941_540396623023288_5576886880621821952_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"ddsergio07"
},
"viewer_has_liked":false
}
}
]
},
"gating_info":null,
"media_preview":"ACEq30kVxkYINSZFctBeFOD0PJ9a0hcjbu3ZUDJ//V1oEa+RUUkqxjJIrBk1Mn7oyPWqcl075LYwe3+eaTb6DNv7Sv8Ae/nRXPfaX/vfoKKm0guidbU7vmI+Xrzx9OtJsBZhjP8AdAJx+ffiriwpuLHqef8A9Xv+NJIoLZHDHpzyfb6VoSUY+Tjpx1qRrJgNy/MP55qVcRnLckZPzDH4jmpnk80dSp4xg/n3pDKPlyf3RRV3c3qKKVgJ4wB7/Wq28qxP5VNVd+9bGRRd2c/NzjpTDLjripHqB6llIf5lFQ0VJR//2Q==",
"comments_disabled":false,
"taken_at_timestamp":1566737709,
"edge_media_preview_like":{
"count":353,
"edges":[
]
},
"edge_media_to_sponsor_user":{
"edges":[
]
},
"location":null,
"viewer_has_liked":false,
"viewer_has_saved":false,
"viewer_has_saved_to_collection":false,
"viewer_in_photo_of_you":false,
"viewer_can_reshare":true,
"owner":{
"id":"3945672602",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/12bc576c6aac1a0e7fea5cbbe72fab68/5DFCC502/t51.2885-19/s150x150/26430072_177513656188084_7526879711784337408_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"jacksflightclub",
"followed_by_viewer":true,
"full_name":"Jack's Flight Club",
"is_private":false,
"requested_by_viewer":false,
"blocked_by_viewer":false,
"has_blocked_viewer":false
}
}
},
{
"node":{
"__typename":"GraphVideo",
"id":"2118325174486904341",
"dimensions":{
"height":937,
"width":750
},
"display_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/13be8d30a48eb14ed80671b299ef12b9/5D64C46D/t51.2885-15/e35/69264712_912030972487091_8762021111054461246_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"display_resources":[
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/ecdf9ae3cf91b76e7d42650ea14b984b/5D65BB5B/t51.2885-15/sh0.08/e35/p640x640/69264712_912030972487091_8762021111054461246_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":640,
"config_height":800
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/13be8d30a48eb14ed80671b299ef12b9/5D64C46D/t51.2885-15/e35/69264712_912030972487091_8762021111054461246_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":750,
"config_height":937
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/13be8d30a48eb14ed80671b299ef12b9/5D64C46D/t51.2885-15/e35/69264712_912030972487091_8762021111054461246_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":1080,
"config_height":1350
}
],
"follow_hashtag_info":null,
"is_video":true,
"should_log_client_event":false,
"tracking_token":"eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiZDNkNWVkZTkzNjg3NDM0MmI5MzdmMGMzNDA1NWVlMTIyMTE4MzI1MTc0NDg2OTA0MzQxIiwic2VydmVyX3Rva2VuIjoiMTU2Njc0ODY2MTIyNHwyMTE4MzI1MTc0NDg2OTA0MzQxfDg3ODM4MzgxMTl8ZDA1NTk3MzQ4NWMzNDRlYWVhNDI3NGU5YmY2N2YxM2NjYmQ0NjczNjE3ZGFhZTUwMzcwOTM4OWY1OTRjMmYzMyJ9LCJzaWduYXR1cmUiOiIifQ==",
"edge_media_to_tagged_user":{
"edges":[
]
},
"dash_info":{
"is_dash_eligible":true,
"video_dash_manifest":"\n \n \n \n https://instagram.fhel2-1.fna.fbcdn.net/v/t50.2886-16/69645550_480225799441722_2175072939320684476_n.mp4?_nc_ht=instagram.fhel2-1.fna.fbcdn.net&oh=8e9fe032ea72563a8391957fe1e0a895&oe=5D6536D1\n \n \n \n \n \n https://instagram.fhel2-1.fna.fbcdn.net/v/t50.2886-16/70183676_117711399319110_8282320485829783906_n.mp4?_nc_ht=instagram.fhel2-1.fna.fbcdn.net&oh=6bd92b8c63be58720bbe47d6397f6e02&oe=5D65BD57\n \n \n \n \n \n https://instagram.fhel2-1.fna.fbcdn.net/v/t50.2886-16/69881952_350061425899503_7193270124713242713_n.mp4?_nc_ht=instagram.fhel2-1.fna.fbcdn.net&oh=9c1db1af31c9b1171a2d03408111fb4d&oe=5D658FEF\n \n \n \n \n \n https://instagram.fhel2-1.fna.fbcdn.net/v/t50.2886-16/70118498_425225504779268_5310078796542193137_n.mp4?_nc_ht=instagram.fhel2-1.fna.fbcdn.net&oh=ade57d5a98faec912206f45a540d029f&oe=5D65C070\n \n \n \n \n \n \n \n \n https://instagram.fhel2-1.fna.fbcdn.net/v/t50.2886-16/69832620_374445850122732_9090818804720417562_n.mp4?_nc_ht=instagram.fhel2-1.fna.fbcdn.net&oh=608f815048c27e043dc498ecdfcea94c&oe=5D6594B8\n \n \n \n \n \n \n",
"number_of_qualities":4
},
"video_url":"https://scontent.cdninstagram.com/vp/1011cfdd3e091df8c1ad7564efa6964f/5D64B41F/t50.2886-16/69649533_141762473707062_42645298134425542_n.mp4?_nc_ht=scontent.cdninstagram.com",
"video_view_count":567703,
"attribution":null,
"shortcode":"B1lzYXYDy4V",
"edge_media_to_caption":{
"edges":[
{
"node":{
"text":"Video by Ronan Donovan @ronan_donovan | As with many social mammals, the adolescent males always seem to engage in the roughest play. Here, two yearling arctic wolves play with 10-week-old pups on the tundra of Canada\u2019s Ellesmere Island. Even though Gray Mane, as he's called, was only a year old, he was the largest wolf in his pack and he clearly liked to play a little rough with the small pups. \nAs with humans, play reinforces social bonds, promotes physical awareness, and just plain feels good. Check out the current issue of National Geographic for my article on the wolves (written by Neil Shea @neilshea13). A related three-part series on @natgeowild premieres tonight, August 25 at 8 p.m. EST, directed by Tony Gerber and filmed by Luke Padgett and me."
}
}
]
},
"edge_media_preview_comment":{
"count":745,
"page_info":{
"has_next_page":true,
"end_cursor":"QVFDeGZZQzFMNVZFUVpUbVREVlRaZDJRZmh1dEp4N1lDOENPRmt1OFlfdVNFUDVvQXJ1NGVKUXVwTnJHdEJFZV9ENXQtd3lUUlM5M2MwVGhpNkhjQ2U0dQ=="
},
"edges":[
{
"node":{
"id":"18023172757222524",
"text":"Superb!!!!!",
"created_at":1566748647,
"did_report_as_spam":false,
"owner":{
"id":"1697221883",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/d5b51f68d742d6eec423e0dcca920832/5DF7CBDC/t51.2885-19/s150x150/12120393_999447203470795_784571526_a.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"fernandacremilde"
},
"viewer_has_liked":false
}
},
{
"node":{
"id":"17911987840339602",
"text":"This guy has to be the best",
"created_at":1566748654,
"did_report_as_spam":false,
"owner":{
"id":"11707329041",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/74f911388bb105752598dcfd75ca7337/5E0EEAE2/t51.2885-19/s150x150/59919097_331233930837803_9049611661652000768_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"jeremyakin_"
},
"viewer_has_liked":false
}
}
]
},
"gating_info":null,
"media_preview":"ACEqhFs3qKBbZP3v0qVZMHB6fypcjsQcdfX2pDIDaYGQd36GqzKV61aMpUZHFNkIIDdSaAKePeip+KKVx2HCTnHelU7c46t1pEXOTTjGexAB6g0wIRwCW5wM07duG7HHb/PvUoQL1OfpUQfrx7UgG5PpRS80UhkoYj3PrSFmpppe1FwsIcmjmlNMzQAbj7UUlFMR/9k=",
"comments_disabled":false,
"taken_at_timestamp":1566744093,
"edge_media_preview_like":{
"count":173756,
"edges":[
{
"node":{
"id":"320965496",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/26f2a6b06a14d18ff8a1915317b7561e/5DF8A6A4/t51.2885-19/s150x150/40533016_1968510403450030_7907013785250955264_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"irinchik55"
}
}
]
},
"edge_media_to_sponsor_user":{
"edges":[
]
},
"location":null,
"viewer_has_liked":false,
"viewer_has_saved":false,
"viewer_has_saved_to_collection":false,
"viewer_in_photo_of_you":false,
"viewer_can_reshare":true,
"owner":{
"id":"787132",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/06ec75947ace6228666ef7ac7c8d9e1b/5E1141E8/t51.2885-19/s150x150/13597791_261499887553333_1855531912_a.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"natgeo",
"followed_by_viewer":true,
"full_name":"National Geographic",
"is_private":false,
"requested_by_viewer":false,
"blocked_by_viewer":false,
"has_blocked_viewer":false
}
}
},
{
"node":{
"__typename":"GraphVideo",
"id":"2117022749628464153",
"dimensions":{
"height":422,
"width":750
},
"display_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/0e69ec5084ff3c9ede40d3159f8e6c26/5D65210A/t51.2885-15/e35/67119652_2559484460769742_3380884424279150627_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"display_resources":[
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/745529ffa742381f0e885ad745152391/5D652070/t51.2885-15/sh0.08/e35/s640x640/67119652_2559484460769742_3380884424279150627_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":640,
"config_height":360
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/0e69ec5084ff3c9ede40d3159f8e6c26/5D65210A/t51.2885-15/e35/67119652_2559484460769742_3380884424279150627_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":750,
"config_height":422
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/0e69ec5084ff3c9ede40d3159f8e6c26/5D65210A/t51.2885-15/e35/67119652_2559484460769742_3380884424279150627_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":1080,
"config_height":609
}
],
"follow_hashtag_info":null,
"is_video":true,
"should_log_client_event":false,
"tracking_token":"eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiZDNkNWVkZTkzNjg3NDM0MmI5MzdmMGMzNDA1NWVlMTIyMTE3MDIyNzQ5NjI4NDY0MTUzIiwic2VydmVyX3Rva2VuIjoiMTU2Njc0ODY2MTIyNHwyMTE3MDIyNzQ5NjI4NDY0MTUzfDg3ODM4MzgxMTl8ODYzN2Y4NDFlNzNlYmQ5YjM0NjE1ZjkxOWQzMmZlZDViZGYxYzYzZGVmODI4MDY1MjkxNTUwNWEwYmYzNTEyZCJ9LCJzaWduYXR1cmUiOiIifQ==",
"edge_media_to_tagged_user":{
"edges":[
]
},
"dash_info":{
"is_dash_eligible":true,
"video_dash_manifest":"\n \n \n \n https://instagram.fhel2-1.fna.fbcdn.net/v/t50.2886-16/69414956_547626535980296_8152974537214640359_n.mp4?_nc_ht=instagram.fhel2-1.fna.fbcdn.net&oh=df28f713b5f700d0f1d561374fde63c6&oe=5D65B685\n \n \n \n \n \n \n \n \n https://instagram.fhel2-1.fna.fbcdn.net/v/t50.2886-16/69600379_665246090552701_572347131944147546_n.mp4?_nc_ht=instagram.fhel2-1.fna.fbcdn.net&oh=704693dd3a1591790d21b88563f39423&oe=5D653B89\n \n \n \n \n \n \n",
"number_of_qualities":1
},
"video_url":"https://scontent.cdninstagram.com/vp/ca404406fa1161b8c621bca6dc651fbc/5D65BE04/t50.2886-16/69750299_170045060719808_7002627152866847262_n.mp4?_nc_ht=scontent.cdninstagram.com",
"video_view_count":776,
"attribution":null,
"shortcode":"B1hLPltBnwZg1BhgTymFZBu_SMeXTQBw0o7Kx40",
"edge_media_to_caption":{
"edges":[
{
"node":{
"text":"\u041f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435! \u0414\u0435\u043d\u0435\u0436\u043d\u0430\u044f \u0447\u0430\u043a\u0440\u0430! \u0414\u0435\u043d\u0435\u0436\u043d\u0430\u044f \u041c\u0435\u0434\u0438\u0442\u0430\u0446\u0438\u044f! \u0410\u043b\u043b\u0438\u043b\u0443\u044f! #227\n\n\u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u0438\u0434\u0435\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043c\u043e\u0435\u043c \u044e\u0442\u0443\u0431 \u043a\u0430\u043d\u0430\u043b\u0435.\n\n#\u0441\u043c\u044b\u0441\u043b\u0436\u0438\u0437\u043d\u0438 #\u0434\u0443\u0445\u043e\u0432\u043d\u043e\u0441\u0442\u044c #\u0430\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043a\u043e\u0440\u043e\u043b\u044c #\u0434\u0437\u0435\u043d #\u043c\u0430\u0433\u0438\u044f #\u0430\u0441\u0442\u0440\u043e\u043b\u043e\u0433\u0438\u044f #\u0441\u0430\u043c\u043e\u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 #\u0441\u0430\u043c\u043e\u043f\u043e\u0437\u043d\u0430\u043d\u0438\u0435\n#\u043f\u0441\u0438\u0445\u043e\u043b\u043e\u0433\u0438\u044f #\u0442\u0435\u043e\u043b\u043e\u0433\u0438\u044f #\u0431\u0443\u0434\u0434\u0438\u0437\u043c #\u0439\u043e\u0433\u0430 #\u0441\u0430\u043c\u043e\u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 #\u0441\u043e\u0446\u0438\u043e\u043b\u043e\u0433\u0438\u044f #\u043b\u0430\u0439\u0444\u0445\u0430\u043a #\u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u044f #\u043c\u0435\u0434\u0438\u0442\u0430\u0446\u0438\u044f"
}
}
]
},
"edge_media_preview_comment":{
"count":2,
"page_info":{
"has_next_page":false,
"end_cursor":null
},
"edges":[
{
"node":{
"id":"17971027423303829",
"text":"\ud83d\udc4d",
"created_at":1566632816,
"did_report_as_spam":false,
"owner":{
"id":"5614861126",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/d2b48cf5e1baf77aca502892b92e5a9b/5DF8C99F/t51.2885-19/s150x150/35988631_1734823516608919_2917821848269881344_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"guryanova_natalya_555"
},
"viewer_has_liked":false
}
},
{
"node":{
"id":"17846204974594318",
"text":"\u0412 \u0414\u043d\u0435\u0432\u043d\u0438\u043a\u0435 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432 \u043c\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u043b\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u043d\u0430 29.06. \u041f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c.",
"created_at":1566741569,
"did_report_as_spam":false,
"owner":{
"id":"728458486",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/eb3ee5eb1ec510158bd7549df47a337f/5DFD0D63/t51.2885-19/s150x150/52328454_325651801433400_6764441670063751168_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"natalia_peshkova_"
},
"viewer_has_liked":false
}
}
]
},
"gating_info":null,
"media_preview":"ACoXuItThcDNRpTpZRGhJpgRLdI0nlYOem7+HOM4+v8AXip2UVipI6vkL8zHcBjjjvjvWssnmKGPB6EehHWgCtKoqkVFXJTVSgZoK1MuFDoQelFFAjG3FjliSRwD3Hpj0/CtaEKicZ+b5jk5JJHNFFICKQ1XzRRTA//Z",
"comments_disabled":false,
"taken_at_timestamp":1566588862,
"edge_media_preview_like":{
"count":110,
"edges":[
]
},
"edge_media_to_sponsor_user":{
"edges":[
]
},
"location":null,
"viewer_has_liked":false,
"viewer_has_saved":false,
"viewer_has_saved_to_collection":false,
"viewer_in_photo_of_you":false,
"viewer_can_reshare":true,
"owner":{
"id":"13846418535",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/c799dbeb8dd63a90765c788cc2203fa9/5E0071C7/t51.2885-19/s150x150/60779355_2621644501196839_286519566123663360_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"akchapters",
"followed_by_viewer":true,
"full_name":"\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u041a\u043e\u0440\u043e\u043b\u044c | \u0413\u043b\u0430\u0432\u044b",
"is_private":true,
"requested_by_viewer":false,
"blocked_by_viewer":false,
"has_blocked_viewer":false
}
}
},
{
"node":{
"__typename":"GraphImage",
"id":"2118275964722976214",
"dimensions":{
"height":720,
"width":1080
},
"display_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/1085b370651736213d955a4b230d0778/5E04B310/t51.2885-15/fr/e15/s1080x1080/67730127_467681310751565_4014535606315768508_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"display_resources":[
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/7f43bcc1f960132f210de3f3fb2bfc9e/5E1126AA/t51.2885-15/sh0.08/e35/s640x640/67730127_467681310751565_4014535606315768508_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":640,
"config_height":426
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/02030df1e61d53d8e363e956b6003d50/5DF4D6AA/t51.2885-15/sh0.08/e35/s750x750/67730127_467681310751565_4014535606315768508_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":750,
"config_height":500
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/1085b370651736213d955a4b230d0778/5E04B310/t51.2885-15/fr/e15/s1080x1080/67730127_467681310751565_4014535606315768508_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":1080,
"config_height":720
}
],
"follow_hashtag_info":null,
"is_video":false,
"should_log_client_event":false,
"tracking_token":"eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiZDNkNWVkZTkzNjg3NDM0MmI5MzdmMGMzNDA1NWVlMTIyMTE4Mjc1OTY0NzIyOTc2MjE0Iiwic2VydmVyX3Rva2VuIjoiMTU2Njc0ODY2MTIyNXwyMTE4Mjc1OTY0NzIyOTc2MjE0fDg3ODM4MzgxMTl8ZTk3NWRhMTFkOTMyYWE5MTlhYTBlODM5YzQzNjE3OTRmZTZkNDU2ODI1YTUwYWEwNjA2MTFkZDJkODZmZjM0NyJ9LCJzaWduYXR1cmUiOiIifQ==",
"edge_media_to_tagged_user":{
"edges":[
]
},
"accessibility_caption":"\u041d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f: \u043d\u0435\u0431\u043e, \u043e\u0431\u043b\u0430\u043a\u043e, \u043e\u043a\u0435\u0430\u043d, \u043d\u0430 \u0443\u043b\u0438\u0446\u0435, \u043f\u0440\u0438\u0440\u043e\u0434\u0430 \u0438 \u0432\u043e\u0434\u0430",
"attribution":null,
"shortcode":"B1loMRNj5XW",
"edge_media_to_caption":{
"edges":[
{
"node":{
"text":"Photo by @bethjwald | The sun sets over a panoramic view looking towards the White Rim region of Canyonlands National Park in southeastern Utah. The vast Canyonlands National Park protects dramatic landscapes of canyons carved by the Colorado River, fragile desert ecosystems, Native American rock paintings, dark skies and important watersheds and rivers from an array of threats, including mining, over-grazing, off-road vehicle use and development so that visitors will forever be able to lose themselves amongst its canyons and natural wonders. I have spent many weeks exploring the canyon worlds of this national park and its dramatic vistas helped form my photographic eye. National parks make available to all the natural wonders and heritage of our country and are an intrinsic part of America. In honor of the 103rd anniversary of the founding of the National Park Service we celebrate the National Parks today. For more photos of our ancient and modern relationship with nature and of national parks around the world, follow me at @bethjwald. #canyonlove #canyonlandsnationalpark #americasbestidea #nationalparklove #findyourpark"
}
}
]
},
"edge_media_preview_comment":{
"count":242,
"page_info":{
"has_next_page":true,
"end_cursor":"QVFCbGdQZnNMSG9IWE0yNkp0YXRlQjVtTG5tcXR0WWhacmREdDktZWxpWlpKYjlwYWFxRm9MTUdBaGluWG14eFlLSlpZVjFjMGs0UjRRVUNvVnY0anNjMg=="
},
"edges":[
{
"node":{
"id":"18014094958243085",
"text":"@ohhverbatim",
"created_at":1566748562,
"did_report_as_spam":false,
"owner":{
"id":"511750325",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/436f8a8d5a3e49237fdec94b16cd7b2a/5DF7E380/t51.2885-19/s150x150/28433529_154752318545706_5371696231099662336_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"pave_my_own_path"
},
"viewer_has_liked":false
}
},
{
"node":{
"id":"17843042854610326",
"text":"I got the GREATEST SPEAKING VOICE of all time If you doubt me check my IG and see!\ud83d\ude4f\ud83c\udfff\ud83d\ude4f\ud83c\udfff",
"created_at":1566748606,
"did_report_as_spam":false,
"owner":{
"id":"3166297639",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/5ee97b877de5019265b5d87331dca9e9/5DF39CF8/t51.2885-19/s150x150/66825378_2154949204810780_4891192315273543680_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"peoplesparadisepodcast"
},
"viewer_has_liked":false
}
}
]
},
"gating_info":null,
"media_preview":"ACoclEk46qp/z9aPPfPMYx3rJ30F6jlfVr7v+CaXXZ/ebHmk/wAGPrjH8qiMgPZfzFZLvn1phI7UW8xaGx16KPzpmG/uiswISMk4FGxvf8qd/MnlXYZmk3UAZwPWpY0HWncoiALdBmp/Lx7nPAqw3yDirSKFGQO1ZuRoolbkHGCMD8B/n/JpmD/lv/r0E7pMHp1/L+lSbF9KBH//2Q==",
"comments_disabled":false,
"taken_at_timestamp":1566738194,
"edge_media_preview_like":{
"count":116360,
"edges":[
]
},
"edge_media_to_sponsor_user":{
"edges":[
]
},
"location":null,
"viewer_has_liked":false,
"viewer_has_saved":false,
"viewer_has_saved_to_collection":false,
"viewer_in_photo_of_you":false,
"viewer_can_reshare":true,
"owner":{
"id":"23947096",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/e56487890a4a526c8e866eadbc3159fb/5DF5DD39/t51.2885-19/s150x150/12132724_850743081710560_180824582_a.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"natgeotravel",
"followed_by_viewer":true,
"full_name":"National Geographic Travel",
"is_private":false,
"requested_by_viewer":false,
"blocked_by_viewer":false,
"has_blocked_viewer":false
}
}
},
{
"node":{
"__typename":"GraphImage",
"id":"2118003247143649215",
"dimensions":{
"height":771,
"width":1080
},
"display_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/d45df7f87a045312aa73523f8b210777/5DF280A0/t51.2885-15/fr/e15/s1080x1080/67617540_2065364250426167_7422279937392285823_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"display_resources":[
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/562fd3830b407d0b9efb49a7f8521535/5DF50E69/t51.2885-15/sh0.08/e35/s640x640/67617540_2065364250426167_7422279937392285823_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":640,
"config_height":456
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/a6985f213dc53c31a14ac50b003494de/5DF091AD/t51.2885-15/sh0.08/e35/s750x750/67617540_2065364250426167_7422279937392285823_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":750,
"config_height":535
},
{
"src":"https://instagram.fhel2-1.fna.fbcdn.net/vp/d45df7f87a045312aa73523f8b210777/5DF280A0/t51.2885-15/fr/e15/s1080x1080/67617540_2065364250426167_7422279937392285823_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"config_width":1080,
"config_height":771
}
],
"follow_hashtag_info":null,
"is_video":false,
"should_log_client_event":false,
"tracking_token":"eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiZDNkNWVkZTkzNjg3NDM0MmI5MzdmMGMzNDA1NWVlMTIyMTE4MDAzMjQ3MTQzNjQ5MjE1Iiwic2VydmVyX3Rva2VuIjoiMTU2Njc0ODY2MTIyNXwyMTE4MDAzMjQ3MTQzNjQ5MjE1fDg3ODM4MzgxMTl8NmYwMWQ1OTBhZjkxY2ZhZTFkYzlhOTAzZDdhYWZhYzNmOTc1Y2ExZDQzZTFlZTJlZjAwZTYxZGZjY2QxMzc3MyJ9LCJzaWduYXR1cmUiOiIifQ==",
"edge_media_to_tagged_user":{
"edges":[
]
},
"accessibility_caption":"\u041d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f: \u043d\u0435\u0431\u043e, \u0434\u0435\u0440\u0435\u0432\u043e, \u043d\u0430 \u0443\u043b\u0438\u0446\u0435 \u0438 \u043f\u0440\u0438\u0440\u043e\u0434\u0430",
"attribution":null,
"shortcode":"B1kqLtLHv-_",
"edge_media_to_caption":{
"edges":[
{
"node":{
"text":"Photo by @MichaelGeorge | If cities are the heart of the US, National Parks are its soul. Every time I get the opportunity to wander into this wild silence of nature I am humbled beyond measure. Our National Parks also showcase the diversity of land that makes up this country. From the face-melting swamps of the Everglades, to the crisp serene setting seen here. This image was taken during a hike on Hurricane Ridge in Olympic National Park. These two deer stood silently on the ridge, as the fog began to roll in. Their silhouettes illustrate one of many painterly moments I experienced on this hike. Visiting a National Park is one of the best (and least expensive!) adventures you can take yourself on. For this 103rd anniversary of the National Park\u2019s founding, I am forever grateful for this protected land. #nationalparks #hurricaneridge #olympicnationalpark #washington #deer"
}
}
]
},
"edge_media_preview_comment":{
"count":505,
"page_info":{
"has_next_page":true,
"end_cursor":"QVFEY0tTNkNhcnV2Qm5CSnF2NjJwXzlFaUE0VXdPVzF4b0ZqbVItMmNVeEFCbC00aGdqRTdRNGxSOW9WOHc2dGhad0RBOFJJOHNOWnMzSV85NWhRUW9rVg=="
},
"edges":[
{
"node":{
"id":"17847469972575823",
"text":"I love this\ud83d\udc4c\ud83d\udc4c\ud83d\udc4c\ud83d\udc4c",
"created_at":1566748528,
"did_report_as_spam":false,
"owner":{
"id":"16635492189",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/048f2e98959113e152b2c5c002153adb/5E14C866/t51.2885-19/s150x150/69955433_1465673260242266_8501495765061861376_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"supertramp_ll"
},
"viewer_has_liked":false
}
},
{
"node":{
"id":"17860151434493563",
"text":"\u2618\ufe0f\u2618\ufe0f",
"created_at":1566748544,
"did_report_as_spam":false,
"owner":{
"id":"4075637980",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/ce544a4474591eae6598094134630083/5E13CF05/t51.2885-19/s150x150/15803591_236849253431666_2280179815115915264_n.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"alexandermmaltsev"
},
"viewer_has_liked":false
}
}
]
},
"gating_info":null,
"media_preview":"ACod6GlqPdSeYvrQK5JS1lPqsYVnUMQgzyNvOcADPXPP5U06vDkj0AOfXPpRYLmqTioROhGQwwfcVkz6zDtITLMQccYAPuf8K5nJ9TTA07jVZZT8nyL6d/xqot3KpyDyM4zzjP8AWq1FMRO91LIuxmJX0zxUFFFABRRRQB//2Q==",
"comments_disabled":false,
"taken_at_timestamp":1566705684,
"edge_media_preview_like":{
"count":235639,
"edges":[
]
},
"edge_media_to_sponsor_user":{
"edges":[
]
},
"location":null,
"viewer_has_liked":false,
"viewer_has_saved":false,
"viewer_has_saved_to_collection":false,
"viewer_in_photo_of_you":false,
"viewer_can_reshare":true,
"owner":{
"id":"23947096",
"profile_pic_url":"https://instagram.fhel2-1.fna.fbcdn.net/vp/e56487890a4a526c8e866eadbc3159fb/5DF5DD39/t51.2885-19/s150x150/12132724_850743081710560_180824582_a.jpg?_nc_ht=instagram.fhel2-1.fna.fbcdn.net",
"username":"natgeotravel",
"followed_by_viewer":true,
"full_name":"National Geographic Travel",
"is_private":false,
"requested_by_viewer":false,
"blocked_by_viewer":false,
"has_blocked_viewer":false
}
}
}
]
}
}
},
"status":"ok"
}
================================================
FILE: 4-api/3_graphql/intro/readme.md
================================================
query ($number_of_repos: Int!) {
viewer {
name
login
repositories {
totalCount
}
followers {
totalCount
}
starredRepositories(last: $number_of_repos) {
totalCount
nodes {
name
description
forkCount
homepageUrl
stargazers {
totalCount
}
updatedAt
}
}
}
}
-----
query ($number_of_repos: Int!) {
viewer {
name
login
starredRepositories(last: $number_of_repos) {
totalCount
nodes {
name
description
homepageUrl
updatedAt
issues(last: 3, states: OPEN) {
edges {
node {
title
url
}
}
}
}
}
}
}
================================================
FILE: 4-api/3_graphql/intro/schema.public.graphql
================================================
"""
Defines what type of global IDs are accepted for a mutation argument of type ID.
"""
directive @possibleTypes(
"""
Abstract type of accepted global ID
"""
abstractType: String
"""
Accepted types of global IDs.
"""
concreteTypes: [String!]!
) on INPUT_FIELD_DEFINITION
"""
Marks an element of a GraphQL schema as only available via a preview header
"""
directive @preview(
"""
The identifier of the API preview that toggles this field.
"""
toggledBy: String
) on SCALAR | OBJECT | FIELD_DEFINITION | ARGUMENT_DEFINITION | INTERFACE | UNION | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION
"""
Autogenerated input type of AcceptBusinessMemberInvitation
"""
input AcceptBusinessMemberInvitationInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The id of the invitation being accepted
"""
invitationId: ID! @possibleTypes(concreteTypes: ["BusinessMemberInvitation"])
}
"""
Autogenerated return type of AcceptBusinessMemberInvitation
"""
type AcceptBusinessMemberInvitationPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The invitation that was accepted.
"""
invitation: BusinessMemberInvitation @preview(toggledBy: "gwenpool-preview")
"""
A message confirming the result of accepting an administrator invitation.
"""
message: String
}
"""
Autogenerated input type of AcceptTopicSuggestion
"""
input AcceptTopicSuggestionInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The name of the suggested topic.
"""
name: String!
"""
The Node ID of the repository.
"""
repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])
}
"""
Autogenerated return type of AcceptTopicSuggestion
"""
type AcceptTopicSuggestionPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The accepted topic.
"""
topic: Topic
}
"""
Represents an object which can take actions on GitHub. Typically a User or Bot.
"""
interface Actor {
"""
A URL pointing to the actor's public avatar.
"""
avatarUrl(
"""
The size of the resulting square image.
"""
size: Int
): URI!
"""
The username of the actor.
"""
login: String!
"""
The HTTP path for this actor.
"""
resourcePath: URI!
"""
The HTTP URL for this actor.
"""
url: URI!
}
"""
Autogenerated input type of AddAssigneesToAssignable
"""
input AddAssigneesToAssignableInput @preview(toggledBy: "starfire-preview") {
"""
The id of the assignable object to add assignees to.
"""
assignableId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "Assignable")
"""
The id of users to add as assignees.
"""
assigneeIds: [ID!]! @possibleTypes(concreteTypes: ["User"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated return type of AddAssigneesToAssignable
"""
type AddAssigneesToAssignablePayload @preview(toggledBy: "starfire-preview") {
"""
The item that was assigned.
"""
assignable: Assignable
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated input type of AddComment
"""
input AddCommentInput {
"""
The contents of the comment.
"""
body: String!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Node ID of the subject to modify.
"""
subjectId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "IssueOrPullRequest")
}
"""
Autogenerated return type of AddComment
"""
type AddCommentPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The edge from the subject's comment connection.
"""
commentEdge: IssueCommentEdge
"""
The subject
"""
subject: Node
"""
The edge from the subject's timeline connection.
"""
timelineEdge: IssueTimelineItemEdge
}
"""
Autogenerated input type of AddLabelsToLabelable
"""
input AddLabelsToLabelableInput @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ids of the labels to add.
"""
labelIds: [ID!]! @possibleTypes(concreteTypes: ["Label"])
"""
The id of the labelable object to add labels to.
"""
labelableId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "Labelable")
}
"""
Autogenerated return type of AddLabelsToLabelable
"""
type AddLabelsToLabelablePayload @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The item that was labeled.
"""
labelable: Labelable
}
"""
Autogenerated input type of AddProjectCard
"""
input AddProjectCardInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The content of the card. Must be a member of the ProjectCardItem union
"""
contentId: ID @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "ProjectCardItem")
"""
The note on the card.
"""
note: String
"""
The Node ID of the ProjectColumn.
"""
projectColumnId: ID! @possibleTypes(concreteTypes: ["ProjectColumn"])
}
"""
Autogenerated return type of AddProjectCard
"""
type AddProjectCardPayload {
"""
The edge from the ProjectColumn's card connection.
"""
cardEdge: ProjectCardEdge
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ProjectColumn
"""
projectColumn: ProjectColumn
}
"""
Autogenerated input type of AddProjectColumn
"""
input AddProjectColumnInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The name of the column.
"""
name: String!
"""
The Node ID of the project.
"""
projectId: ID! @possibleTypes(concreteTypes: ["Project"])
}
"""
Autogenerated return type of AddProjectColumn
"""
type AddProjectColumnPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The edge from the project's column connection.
"""
columnEdge: ProjectColumnEdge
"""
The project
"""
project: Project
}
"""
Autogenerated input type of AddPullRequestReviewComment
"""
input AddPullRequestReviewCommentInput {
"""
The text of the comment.
"""
body: String!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The SHA of the commit to comment on.
"""
commitOID: GitObjectID
"""
The comment id to reply to.
"""
inReplyTo: ID @possibleTypes(concreteTypes: ["PullRequestReviewComment"])
"""
The relative path of the file to comment on.
"""
path: String
"""
The line index in the diff to comment on.
"""
position: Int
"""
The Node ID of the review to modify.
"""
pullRequestReviewId: ID! @possibleTypes(concreteTypes: ["PullRequestReview"])
}
"""
Autogenerated return type of AddPullRequestReviewComment
"""
type AddPullRequestReviewCommentPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The newly created comment.
"""
comment: PullRequestReviewComment
"""
The edge from the review's comment connection.
"""
commentEdge: PullRequestReviewCommentEdge
}
"""
Autogenerated input type of AddPullRequestReview
"""
input AddPullRequestReviewInput {
"""
The contents of the review body comment.
"""
body: String
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The review line comments.
"""
comments: [DraftPullRequestReviewComment]
"""
The commit OID the review pertains to.
"""
commitOID: GitObjectID
"""
The event to perform on the pull request review.
"""
event: PullRequestReviewEvent
"""
The Node ID of the pull request to modify.
"""
pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"])
}
"""
Autogenerated return type of AddPullRequestReview
"""
type AddPullRequestReviewPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The newly created pull request review.
"""
pullRequestReview: PullRequestReview
"""
The edge from the pull request's review connection.
"""
reviewEdge: PullRequestReviewEdge
}
"""
Autogenerated input type of AddReaction
"""
input AddReactionInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The name of the emoji to react with.
"""
content: ReactionContent!
"""
The Node ID of the subject to modify.
"""
subjectId: ID! @possibleTypes(concreteTypes: ["CommitComment", "Issue", "IssueComment", "PullRequest", "PullRequestReview", "PullRequestReviewComment", "TeamDiscussion", "TeamDiscussionComment"], abstractType: "Reactable")
}
"""
Autogenerated return type of AddReaction
"""
type AddReactionPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The reaction object.
"""
reaction: Reaction
"""
The reactable subject.
"""
subject: Reactable
}
"""
Autogenerated input type of AddStar
"""
input AddStarInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Starrable ID to star.
"""
starrableId: ID! @possibleTypes(concreteTypes: ["Gist", "Repository", "Topic"], abstractType: "Starrable")
}
"""
Autogenerated return type of AddStar
"""
type AddStarPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The starrable.
"""
starrable: Starrable
}
"""
Represents a 'added_to_project' event on a given issue or pull request.
"""
type AddedToProjectEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
"""
Project referenced by event.
"""
project: Project @preview(toggledBy: "starfox-preview")
"""
Project card referenced by this project event.
"""
projectCard: ProjectCard @preview(toggledBy: "starfox-preview")
"""
Column name referenced by this project event.
"""
projectColumnName: String! @preview(toggledBy: "starfox-preview")
}
"""
A GitHub App.
"""
type App implements Node {
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The description of the app.
"""
description: String
id: ID!
"""
The hex color code, without the leading '#', for the logo background.
"""
logoBackgroundColor: String!
"""
A URL pointing to the app's logo.
"""
logoUrl(
"""
The size of the resulting image.
"""
size: Int
): URI!
"""
The name of the app.
"""
name: String!
"""
A slug based on the name of the app for use in URLs.
"""
slug: String!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The URL to the app's homepage.
"""
url: URI!
}
"""
An object that can have users assigned to it.
"""
interface Assignable {
"""
A list of Users assigned to this object.
"""
assignees(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection!
}
"""
Represents an 'assigned' event on any assignable object.
"""
type AssignedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the assignable associated with the event.
"""
assignable: Assignable!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
Identifies the user who was assigned.
"""
user: User
}
"""
Represents a 'base_ref_changed' event on a given issue or pull request.
"""
type BaseRefChangedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
}
"""
Represents a 'base_ref_force_pushed' event on a given pull request.
"""
type BaseRefForcePushedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the after commit SHA for the 'base_ref_force_pushed' event.
"""
afterCommit: Commit
"""
Identifies the before commit SHA for the 'base_ref_force_pushed' event.
"""
beforeCommit: Commit
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
PullRequest referenced by event.
"""
pullRequest: PullRequest!
"""
Identifies the fully qualified ref name for the 'base_ref_force_pushed' event.
"""
ref: Ref
}
"""
Represents a Git blame.
"""
type Blame {
"""
The list of ranges from a Git blame.
"""
ranges: [BlameRange!]!
}
"""
Represents a range of information from a Git blame.
"""
type BlameRange {
"""
Identifies the recency of the change, from 1 (new) to 10 (old). This is
calculated as a 2-quantile and determines the length of distance between the
median age of all the changes in the file and the recency of the current
range's change.
"""
age: Int!
"""
Identifies the line author
"""
commit: Commit!
"""
The ending line for the range
"""
endingLine: Int!
"""
The starting line for the range
"""
startingLine: Int!
}
"""
Represents a Git blob.
"""
type Blob implements GitObject & Node {
"""
An abbreviated version of the Git object ID
"""
abbreviatedOid: String!
"""
Byte size of Blob object
"""
byteSize: Int!
"""
The HTTP path for this Git object
"""
commitResourcePath: URI!
"""
The HTTP URL for this Git object
"""
commitUrl: URI!
id: ID!
"""
Indicates whether the Blob is binary or text
"""
isBinary: Boolean!
"""
Indicates whether the contents is truncated
"""
isTruncated: Boolean!
"""
The Git object ID
"""
oid: GitObjectID!
"""
The Repository the Git object belongs to
"""
repository: Repository!
"""
UTF8 text data or null if the Blob is binary
"""
text: String
}
"""
A special type of user which takes actions on behalf of GitHub Apps.
"""
type Bot implements Actor & Node & UniformResourceLocatable {
"""
A URL pointing to the GitHub App's public avatar.
"""
avatarUrl(
"""
The size of the resulting square image.
"""
size: Int
): URI!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
"""
The username of the actor.
"""
login: String!
"""
The HTTP path for this bot
"""
resourcePath: URI!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL for this bot
"""
url: URI!
}
"""
A branch protection rule.
"""
type BranchProtectionRule implements Node {
"""
A list of conflicts matching branches protection rule and other branch protection rules
"""
branchProtectionRuleConflicts(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): BranchProtectionRuleConflictConnection!
"""
The actor who created this branch protection rule.
"""
creator: Actor
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
Will new commits pushed to matching branches dismiss pull request review approvals.
"""
dismissesStaleReviews: Boolean!
id: ID!
"""
Can admins overwrite branch protection.
"""
isAdminEnforced: Boolean!
"""
Repository refs that are protected by this rule
"""
matchingRefs(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): RefConnection!
"""
Identifies the protection rule pattern.
"""
pattern: String!
"""
A list push allowances for this branch protection rule.
"""
pushAllowances(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): PushAllowanceConnection!
"""
The repository associated with this branch protection rule.
"""
repository: Repository
"""
Number of approving reviews required to update matching branches.
"""
requiredApprovingReviewCount: Int
"""
List of required status check contexts that must pass for commits to be accepted to matching branches.
"""
requiredStatusCheckContexts: [String]
"""
Are approving reviews required to update matching branches.
"""
requiresApprovingReviews: Boolean!
"""
Are commits required to be signed.
"""
requiresCommitSignatures: Boolean!
"""
Are status checks required to update matching branches.
"""
requiresStatusChecks: Boolean!
"""
Are branches required to be up to date before merging.
"""
requiresStrictStatusChecks: Boolean!
"""
Is pushing to matching branches restricted.
"""
restrictsPushes: Boolean!
"""
Is dismissal of pull request reviews restricted.
"""
restrictsReviewDismissals: Boolean!
"""
A list review dismissal allowances for this branch protection rule.
"""
reviewDismissalAllowances(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): ReviewDismissalAllowanceConnection!
}
"""
A conflict between two branch protection rules.
"""
type BranchProtectionRuleConflict {
"""
Identifies the branch protection rule.
"""
branchProtectionRule: BranchProtectionRule
"""
Identifies the conflicting branch protection rule.
"""
conflictingBranchProtectionRule: BranchProtectionRule
"""
Identifies the branch ref that has conflicting rules
"""
ref: Ref
}
"""
The connection type for BranchProtectionRuleConflict.
"""
type BranchProtectionRuleConflictConnection {
"""
A list of edges.
"""
edges: [BranchProtectionRuleConflictEdge]
"""
A list of nodes.
"""
nodes: [BranchProtectionRuleConflict]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type BranchProtectionRuleConflictEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: BranchProtectionRuleConflict
}
"""
The connection type for BranchProtectionRule.
"""
type BranchProtectionRuleConnection {
"""
A list of edges.
"""
edges: [BranchProtectionRuleEdge]
"""
A list of nodes.
"""
nodes: [BranchProtectionRule]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type BranchProtectionRuleEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: BranchProtectionRule
}
"""
A group of one or more organizations with consolidated billing.
"""
type Business implements Node @preview(toggledBy: "gwenpool-preview") {
"""
Business information only visible to admins
"""
adminInfo: BusinessAdminInfo
"""
A URL pointing to the business's public avatar.
"""
avatarUrl(
"""
The size of the resulting square image.
"""
size: Int
): URI!
"""
Business billing information visible to billing managers
"""
billingInfo: BusinessBillingInfo
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The description of the business
"""
description: String
"""
The description of the business as HTML.
"""
descriptionHTML: HTML!
id: ID!
"""
The location of the business
"""
location: String
"""
The name of the business
"""
name: String!
"""
A list of organizations that belong to this business.
"""
organizations(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for organizations returned from the connection.
"""
orderBy: OrganizationOrder = {field: LOGIN, direction: ASC}
): OrganizationConnection!
"""
The HTTP path for this business.
"""
resourcePath: URI!
"""
The HTTP URL for this business.
"""
url: URI!
"""
Is the current viewer an admin of this business?
"""
viewerIsAdmin: Boolean!
"""
The URL for the business's website
"""
websiteUrl: URI
}
"""
Business information only visible to admins
"""
type BusinessAdminInfo @preview(toggledBy: "gwenpool-preview") {
"""
A list of all of the admins for this business.
"""
admins(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
The search string to look for.
"""
query: String
): UserConnection!
"""
A list of users in the business who currently have two-factor authentication disabled
"""
affiliatedUsersWithTwoFactorDisabled(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection!
"""
Whether or not affiliated users with two-factor auth disabled exist in the business.
"""
affiliatedUsersWithTwoFactorDisabledExist: Boolean!
"""
The setting value for whether private repository forking is enabled for repositories in organizations in this business.
"""
allowPrivateRepositoryForkingSetting: BusinessEnabledDisabledSettingValue!
"""
The setting value for base repository permissions for organizations in this business.
"""
defaultRepositoryPermissionSetting: BusinessDefaultRepositoryPermissionSettingValue!
"""
Whether or not the default repository permission is currently being updated.
"""
isUpdatingDefaultRepositoryPermission: Boolean!
"""
Whether the two factor requirement is currently being enforced
"""
isUpdatingTwoFactorRequirement: Boolean!
"""
The setting value for whether organization members with admin permissions on a
repository can change repository visibility.
"""
membersCanChangeRepositoryVisibilitySetting: BusinessEnabledDisabledSettingValue!
"""
The setting value for whether members of organizations in the business can create repositories.
"""
membersCanCreateRepositoriesSetting: BusinessMembersCanCreateRepositoriesSettingValue!
"""
The setting value for whether members with admin permissions for repositories can delete issues.
"""
membersCanDeleteIssuesSetting: BusinessEnabledDisabledSettingValue!
"""
The setting value for whether members with admin permissions for repositories can delete or transfer repositories.
"""
membersCanDeleteRepositoriesSetting: BusinessEnabledDisabledSettingValue!
"""
The setting value for whether members of organizations in the business can invite outside collaborators.
"""
membersCanInviteCollaboratorsSetting: BusinessEnabledDisabledSettingValue!
"""
The setting value for whether members with admin permissions for repositories can update protected branches.
"""
membersCanUpdateProtectedBranchesSetting: BusinessEnabledDisabledSettingValue!
"""
The setting value for whether organization projects are enabled for organizations in this business.
"""
organizationProjectsSetting: BusinessEnabledDisabledSettingValue!
"""
A list of pending admin invitations for the business.
"""
pendingAdminInvitations(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
The search string to look for.
"""
query: String
): BusinessMemberInvitationConnection!
"""
A list of pending member invitations in the business.
"""
pendingMemberInvitations(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
The search string to look for.
"""
query: String
): BusinessPendingMemberInvitationConnection!
"""
The setting value for whether repository projects are enabled in this business.
"""
repositoryProjectsSetting: BusinessEnabledDisabledSettingValue!
"""
The setting value for whether team discussions are enabled for organizations in this business.
"""
teamDiscussionsSetting: BusinessEnabledDisabledSettingValue!
"""
The setting value for whether the business requires two factor authentication for its organizations and users
"""
twoFactorRequiredSetting: BusinessEnabledSettingValue!
}
"""
Business billing information visible to billing managers and admins
"""
type BusinessBillingInfo @preview(toggledBy: "gwenpool-preview") {
"""
The number of data packs used by all organizations owned by the business
"""
assetPacks: Int!
"""
The number of available seats across all owned organizations based on the unique number of billable users
"""
availableSeats: Int!
"""
The bandwidth quota in GB for all organizations owned by the business
"""
bandwidthQuota: Float!
"""
The bandwidth usage in GB for all organizations owned by the business
"""
bandwidthUsage: Float!
"""
The bandwidth usage as a percentage of the bandwidth quota
"""
bandwidthUsagePercentage: Int!
"""
A list of all of the billing managers for this business.
"""
billingManagers(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection!
"""
A list of pending billing manager invitations for the business.
"""
pendingBillingManagerInvitations(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
The search string to look for.
"""
query: String
): BusinessMemberInvitationConnection!
"""
The total seats across all organizations owned by the business
"""
seats: Int!
"""
The storage quota in GB for all organizations owned by the business
"""
storageQuota: Float!
"""
The storage usage in GB for all organizations owned by the business
"""
storageUsage: Float!
"""
The storage usage as a percentage of the storage quota
"""
storageUsagePercentage: Int!
"""
The total number of billable users across all organizations owned by the business
"""
totalBillableUsers: Int!
"""
The unique number of billable users across all organizations owned by the business
"""
uniqueBillableUsersCount: Int!
"""
The unique number of billable users as a percentage of seats
"""
uniqueBillableUsersPercent: Int!
}
"""
The possible values for the business default repository permission setting.
"""
enum BusinessDefaultRepositoryPermissionSettingValue @preview(toggledBy: "gwenpool-preview") {
"""
Organization members will be able to clone, pull, push, and add new collaborators to all organization repositories.
"""
ADMIN
"""
Organization members will only be able to clone and pull public repositories.
"""
NONE
"""
Organizations in the business choose default repository permissions for their members.
"""
NO_POLICY
"""
Organization members will be able to clone and pull all organization repositories.
"""
READ
"""
Organization members will be able to clone, pull, and push all organization repositories.
"""
WRITE
}
"""
The possible values for an enabled/disabled business setting.
"""
enum BusinessEnabledDisabledSettingValue @preview(toggledBy: "gwenpool-preview") {
"""
The setting is disabled for organizations in the business.
"""
DISABLED
"""
The setting is enabled for organizations in the business.
"""
ENABLED
"""
There is no policy set for organizations in the business.
"""
NO_POLICY
}
"""
The possible values for an enabled/no policy business setting.
"""
enum BusinessEnabledSettingValue @preview(toggledBy: "gwenpool-preview") {
"""
The setting is enabled for organizations in the business.
"""
ENABLED
"""
There is no policy set for organizations in the business.
"""
NO_POLICY
}
"""
An invitation for a user to become an admin or billing manager of a business.
"""
type BusinessMemberInvitation implements Node @preview(toggledBy: "gwenpool-preview") {
"""
The business the invitation is for.
"""
business: Business!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
The email of the person who was invited to the business.
"""
email: String
id: ID!
"""
The user who was invited to the business.
"""
invitee: User
"""
The user who created the invitation.
"""
inviter: User!
"""
The invitee's pending role in the business (admin or billing_manager).
"""
role: BusinessMemberInvitationRole!
}
"""
The connection type for BusinessMemberInvitation.
"""
type BusinessMemberInvitationConnection {
"""
A list of edges.
"""
edges: [BusinessMemberInvitationEdge]
"""
A list of nodes.
"""
nodes: [BusinessMemberInvitation] @preview(toggledBy: "gwenpool-preview")
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type BusinessMemberInvitationEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: BusinessMemberInvitation @preview(toggledBy: "gwenpool-preview")
}
"""
The possible business member invitation roles.
"""
enum BusinessMemberInvitationRole @preview(toggledBy: "gwenpool-preview") {
"""
The invitee is invited to be an administrator of the business.
"""
ADMIN
"""
The invitee is invited to be a billing manager of the business.
"""
BILLING_MANAGER
}
"""
The possible values for the business members can create repositories setting.
"""
enum BusinessMembersCanCreateRepositoriesSettingValue @preview(toggledBy: "gwenpool-preview") {
"""
Members will be able to create public and private repositories.
"""
ALL
"""
Members will not be able to create public or private repositories.
"""
DISABLED
"""
Organization administrators choose whether to allow members to create repositories.
"""
NO_POLICY
"""
Members will be able to create only private repositories.
"""
PRIVATE
}
"""
The connection type for OrganizationInvitation.
"""
type BusinessPendingMemberInvitationConnection @preview(toggledBy: "gwenpool-preview") {
"""
A list of edges.
"""
edges: [OrganizationInvitationEdge]
"""
A list of nodes.
"""
nodes: [OrganizationInvitation]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
"""
Identifies the total count of unique users in the connection.
"""
totalUniqueUserCount: Int!
}
"""
A subset of repository information queryable from a business.
"""
type BusinessRepositoryInfo implements Node @preview(toggledBy: "gwenpool-preview") {
id: ID!
"""
The repository's name.
"""
name: String!
"""
The repository's name with owner.
"""
nameWithOwner: String!
}
"""
Autogenerated input type of CancelBusinessAdminInvitation
"""
input CancelBusinessAdminInvitationInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Node ID of the pending business admin invitation.
"""
invitationId: ID! @possibleTypes(concreteTypes: ["BusinessMemberInvitation"])
}
"""
Autogenerated return type of CancelBusinessAdminInvitation
"""
type CancelBusinessAdminInvitationPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The invitation that was canceled.
"""
invitation: BusinessMemberInvitation @preview(toggledBy: "gwenpool-preview")
"""
A message confirming the result of canceling an administrator invitation.
"""
message: String
}
"""
Autogenerated input type of CancelBusinessBillingManagerInvitation
"""
input CancelBusinessBillingManagerInvitationInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Node ID of the pending business billing manager invitation.
"""
invitationId: ID! @possibleTypes(concreteTypes: ["BusinessMemberInvitation"])
}
"""
Autogenerated return type of CancelBusinessBillingManagerInvitation
"""
type CancelBusinessBillingManagerInvitationPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The invitation that was canceled.
"""
invitation: BusinessMemberInvitation @preview(toggledBy: "gwenpool-preview")
"""
A message confirming the result of canceling a billing manager invitation.
"""
message: String
}
"""
A single check annotation.
"""
type CheckAnnotation @preview(toggledBy: "antiope-preview") {
"""
The annotation's severity level.
"""
annotationLevel: CheckAnnotationLevel
"""
The path to the file that this annotation was made on.
"""
blobUrl: URI!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The position of this annotation.
"""
location: CheckAnnotationSpan!
"""
The annotation's message.
"""
message: String!
"""
The path that this annotation was made on.
"""
path: String!
"""
Additional information about the annotation.
"""
rawDetails: String
"""
The annotation's title
"""
title: String
}
"""
The connection type for CheckAnnotation.
"""
type CheckAnnotationConnection {
"""
A list of edges.
"""
edges: [CheckAnnotationEdge]
"""
A list of nodes.
"""
nodes: [CheckAnnotation] @preview(toggledBy: "antiope-preview")
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
Information from a check run analysis to specific lines of code.
"""
input CheckAnnotationData @preview(toggledBy: "antiope-preview") {
"""
Represents an annotation's information level
"""
annotationLevel: CheckAnnotationLevel!
"""
The location of the annotation
"""
location: CheckAnnotationRange!
"""
A short description of the feedback for these lines of code.
"""
message: String!
"""
The path of the file to add an annotation to.
"""
path: String!
"""
Details about this annotation.
"""
rawDetails: String
"""
The title that represents the annotation.
"""
title: String
}
"""
An edge in a connection.
"""
type CheckAnnotationEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: CheckAnnotation @preview(toggledBy: "antiope-preview")
}
"""
Represents an annotation's information level.
"""
enum CheckAnnotationLevel @preview(toggledBy: "antiope-preview") {
"""
An annotation indicating an inescapable error.
"""
FAILURE
"""
An annotation indicating some information.
"""
NOTICE
"""
An annotation indicating an ignorable error.
"""
WARNING
}
"""
A character position in a check annotation.
"""
type CheckAnnotationPosition @preview(toggledBy: "antiope-preview") {
"""
Column number (1 indexed).
"""
column: Int
"""
Line number (1 indexed).
"""
line: Int!
}
"""
Information from a check run analysis to specific lines of code.
"""
input CheckAnnotationRange @preview(toggledBy: "antiope-preview") {
"""
The ending column of the range.
"""
endColumn: Int
"""
The ending line of the range.
"""
endLine: Int!
"""
The starting column of the range.
"""
startColumn: Int
"""
The starting line of the range.
"""
startLine: Int!
}
"""
An inclusive pair of positions for a check annotation.
"""
type CheckAnnotationSpan @preview(toggledBy: "antiope-preview") {
"""
End position (inclusive).
"""
end: CheckAnnotationPosition!
"""
Start position (inclusive).
"""
start: CheckAnnotationPosition!
}
"""
The possible states for a check suite or run conclusion.
"""
enum CheckConclusionState @preview(toggledBy: "antiope-preview") {
"""
The check suite or run requires action.
"""
ACTION_REQUIRED
"""
The check suite or run has been cancelled.
"""
CANCELLED
"""
The check suite or run has failed.
"""
FAILURE
"""
The check suite or run was neutral.
"""
NEUTRAL
"""
The check suite or run has succeeded.
"""
SUCCESS
"""
The check suite or run has timed out.
"""
TIMED_OUT
}
"""
A check run.
"""
type CheckRun implements Node & UniformResourceLocatable @preview(toggledBy: "antiope-preview") {
"""
The check run's annotations
"""
annotations(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): CheckAnnotationConnection
"""
The check suite that this run is a part of.
"""
checkSuite: CheckSuite!
"""
Identifies the date and time when the check run was completed.
"""
completedAt: DateTime
"""
The conclusion of the check run.
"""
conclusion: CheckConclusionState
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The URL from which to find full details of the check run on the integrator's site.
"""
detailsUrl: URI
"""
A reference for the check run on the integrator's system.
"""
externalId: String
id: ID!
"""
The name of the check for this check run.
"""
name: String!
"""
The permalink to the check run summary.
"""
permalink: URI!
"""
The repository associated with this check run.
"""
repository: Repository!
"""
The HTTP path for this check run.
"""
resourcePath: URI!
"""
Identifies the date and time when the check run was started.
"""
startedAt: DateTime
"""
The current status of the check run.
"""
status: CheckStatusState!
"""
A string representing the check run's summary
"""
summary: String
"""
A string representing the check run's text
"""
text: String
"""
A string representing the check run
"""
title: String
"""
The HTTP URL for this check run.
"""
url: URI!
}
"""
Possible further actions the integrator can perform.
"""
input CheckRunAction @preview(toggledBy: "antiope-preview") {
"""
A short explanation of what this action would do.
"""
description: String!
"""
A reference for the action on the integrator's system.
"""
identifier: String!
"""
The text to be displayed on a button in the web UI.
"""
label: String!
}
"""
The connection type for CheckRun.
"""
type CheckRunConnection {
"""
A list of edges.
"""
edges: [CheckRunEdge]
"""
A list of nodes.
"""
nodes: [CheckRun] @preview(toggledBy: "antiope-preview")
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type CheckRunEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: CheckRun @preview(toggledBy: "antiope-preview")
}
"""
The filters that are available when fetching check runs.
"""
input CheckRunFilter @preview(toggledBy: "antiope-preview") {
"""
Filters the check runs created by this application ID.
"""
appId: Int
"""
Filters the check runs by this name.
"""
checkName: String
"""
Filters the check runs by this type.
"""
checkType: CheckRunType
"""
Filters the check runs by this status.
"""
status: CheckStatusState
}
"""
Descriptive details about the check run.
"""
input CheckRunOutput @preview(toggledBy: "antiope-preview") {
"""
The annotations that are made as part of the check run.
"""
annotations: [CheckAnnotationData!]
"""
Images attached to the check run output displayed in the GitHub pull request UI.
"""
images: [CheckRunOutputImage!]
"""
The summary of the check run (supports Commonmark).
"""
summary: String!
"""
The details of the check run (supports Commonmark).
"""
text: String
"""
A title to provide for this check run.
"""
title: String!
}
"""
Images attached to the check run output displayed in the GitHub pull request UI.
"""
input CheckRunOutputImage @preview(toggledBy: "antiope-preview") {
"""
The alternative text for the image.
"""
alt: String!
"""
A short image description.
"""
caption: String
"""
The full URL of the image.
"""
imageUrl: URI!
}
"""
The possible types of check runs.
"""
enum CheckRunType @preview(toggledBy: "antiope-preview") {
"""
Every check run available.
"""
ALL
"""
The latest check run.
"""
LATEST
}
"""
The possible states for a check suite or run status.
"""
enum CheckStatusState @preview(toggledBy: "antiope-preview") {
"""
The check suite or run has been completed.
"""
COMPLETED
"""
The check suite or run is in progress.
"""
IN_PROGRESS
"""
The check suite or run has been queued.
"""
QUEUED
"""
The check suite or run has been requested.
"""
REQUESTED
}
"""
A check suite.
"""
type CheckSuite implements Node @preview(toggledBy: "antiope-preview") {
"""
The GitHub App which created this check suite.
"""
app: App
"""
The name of the branch for this check suite.
"""
branch: Ref
"""
The check runs associated with a check suite.
"""
checkRuns(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Filters the check runs by this type.
"""
filterBy: CheckRunFilter
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): CheckRunConnection
"""
The commit for this check suite
"""
commit: Commit!
"""
The conclusion of this check suite.
"""
conclusion: CheckConclusionState
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
"""
A list of open pull requests matching the check suite.
"""
matchingPullRequests(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
The base ref name to filter the pull requests by.
"""
baseRefName: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
The head ref name to filter the pull requests by.
"""
headRefName: String
"""
A list of label names to filter the pull requests by.
"""
labels: [String!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for pull requests returned from the connection.
"""
orderBy: IssueOrder
"""
A list of states to filter the pull requests by.
"""
states: [PullRequestState!]
): PullRequestConnection
"""
The push that triggered this check suite.
"""
push: Push
"""
The repository associated with this check suite.
"""
repository: Repository!
"""
The status of this check suite.
"""
status: CheckStatusState!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
}
"""
The auto-trigger preferences that are available for check suites.
"""
input CheckSuiteAutoTriggerPreference @preview(toggledBy: "antiope-preview") {
"""
The node ID of the application that owns the check suite.
"""
appId: ID!
"""
Set to `true` to enable automatic creation of CheckSuite events upon pushes to the repository.
"""
setting: Boolean!
}
"""
The connection type for CheckSuite.
"""
type CheckSuiteConnection {
"""
A list of edges.
"""
edges: [CheckSuiteEdge]
"""
A list of nodes.
"""
nodes: [CheckSuite] @preview(toggledBy: "antiope-preview")
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type CheckSuiteEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: CheckSuite @preview(toggledBy: "antiope-preview")
}
"""
The filters that are available when fetching check suites.
"""
input CheckSuiteFilter @preview(toggledBy: "antiope-preview") {
"""
Filters the check suites created by this application ID.
"""
appId: Int
"""
Filters the check suites by this name.
"""
checkName: String
}
"""
Autogenerated input type of ClearLabelsFromLabelable
"""
input ClearLabelsFromLabelableInput @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The id of the labelable object to clear the labels from.
"""
labelableId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "Labelable")
}
"""
Autogenerated return type of ClearLabelsFromLabelable
"""
type ClearLabelsFromLabelablePayload @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The item that was unlabeled.
"""
labelable: Labelable
}
"""
An object that can be closed
"""
interface Closable {
"""
`true` if the object is closed (definition of closed may depend on type)
"""
closed: Boolean!
"""
Identifies the date and time when the object was closed.
"""
closedAt: DateTime
}
"""
Autogenerated input type of CloseIssue
"""
input CloseIssueInput @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
ID of the issue to be closed.
"""
issueId: ID! @possibleTypes(concreteTypes: ["Issue"])
}
"""
Autogenerated return type of CloseIssue
"""
type CloseIssuePayload @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The issue that was closed.
"""
issue: Issue
}
"""
Autogenerated input type of ClosePullRequest
"""
input ClosePullRequestInput @preview(toggledBy: "ocelot-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
ID of the pull request to be closed.
"""
pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"])
}
"""
Autogenerated return type of ClosePullRequest
"""
type ClosePullRequestPayload @preview(toggledBy: "ocelot-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The pull request that was closed.
"""
pullRequest: PullRequest
}
"""
Represents a 'closed' event on any `Closable`.
"""
type ClosedEvent implements Node & UniformResourceLocatable {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Object that was closed.
"""
closable: Closable!
"""
Object which triggered the creation of this event.
"""
closer: Closer
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
The HTTP path for this closed event.
"""
resourcePath: URI!
"""
The HTTP URL for this closed event.
"""
url: URI!
}
"""
The object which triggered a `ClosedEvent`.
"""
union Closer = Commit | PullRequest
"""
The Code of Conduct for a repository
"""
type CodeOfConduct implements Node {
"""
The body of the Code of Conduct
"""
body: String
id: ID!
"""
The key for the Code of Conduct
"""
key: String!
"""
The formal name of the Code of Conduct
"""
name: String!
"""
The HTTP path for this Code of Conduct
"""
resourcePath: URI
"""
The HTTP URL for this Code of Conduct
"""
url: URI
}
"""
Collaborators affiliation level with a subject.
"""
enum CollaboratorAffiliation {
"""
All collaborators the authenticated user can see.
"""
ALL
"""
All collaborators with permissions to an organization-owned subject, regardless of organization membership status.
"""
DIRECT
"""
All outside collaborators of an organization-owned subject.
"""
OUTSIDE
}
"""
Types that can be inside Collection Items.
"""
union CollectionItemContent = Organization | Repository | User
"""
Represents a comment.
"""
interface Comment {
"""
The actor who authored the comment.
"""
author: Actor
"""
Author's association with the subject of the comment.
"""
authorAssociation: CommentAuthorAssociation!
"""
The body as Markdown.
"""
body: String!
"""
The body rendered to HTML.
"""
bodyHTML: HTML!
"""
The body rendered to text.
"""
bodyText: String!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Check if this comment was created via an email reply.
"""
createdViaEmail: Boolean!
"""
The actor who edited the comment.
"""
editor: Actor
id: ID!
"""
Check if this comment was edited and includes an edit with the creation data
"""
includesCreatedEdit: Boolean!
"""
The moment the editor made the last edit
"""
lastEditedAt: DateTime
"""
Identifies when the comment was published at.
"""
publishedAt: DateTime
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
A list of edits to this content.
"""
userContentEdits(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserContentEditConnection
"""
Did the viewer author this comment.
"""
viewerDidAuthor: Boolean!
}
"""
A comment author association with repository.
"""
enum CommentAuthorAssociation {
"""
Author has been invited to collaborate on the repository.
"""
COLLABORATOR
"""
Author has previously committed to the repository.
"""
CONTRIBUTOR
"""
Author has not previously committed to GitHub.
"""
FIRST_TIMER
"""
Author has not previously committed to the repository.
"""
FIRST_TIME_CONTRIBUTOR
"""
Author is a member of the organization that owns the repository.
"""
MEMBER
"""
Author has no association with the repository.
"""
NONE
"""
Author is the owner of the repository.
"""
OWNER
}
"""
The possible errors that will prevent a user from updating a comment.
"""
enum CommentCannotUpdateReason {
"""
You cannot update this comment
"""
DENIED
"""
You must be the author or have write access to this repository to update this comment.
"""
INSUFFICIENT_ACCESS
"""
Unable to create comment because issue is locked.
"""
LOCKED
"""
You must be logged in to update this comment.
"""
LOGIN_REQUIRED
"""
Repository is under maintenance.
"""
MAINTENANCE
"""
At least one email address must be verified to update this comment.
"""
VERIFIED_EMAIL_REQUIRED
}
"""
Represents a 'comment_deleted' event on a given issue or pull request.
"""
type CommentDeletedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
}
"""
Represents a Git commit.
"""
type Commit implements GitObject & Node & Subscribable & UniformResourceLocatable {
"""
An abbreviated version of the Git object ID
"""
abbreviatedOid: String!
"""
The number of additions in this commit.
"""
additions: Int!
"""
Authorship details of the commit.
"""
author: GitActor
"""
Check if the committer and the author match.
"""
authoredByCommitter: Boolean!
"""
The datetime when this commit was authored.
"""
authoredDate: DateTime!
"""
Fetches `git blame` information.
"""
blame(
"""
The file whose Git blame information you want.
"""
path: String!
): Blame!
"""
The number of changed files in this commit.
"""
changedFiles: Int!
"""
The check suites associated with a commit.
"""
checkSuites(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Filters the check suites by this type.
"""
filterBy: CheckSuiteFilter
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): CheckSuiteConnection @preview(toggledBy: "antiope-preview")
"""
Comments made on the commit.
"""
comments(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): CommitCommentConnection!
"""
The HTTP path for this Git object
"""
commitResourcePath: URI!
"""
The HTTP URL for this Git object
"""
commitUrl: URI!
"""
The datetime when this commit was committed.
"""
committedDate: DateTime!
"""
Check if commited via GitHub web UI.
"""
committedViaWeb: Boolean!
"""
Committership details of the commit.
"""
committer: GitActor
"""
The number of deletions in this commit.
"""
deletions: Int!
"""
The deployments associated with a commit.
"""
deployments(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Environments to list deployments for
"""
environments: [String!]
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for deployments returned from the connection.
"""
orderBy: DeploymentOrder = {field: CREATED_AT, direction: ASC}
): DeploymentConnection
"""
The linear commit history starting from (and including) this commit, in the same order as `git log`.
"""
history(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
If non-null, filters history to only show commits with matching authorship.
"""
author: CommitAuthor
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
If non-null, filters history to only show commits touching files under this path.
"""
path: String
"""
Allows specifying a beginning time or date for fetching commits.
"""
since: GitTimestamp
"""
Allows specifying an ending time or date for fetching commits.
"""
until: GitTimestamp
): CommitHistoryConnection!
id: ID!
"""
The Git commit message
"""
message: String!
"""
The Git commit message body
"""
messageBody: String!
"""
The commit message body rendered to HTML.
"""
messageBodyHTML: HTML!
"""
The Git commit message headline
"""
messageHeadline: String!
"""
The commit message headline rendered to HTML.
"""
messageHeadlineHTML: HTML!
"""
The Git object ID
"""
oid: GitObjectID!
"""
The parents of a commit.
"""
parents(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): CommitConnection!
"""
The datetime when this commit was pushed.
"""
pushedDate: DateTime
"""
The Repository this commit belongs to
"""
repository: Repository!
"""
The HTTP path for this commit
"""
resourcePath: URI!
"""
Commit signing information, if present.
"""
signature: GitSignature
"""
Status information for this commit
"""
status: Status
"""
Returns a URL to download a tarball archive for a repository.
Note: For private repositories, these links are temporary and expire after five minutes.
"""
tarballUrl: URI!
"""
Commit's root Tree
"""
tree: Tree!
"""
The HTTP path for the tree of this commit
"""
treeResourcePath: URI!
"""
The HTTP URL for the tree of this commit
"""
treeUrl: URI!
"""
The HTTP URL for this commit
"""
url: URI!
"""
Check if the viewer is able to change their subscription status for the repository.
"""
viewerCanSubscribe: Boolean!
"""
Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.
"""
viewerSubscription: SubscriptionState
"""
Returns a URL to download a zipball archive for a repository.
Note: For private repositories, these links are temporary and expire after five minutes.
"""
zipballUrl: URI!
}
"""
Specifies an author for filtering Git commits.
"""
input CommitAuthor {
"""
Email addresses to filter by. Commits authored by any of the specified email addresses will be returned.
"""
emails: [String!]
"""
ID of a User to filter by. If non-null, only commits authored by this user
will be returned. This field takes precedence over emails.
"""
id: ID
}
"""
Represents a comment on a given Commit.
"""
type CommitComment implements Comment & Deletable & Minimizable & Node & Reactable & RepositoryNode & Updatable & UpdatableComment {
"""
The actor who authored the comment.
"""
author: Actor
"""
Author's association with the subject of the comment.
"""
authorAssociation: CommentAuthorAssociation!
"""
Identifies the comment body.
"""
body: String!
"""
Identifies the comment body rendered to HTML.
"""
bodyHTML: HTML!
"""
The body rendered to text.
"""
bodyText: String!
"""
Identifies the commit associated with the comment, if the commit exists.
"""
commit: Commit
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Check if this comment was created via an email reply.
"""
createdViaEmail: Boolean!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The actor who edited the comment.
"""
editor: Actor
id: ID!
"""
Check if this comment was edited and includes an edit with the creation data
"""
includesCreatedEdit: Boolean!
"""
Returns whether or not a comment has been minimized.
"""
isMinimized: Boolean!
"""
The moment the editor made the last edit
"""
lastEditedAt: DateTime
"""
Returns why the comment was minimized.
"""
minimizedReason: String
"""
Identifies the file path associated with the comment.
"""
path: String
"""
Identifies the line position associated with the comment.
"""
position: Int
"""
Identifies when the comment was published at.
"""
publishedAt: DateTime
"""
A list of reactions grouped by content left on the subject.
"""
reactionGroups: [ReactionGroup!]
"""
A list of Reactions left on the Issue.
"""
reactions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Allows filtering Reactions by emoji.
"""
content: ReactionContent
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Allows specifying the order in which reactions are returned.
"""
orderBy: ReactionOrder
): ReactionConnection!
"""
The repository associated with this node.
"""
repository: Repository!
"""
The HTTP path permalink for this commit comment.
"""
resourcePath: URI!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL permalink for this commit comment.
"""
url: URI!
"""
A list of edits to this content.
"""
userContentEdits(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserContentEditConnection
"""
Check if the current viewer can delete this object.
"""
viewerCanDelete: Boolean!
"""
Check if the current viewer can minimize this object.
"""
viewerCanMinimize: Boolean!
"""
Can user react to this subject
"""
viewerCanReact: Boolean!
"""
Check if the current viewer can update this object.
"""
viewerCanUpdate: Boolean!
"""
Reasons why the current viewer can not update this comment.
"""
viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!
"""
Did the viewer author this comment.
"""
viewerDidAuthor: Boolean!
}
"""
The connection type for CommitComment.
"""
type CommitCommentConnection {
"""
A list of edges.
"""
edges: [CommitCommentEdge]
"""
A list of nodes.
"""
nodes: [CommitComment]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type CommitCommentEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: CommitComment
}
"""
A thread of comments on a commit.
"""
type CommitCommentThread implements Node & RepositoryNode {
"""
The comments that exist in this thread.
"""
comments(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): CommitCommentConnection!
"""
The commit the comments were made on.
"""
commit: Commit!
id: ID!
"""
The file the comments were made on.
"""
path: String
"""
The position in the diff for the commit that the comment was made on.
"""
position: Int
"""
The repository associated with this node.
"""
repository: Repository!
}
"""
The connection type for Commit.
"""
type CommitConnection {
"""
A list of edges.
"""
edges: [CommitEdge]
"""
A list of nodes.
"""
nodes: [Commit]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type CommitEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Commit
}
"""
The connection type for Commit.
"""
type CommitHistoryConnection {
"""
A list of edges.
"""
edges: [CommitEdge]
"""
A list of nodes.
"""
nodes: [Commit]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
A content attachment
"""
type ContentAttachment {
"""
The body text of the content attachment. This parameter supports markdown.
"""
body: String!
"""
The content reference that the content attachment is attached to.
"""
contentReference: ContentReference!
"""
Identifies the primary key from the database.
"""
databaseId: Int!
id: ID!
"""
The title of the content attachment.
"""
title: String!
}
"""
A content reference
"""
type ContentReference {
"""
Identifies the primary key from the database.
"""
databaseId: Int!
id: ID!
"""
The reference of the content reference.
"""
reference: String!
}
"""
Represents a contribution a user made on GitHub, such as opening an issue.
"""
interface Contribution {
"""
Whether this contribution is associated with a record you do not have access to. For
example, your own 'first issue' contribution may have been made on a repository you can no
longer access.
"""
isRestricted: Boolean!
"""
When this contribution was made.
"""
occurredAt: DateTime!
"""
The HTTP path for this contribution.
"""
resourcePath: URI!
"""
The HTTP URL for this contribution.
"""
url: URI!
"""
The user who made this contribution.
"""
user: User!
}
"""
A calendar of contributions made on GitHub by a user.
"""
type ContributionCalendar {
"""
A list of hex color codes used in this calendar. The darker the color, the more contributions it represents.
"""
colors: [String!]!
"""
Determine if the color set was chosen because it's currently Halloween.
"""
isHalloween: Boolean!
"""
A list of the months of contributions in this calendar.
"""
months: [ContributionCalendarMonth!]!
"""
The count of total contributions in the calendar.
"""
totalContributions: Int!
"""
A list of the weeks of contributions in this calendar.
"""
weeks: [ContributionCalendarWeek!]!
}
"""
Represents a single day of contributions on GitHub by a user.
"""
type ContributionCalendarDay {
"""
The hex color code that represents how many contributions were made on this day compared to others in the calendar.
"""
color: String!
"""
How many contributions were made by the user on this day.
"""
contributionCount: Int!
"""
The day this square represents.
"""
date: Date!
"""
A number representing which day of the week this square represents, e.g., 1 is Monday.
"""
weekday: Int!
}
"""
A month of contributions in a user's contribution graph.
"""
type ContributionCalendarMonth {
"""
The date of the first day of this month.
"""
firstDay: Date!
"""
The name of the month.
"""
name: String!
"""
How many weeks started in this month.
"""
totalWeeks: Int!
"""
The year the month occurred in.
"""
year: Int!
}
"""
A week of contributions in a user's contribution graph.
"""
type ContributionCalendarWeek {
"""
The days of contributions in this week.
"""
contributionDays: [ContributionCalendarDay!]!
"""
The date of the earliest square in this week.
"""
firstDay: Date!
}
"""
A contributions collection aggregates contributions such as opened issues and commits created by a user.
"""
type ContributionsCollection {
"""
A calendar of this user's contributions on GitHub.
"""
contributionCalendar: ContributionCalendar!
"""
Determine if this collection's time span ends in the current month.
"""
doesEndInCurrentMonth: Boolean!
"""
The date of the first restricted contribution the user made in this time
period. Can only be non-null when the user has enabled private contribution counts.
"""
earliestRestrictedContributionDate: Date
"""
The ending date and time of this collection.
"""
endedAt: DateTime!
"""
The first issue the user opened on GitHub. This will be null if that issue was
opened outside the collection's time range and ignoreTimeRange is false. If
the issue is not visible but the user has opted to show private contributions,
a RestrictedContribution will be returned.
"""
firstIssueContribution(
"""
If true, the first issue will be returned even if it was opened outside of the collection's time range.
"""
ignoreTimeRange: Boolean = false
): CreatedIssueOrRestrictedContribution
"""
The first pull request the user opened on GitHub. This will be null if that
pull request was opened outside the collection's time range and
ignoreTimeRange is not true. If the pull request is not visible but the user
has opted to show private contributions, a RestrictedContribution will be returned.
"""
firstPullRequestContribution(
"""
If true, the first pull request will be returned even if it was opened outside of the collection's time range.
"""
ignoreTimeRange: Boolean = false
): CreatedPullRequestOrRestrictedContribution
"""
Does the user have any more activity in the timeline that occurred prior to the collection's time range?
"""
hasActivityInThePast: Boolean!
"""
Determine if there are any contributions in this collection.
"""
hasAnyContributions: Boolean!
"""
Determine if the user made any contributions in this time frame whose details
are not visible because they were made in a private repository. Can only be
true if the user enabled private contribution counts.
"""
hasAnyRestrictedContributions: Boolean!
"""
Whether or not the collector's time span is all within the same day.
"""
isSingleDay: Boolean!
"""
A list of issues the user opened.
"""
issueContributions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Should the user's first issue ever be excluded from the result.
"""
excludeFirst: Boolean = false
"""
Should the user's most commented issue be excluded from the result.
"""
excludePopular: Boolean = false
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): CreatedIssueContributionConnection!
"""
When the user signed up for GitHub. This will be null if that sign up date
falls outside the collection's time range and ignoreTimeRange is false.
"""
joinedGitHubContribution(
"""
If true, the contribution will be returned even if the user signed up outside of the collection's time range.
"""
ignoreTimeRange: Boolean = false
): JoinedGitHubContribution
"""
The date of the most recent restricted contribution the user made in this time
period. Can only be non-null when the user has enabled private contribution counts.
"""
latestRestrictedContributionDate: Date
"""
When this collection's time range does not include any activity from the user, use this
to get a different collection from an earlier time range that does have activity.
"""
mostRecentCollectionWithActivity: ContributionsCollection
"""
Returns a different contributions collection from an earlier time range than this one
that does not have any contributions.
"""
mostRecentCollectionWithoutActivity: ContributionsCollection
"""
The issue the user opened on GitHub that received the most comments in the specified
time frame.
"""
popularIssueContribution: CreatedIssueContribution
"""
The pull request the user opened on GitHub that received the most comments in the
specified time frame.
"""
popularPullRequestContribution: CreatedPullRequestContribution
"""
A count of contributions made by the user that the viewer cannot access. Only
non-zero when the user has chosen to share their private contribution counts.
"""
restrictedContributionsCount: Int!
"""
The beginning date and time of this collection.
"""
startedAt: DateTime!
"""
How many commits were made by the user in this time span.
"""
totalCommitContributions: Int!
"""
How many issues the user opened.
"""
totalIssueContributions(
"""
Should the user's first issue ever be excluded from this count.
"""
excludeFirst: Boolean = false
"""
Should the user's most commented issue be excluded from this count.
"""
excludePopular: Boolean = false
): Int!
"""
How many pull requests the user opened.
"""
totalPullRequestContributions(
"""
Should the user's first pull request ever be excluded from this count.
"""
excludeFirst: Boolean = false
"""
Should the user's most commented pull request be excluded from this count.
"""
excludePopular: Boolean = false
): Int!
"""
How many pull request reviews the user left.
"""
totalPullRequestReviewContributions: Int!
"""
How many different repositories the user committed to.
"""
totalRepositoriesWithContributedCommits: Int!
"""
How many different repositories the user opened issues in.
"""
totalRepositoriesWithContributedIssues(
"""
Should the user's first issue ever be excluded from this count.
"""
excludeFirst: Boolean = false
"""
Should the user's most commented issue be excluded from this count.
"""
excludePopular: Boolean = false
): Int!
"""
How many different repositories the user left pull request reviews in.
"""
totalRepositoriesWithContributedPullRequestReviews: Int!
"""
How many different repositories the user opened pull requests in.
"""
totalRepositoriesWithContributedPullRequests(
"""
Should the user's first pull request ever be excluded from this count.
"""
excludeFirst: Boolean = false
"""
Should the user's most commented pull request be excluded from this count.
"""
excludePopular: Boolean = false
): Int!
"""
How many repositories the user created.
"""
totalRepositoryContributions(
"""
Should the user's first repository ever be excluded from this count.
"""
excludeFirst: Boolean = false
): Int!
"""
The user who made the contributions in this collection.
"""
user: User!
}
"""
Autogenerated input type of ConvertProjectCardNoteToIssue
"""
input ConvertProjectCardNoteToIssueInput @preview(toggledBy: "starfire-preview") {
"""
The body of the newly created issue.
"""
body: String
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ProjectCard ID to convert.
"""
projectCardId: ID! @possibleTypes(concreteTypes: ["ProjectCard"])
"""
The ID of the repository to create the issue in.
"""
repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])
"""
The title of the newly created issue. Defaults to the card's note text.
"""
title: String
}
"""
Autogenerated return type of ConvertProjectCardNoteToIssue
"""
type ConvertProjectCardNoteToIssuePayload @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The updated ProjectCard.
"""
projectCard: ProjectCard
}
"""
Represents a 'converted_note_to_issue' event on a given issue or pull request.
"""
type ConvertedNoteToIssueEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
"""
Project referenced by event.
"""
project: Project @preview(toggledBy: "starfox-preview")
"""
Project card referenced by this project event.
"""
projectCard: ProjectCard @preview(toggledBy: "starfox-preview")
"""
Column name referenced by this project event.
"""
projectColumnName: String! @preview(toggledBy: "starfox-preview")
}
"""
Autogenerated input type of CreateBranchProtectionRule
"""
input CreateBranchProtectionRuleInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Will new commits pushed to matching branches dismiss pull request review approvals.
"""
dismissesStaleReviews: Boolean
"""
Can admins overwrite branch protection.
"""
isAdminEnforced: Boolean
"""
The glob-like pattern used to determine matching branches.
"""
pattern: String!
"""
A list of User or Team IDs allowed to push to matching branches.
"""
pushActorIds: [ID!]
"""
The global relay id of the repository in which a new branch protection rule should be created in.
"""
repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])
"""
Number of approving reviews required to update matching branches.
"""
requiredApprovingReviewCount: Int
"""
List of required status check contexts that must pass for commits to be accepted to matching branches.
"""
requiredStatusCheckContexts: [String!]
"""
Are approving reviews required to update matching branches.
"""
requiresApprovingReviews: Boolean
"""
Are reviews from code owners required to update matching branches.
"""
requiresCodeOwnerReviews: Boolean
"""
Are commits required to be signed.
"""
requiresCommitSignatures: Boolean
"""
Are status checks required to update matching branches.
"""
requiresStatusChecks: Boolean
"""
Are branches required to be up to date before merging.
"""
requiresStrictStatusChecks: Boolean
"""
Is pushing to matching branches restricted.
"""
restrictsPushes: Boolean
"""
Is dismissal of pull request reviews restricted.
"""
restrictsReviewDismissals: Boolean
"""
A list of User or Team IDs allowed to dismiss reviews on pull requests targeting matching branches.
"""
reviewDismissalActorIds: [ID!]
}
"""
Autogenerated return type of CreateBranchProtectionRule
"""
type CreateBranchProtectionRulePayload {
"""
The newly created BranchProtectionRule.
"""
branchProtectionRule: BranchProtectionRule
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated input type of CreateCheckRun
"""
input CreateCheckRunInput @preview(toggledBy: "antiope-preview") {
"""
Possible further actions the integrator can perform, which a user may trigger.
"""
actions: [CheckRunAction!]
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The time that the check run finished.
"""
completedAt: DateTime
"""
The final conclusion of the check.
"""
conclusion: CheckConclusionState
"""
The URL of the integrator's site that has the full details of the check.
"""
detailsUrl: URI
"""
A reference for the run on the integrator's system.
"""
externalId: String
"""
The SHA of the head commit.
"""
headSha: GitObjectID!
"""
The name of the check.
"""
name: String!
"""
Descriptive details about the run.
"""
output: CheckRunOutput
"""
The node ID of the repository.
"""
repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])
"""
The time that the check run began.
"""
startedAt: DateTime
"""
The current status.
"""
status: RequestableCheckStatusState
}
"""
Autogenerated return type of CreateCheckRun
"""
type CreateCheckRunPayload @preview(toggledBy: "antiope-preview") {
"""
The newly created check run.
"""
checkRun: CheckRun
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated input type of CreateCheckSuite
"""
input CreateCheckSuiteInput @preview(toggledBy: "antiope-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The SHA of the head commit.
"""
headSha: GitObjectID!
"""
The Node ID of the repository.
"""
repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])
}
"""
Autogenerated return type of CreateCheckSuite
"""
type CreateCheckSuitePayload @preview(toggledBy: "antiope-preview") {
"""
The newly created check suite.
"""
checkSuite: CheckSuite
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated input type of CreateContentAttachment
"""
input CreateContentAttachmentInput {
"""
The body of the content attachment, which may contain markdown.
"""
body: String!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The node ID of the content_reference.
"""
contentReferenceId: ID! @possibleTypes(concreteTypes: ["ContentReference"])
"""
The title of the content attachment.
"""
title: String!
}
"""
Autogenerated return type of CreateContentAttachment
"""
type CreateContentAttachmentPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The newly created content attachment.
"""
contentAttachment: ContentAttachment
}
"""
Autogenerated input type of CreateDeployment
"""
input CreateDeploymentInput @preview(toggledBy: "flash-preview") {
"""
Attempt to automatically merge the default branch into the requested ref, defaults to true.
"""
autoMerge: Boolean = true
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Short description of the deployment.
"""
description: String = ""
"""
Name for the target deployment environment.
"""
environment: String = "production"
"""
JSON payload with extra information about the deployment.
"""
payload: String = "{}"
"""
The node ID of the ref to be deployed.
"""
refId: ID! @possibleTypes(concreteTypes: ["Ref"])
"""
The node ID of the repository.
"""
repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])
"""
The status contexts to verify against commit status checks. To bypass required
contexts, pass an empty array. Defaults to all unique contexts.
"""
requiredContexts: [String!]
"""
Specifies a task to execute.
"""
task: String = "deploy"
}
"""
Autogenerated return type of CreateDeployment
"""
type CreateDeploymentPayload @preview(toggledBy: "flash-preview") {
"""
True if the default branch has been auto-merged into the deployment ref.
"""
autoMerged: Boolean
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The new deployment.
"""
deployment: Deployment
}
"""
Autogenerated input type of CreateDeploymentStatus
"""
input CreateDeploymentStatusInput @preview(toggledBy: "flash-preview") {
"""
Adds a new inactive status to all non-transient, non-production environment
deployments with the same repository and environment name as the created
status's deployment.
"""
autoInactive: Boolean = true
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The node ID of the deployment.
"""
deploymentId: ID! @possibleTypes(concreteTypes: ["Deployment"])
"""
A short description of the status. Maximum length of 140 characters.
"""
description: String = ""
"""
If provided, updates the environment of the deploy. Otherwise, does not modify the environment.
"""
environment: String
"""
Sets the URL for accessing your environment.
"""
environmentUrl: String = ""
"""
The log URL to associate with this status. This URL should contain
output to keep the user updated while the task is running or serve as
historical information for what happened in the deployment.
"""
logUrl: String = ""
"""
The state of the deployment.
"""
state: DeploymentStatusState!
}
"""
Autogenerated return type of CreateDeploymentStatus
"""
type CreateDeploymentStatusPayload @preview(toggledBy: "flash-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The new deployment status.
"""
deploymentStatus: DeploymentStatus
}
"""
Autogenerated input type of CreateIssue
"""
input CreateIssueInput @preview(toggledBy: "starfire-preview") {
"""
The Node ID for the user assignee for this issue.
"""
assigneeIds: [ID!] @possibleTypes(concreteTypes: ["User"])
"""
The body for the issue description.
"""
body: String
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
An array of Node IDs of labels for this issue.
"""
labelIds: [ID!] @possibleTypes(concreteTypes: ["Label"])
"""
The Node ID of the milestone for this issue.
"""
milestoneId: ID @possibleTypes(concreteTypes: ["Milestone"])
"""
An array of Node IDs for projects associated with this issue.
"""
projectIds: [ID!] @possibleTypes(concreteTypes: ["Project"])
"""
The Node ID of the repository.
"""
repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])
"""
The title for the issue.
"""
title: String!
}
"""
Autogenerated return type of CreateIssue
"""
type CreateIssuePayload @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The new issue.
"""
issue: Issue
}
"""
Autogenerated input type of CreateProject
"""
input CreateProjectInput {
"""
The description of project.
"""
body: String
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The name of project.
"""
name: String!
"""
The owner ID to create the project under.
"""
ownerId: ID!
}
"""
Autogenerated return type of CreateProject
"""
type CreateProjectPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The new project.
"""
project: Project
}
"""
Autogenerated input type of CreatePullRequest
"""
input CreatePullRequestInput @preview(toggledBy: "ocelot-preview") {
"""
The name of the branch you want your changes pulled into. This should be an existing branch
on the current repository. You cannot update the base branch on a pull request to point
to another repository.
"""
baseRefName: String!
"""
The contents of the pull request.
"""
body: String
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The name of the branch where your changes are implemented. For cross-repository pull requests
in the same network, namespace `head_ref_name` with a user like this: `username:branch`.
"""
headRefName: String!
"""
Indicates whether maintainers can modify the pull request.
"""
maintainerCanModify: Boolean = true
"""
The Node ID of the repository.
"""
repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])
"""
The title of the pull request.
"""
title: String!
}
"""
Autogenerated return type of CreatePullRequest
"""
type CreatePullRequestPayload @preview(toggledBy: "ocelot-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The new pull request.
"""
pullRequest: PullRequest
}
"""
Autogenerated input type of CreateTeamDiscussionComment
"""
input CreateTeamDiscussionCommentInput @preview(toggledBy: "echo-preview") {
"""
The content of the comment.
"""
body: String!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ID of the discussion to which the comment belongs.
"""
discussionId: ID! @possibleTypes(concreteTypes: ["TeamDiscussion"])
}
"""
Autogenerated return type of CreateTeamDiscussionComment
"""
type CreateTeamDiscussionCommentPayload @preview(toggledBy: "echo-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The new comment.
"""
teamDiscussionComment: TeamDiscussionComment
}
"""
Autogenerated input type of CreateTeamDiscussion
"""
input CreateTeamDiscussionInput @preview(toggledBy: "echo-preview") {
"""
The content of the discussion.
"""
body: String!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
If true, restricts the visiblity of this discussion to team members and
organization admins. If false or not specified, allows any organization member
to view this discussion.
"""
private: Boolean
"""
The ID of the team to which the discussion belongs.
"""
teamId: ID! @possibleTypes(concreteTypes: ["Team"])
"""
The title of the discussion.
"""
title: String!
}
"""
Autogenerated return type of CreateTeamDiscussion
"""
type CreateTeamDiscussionPayload @preview(toggledBy: "echo-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The new discussion.
"""
teamDiscussion: TeamDiscussion
}
"""
Represents the contribution a user made on GitHub by opening an issue.
"""
type CreatedIssueContribution implements Contribution {
"""
Whether this contribution is associated with a record you do not have access to. For
example, your own 'first issue' contribution may have been made on a repository you can no
longer access.
"""
isRestricted: Boolean!
"""
The issue that was opened.
"""
issue: Issue!
"""
When this contribution was made.
"""
occurredAt: DateTime!
"""
The HTTP path for this contribution.
"""
resourcePath: URI!
"""
The HTTP URL for this contribution.
"""
url: URI!
"""
The user who made this contribution.
"""
user: User!
}
"""
The connection type for CreatedIssueContribution.
"""
type CreatedIssueContributionConnection {
"""
A list of edges.
"""
edges: [CreatedIssueContributionEdge]
"""
A list of nodes.
"""
nodes: [CreatedIssueContribution]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type CreatedIssueContributionEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: CreatedIssueContribution
}
"""
Represents either a issue the viewer can access or a restricted contribution.
"""
union CreatedIssueOrRestrictedContribution = CreatedIssueContribution | RestrictedContribution
"""
Represents the contribution a user made on GitHub by opening a pull request.
"""
type CreatedPullRequestContribution implements Contribution {
"""
Whether this contribution is associated with a record you do not have access to. For
example, your own 'first issue' contribution may have been made on a repository you can no
longer access.
"""
isRestricted: Boolean!
"""
When this contribution was made.
"""
occurredAt: DateTime!
"""
The pull request that was opened.
"""
pullRequest: PullRequest!
"""
The HTTP path for this contribution.
"""
resourcePath: URI!
"""
The HTTP URL for this contribution.
"""
url: URI!
"""
The user who made this contribution.
"""
user: User!
}
"""
An edge in a connection.
"""
type CreatedPullRequestContributionEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: CreatedPullRequestContribution
}
"""
Represents either a pull request the viewer can access or a restricted contribution.
"""
union CreatedPullRequestOrRestrictedContribution = CreatedPullRequestContribution | RestrictedContribution
"""
Represents a mention made by one issue or pull request to another.
"""
type CrossReferencedEvent implements Node & UniformResourceLocatable {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
Reference originated in a different repository.
"""
isCrossRepository: Boolean!
"""
Identifies when the reference was made.
"""
referencedAt: DateTime!
"""
The HTTP path for this pull request.
"""
resourcePath: URI!
"""
Issue or pull request that made the reference.
"""
source: ReferencedSubject!
"""
Issue or pull request to which the reference was made.
"""
target: ReferencedSubject!
"""
The HTTP URL for this pull request.
"""
url: URI!
"""
Checks if the target will be closed when the source is merged.
"""
willCloseTarget: Boolean!
}
"""
An ISO-8601 encoded date string.
"""
scalar Date
"""
An ISO-8601 encoded UTC date string.
"""
scalar DateTime
"""
Autogenerated input type of DeclineTopicSuggestion
"""
input DeclineTopicSuggestionInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The name of the suggested topic.
"""
name: String!
"""
The reason why the suggested topic is declined.
"""
reason: TopicSuggestionDeclineReason!
"""
The Node ID of the repository.
"""
repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])
}
"""
Autogenerated return type of DeclineTopicSuggestion
"""
type DeclineTopicSuggestionPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The declined topic.
"""
topic: Topic
}
"""
The possible default permissions for repositories.
"""
enum DefaultRepositoryPermissionField {
"""
Can read, write, and administrate repos by default
"""
ADMIN
"""
No access
"""
NONE
"""
Can read repos by default
"""
READ
"""
Can read and write repos by default
"""
WRITE
}
"""
Entities that can be deleted.
"""
interface Deletable {
"""
Check if the current viewer can delete this object.
"""
viewerCanDelete: Boolean!
}
"""
Autogenerated input type of DeleteBranchProtectionRule
"""
input DeleteBranchProtectionRuleInput {
"""
The global relay id of the branch protection rule to be deleted.
"""
branchProtectionRuleId: ID! @possibleTypes(concreteTypes: ["BranchProtectionRule"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated return type of DeleteBranchProtectionRule
"""
type DeleteBranchProtectionRulePayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated input type of DeleteIssueComment
"""
input DeleteIssueCommentInput @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ID of the comment to delete.
"""
id: ID! @possibleTypes(concreteTypes: ["IssueComment"])
}
"""
Autogenerated return type of DeleteIssueComment
"""
type DeleteIssueCommentPayload @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated input type of DeleteIssue
"""
input DeleteIssueInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ID of the issue to delete.
"""
issueId: ID! @possibleTypes(concreteTypes: ["Issue"])
}
"""
Autogenerated return type of DeleteIssue
"""
type DeleteIssuePayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The repository the issue belonged to
"""
repository: Repository
}
"""
Autogenerated input type of DeleteProjectCard
"""
input DeleteProjectCardInput {
"""
The id of the card to delete.
"""
cardId: ID! @possibleTypes(concreteTypes: ["ProjectCard"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated return type of DeleteProjectCard
"""
type DeleteProjectCardPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The column the deleted card was in.
"""
column: ProjectColumn
"""
The deleted card ID.
"""
deletedCardId: ID
}
"""
Autogenerated input type of DeleteProjectColumn
"""
input DeleteProjectColumnInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The id of the column to delete.
"""
columnId: ID! @possibleTypes(concreteTypes: ["ProjectColumn"])
}
"""
Autogenerated return type of DeleteProjectColumn
"""
type DeleteProjectColumnPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The deleted column ID.
"""
deletedColumnId: ID
"""
The project the deleted column was in.
"""
project: Project
}
"""
Autogenerated input type of DeleteProject
"""
input DeleteProjectInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Project ID to update.
"""
projectId: ID! @possibleTypes(concreteTypes: ["Project"])
}
"""
Autogenerated return type of DeleteProject
"""
type DeleteProjectPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The repository or organization the project was removed from.
"""
owner: ProjectOwner
}
"""
Autogenerated input type of DeletePullRequestReviewComment
"""
input DeletePullRequestReviewCommentInput @preview(toggledBy: "ocelot-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ID of the comment to delete.
"""
id: ID! @possibleTypes(concreteTypes: ["PullRequestReviewComment"])
}
"""
Autogenerated return type of DeletePullRequestReviewComment
"""
type DeletePullRequestReviewCommentPayload @preview(toggledBy: "ocelot-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The pull request review the deleted comment belonged to.
"""
pullRequestReview: PullRequestReview
}
"""
Autogenerated input type of DeletePullRequestReview
"""
input DeletePullRequestReviewInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Node ID of the pull request review to delete.
"""
pullRequestReviewId: ID! @possibleTypes(concreteTypes: ["PullRequestReview"])
}
"""
Autogenerated return type of DeletePullRequestReview
"""
type DeletePullRequestReviewPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The deleted pull request review.
"""
pullRequestReview: PullRequestReview
}
"""
Autogenerated input type of DeleteTeamDiscussionComment
"""
input DeleteTeamDiscussionCommentInput @preview(toggledBy: "echo-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ID of the comment to delete.
"""
id: ID! @possibleTypes(concreteTypes: ["TeamDiscussionComment"])
}
"""
Autogenerated return type of DeleteTeamDiscussionComment
"""
type DeleteTeamDiscussionCommentPayload @preview(toggledBy: "echo-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated input type of DeleteTeamDiscussion
"""
input DeleteTeamDiscussionInput @preview(toggledBy: "echo-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The discussion ID to delete.
"""
id: ID! @possibleTypes(concreteTypes: ["TeamDiscussion"])
}
"""
Autogenerated return type of DeleteTeamDiscussion
"""
type DeleteTeamDiscussionPayload @preview(toggledBy: "echo-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Represents a 'demilestoned' event on a given issue or pull request.
"""
type DemilestonedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
Identifies the milestone title associated with the 'demilestoned' event.
"""
milestoneTitle: String!
"""
Object referenced by event.
"""
subject: MilestoneItem!
}
"""
A dependency manifest entry
"""
type DependencyGraphDependency @preview(toggledBy: "hawkgirl-preview") {
"""
Does the dependency itself have dependencies?
"""
hasDependencies: Boolean!
"""
The dependency package manager
"""
packageManager: String
"""
The required package name
"""
packageName: String!
"""
The repository containing the package
"""
repository: Repository
"""
The dependency version requirements
"""
requirements: String!
}
"""
The connection type for DependencyGraphDependency.
"""
type DependencyGraphDependencyConnection @preview(toggledBy: "hawkgirl-preview") {
"""
A list of edges.
"""
edges: [DependencyGraphDependencyEdge]
"""
A list of nodes.
"""
nodes: [DependencyGraphDependency]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type DependencyGraphDependencyEdge @preview(toggledBy: "hawkgirl-preview") {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: DependencyGraphDependency
}
"""
Dependency manifest for a repository
"""
type DependencyGraphManifest implements Node @preview(toggledBy: "hawkgirl-preview") {
"""
Path to view the manifest file blob
"""
blobPath: String!
"""
A list of manifest dependencies
"""
dependencies(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): DependencyGraphDependencyConnection
"""
The number of dependencies listed in the manifest
"""
dependenciesCount: Int
"""
Is the manifest too big to parse?
"""
exceedsMaxSize: Boolean!
"""
Fully qualified manifest filename
"""
filename: String!
id: ID!
"""
Were we able to parse the manifest?
"""
parseable: Boolean!
"""
The repository containing the manifest
"""
repository: Repository!
}
"""
The connection type for DependencyGraphManifest.
"""
type DependencyGraphManifestConnection @preview(toggledBy: "hawkgirl-preview") {
"""
A list of edges.
"""
edges: [DependencyGraphManifestEdge]
"""
A list of nodes.
"""
nodes: [DependencyGraphManifest]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type DependencyGraphManifestEdge @preview(toggledBy: "hawkgirl-preview") {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: DependencyGraphManifest
}
"""
A repository deploy key.
"""
type DeployKey implements Node {
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
The deploy key.
"""
key: String!
"""
Whether or not the deploy key is read only.
"""
readOnly: Boolean!
"""
The deploy key title.
"""
title: String!
"""
Whether or not the deploy key has been verified.
"""
verified: Boolean!
}
"""
The connection type for DeployKey.
"""
type DeployKeyConnection {
"""
A list of edges.
"""
edges: [DeployKeyEdge]
"""
A list of nodes.
"""
nodes: [DeployKey]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type DeployKeyEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: DeployKey
}
"""
Represents a 'deployed' event on a given pull request.
"""
type DeployedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The deployment associated with the 'deployed' event.
"""
deployment: Deployment!
id: ID!
"""
PullRequest referenced by event.
"""
pullRequest: PullRequest!
"""
The ref associated with the 'deployed' event.
"""
ref: Ref
}
"""
Represents triggered deployment instance.
"""
type Deployment implements Node {
"""
Identifies the commit sha of the deployment.
"""
commit: Commit
"""
Identifies the oid of the deployment commit, even if the commit has been deleted.
"""
commitOid: String!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the actor who triggered the deployment.
"""
creator: Actor
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The deployment description.
"""
description: String
"""
The environment to which this deployment was made.
"""
environment: String
id: ID!
"""
The latest status of this deployment.
"""
latestStatus: DeploymentStatus
"""
Extra information that a deployment system might need.
"""
payload: String
"""
Identifies the Ref of the deployment, if the deployment was created by ref.
"""
ref: Ref
"""
Identifies the repository associated with the deployment.
"""
repository: Repository!
"""
The current state of the deployment.
"""
state: DeploymentState
"""
A list of statuses associated with the deployment.
"""
statuses(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): DeploymentStatusConnection
"""
The deployment task.
"""
task: String
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
}
"""
The connection type for Deployment.
"""
type DeploymentConnection {
"""
A list of edges.
"""
edges: [DeploymentEdge]
"""
A list of nodes.
"""
nodes: [Deployment]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type DeploymentEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Deployment
}
"""
Represents a 'deployment_environment_changed' event on a given pull request.
"""
type DeploymentEnvironmentChangedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
The deployment status that updated the deployment environment.
"""
deploymentStatus: DeploymentStatus!
id: ID!
"""
PullRequest referenced by event.
"""
pullRequest: PullRequest!
}
"""
Ordering options for deployment connections
"""
input DeploymentOrder {
"""
The ordering direction.
"""
direction: OrderDirection!
"""
The field to order deployments by.
"""
field: DeploymentOrderField!
}
"""
Properties by which deployment connections can be ordered.
"""
enum DeploymentOrderField {
"""
Order collection by creation time
"""
CREATED_AT
}
"""
The possible states in which a deployment can be.
"""
enum DeploymentState {
"""
The pending deployment was not updated after 30 minutes.
"""
ABANDONED
"""
The deployment is currently active.
"""
ACTIVE
"""
An inactive transient deployment.
"""
DESTROYED
"""
The deployment experienced an error.
"""
ERROR
"""
The deployment has failed.
"""
FAILURE
"""
The deployment is inactive.
"""
INACTIVE
"""
The deployment is in progress.
"""
IN_PROGRESS @preview(toggledBy: "flash-preview")
"""
The deployment is pending.
"""
PENDING
"""
The deployment has queued
"""
QUEUED @preview(toggledBy: "flash-preview")
}
"""
Describes the status of a given deployment attempt.
"""
type DeploymentStatus implements Node {
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the actor who triggered the deployment.
"""
creator: Actor
"""
Identifies the deployment associated with status.
"""
deployment: Deployment!
"""
Identifies the description of the deployment.
"""
description: String
"""
Identifies the environment of the deployment at the time of this deployment status
"""
environment: String @preview(toggledBy: "flash-preview")
"""
Identifies the environment URL of the deployment.
"""
environmentUrl: URI
id: ID!
"""
Identifies the log URL of the deployment.
"""
logUrl: URI
"""
Identifies the current state of the deployment.
"""
state: DeploymentStatusState!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
}
"""
The connection type for DeploymentStatus.
"""
type DeploymentStatusConnection {
"""
A list of edges.
"""
edges: [DeploymentStatusEdge]
"""
A list of nodes.
"""
nodes: [DeploymentStatus]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type DeploymentStatusEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: DeploymentStatus
}
"""
The possible states for a deployment status.
"""
enum DeploymentStatusState {
"""
The deployment experienced an error.
"""
ERROR
"""
The deployment has failed.
"""
FAILURE
"""
The deployment is inactive.
"""
INACTIVE
"""
The deployment is in progress.
"""
IN_PROGRESS
"""
The deployment is pending.
"""
PENDING
"""
The deployment is queued
"""
QUEUED
"""
The deployment was successful.
"""
SUCCESS
}
"""
Autogenerated input type of DismissPullRequestReview
"""
input DismissPullRequestReviewInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The contents of the pull request review dismissal message.
"""
message: String!
"""
The Node ID of the pull request review to modify.
"""
pullRequestReviewId: ID! @possibleTypes(concreteTypes: ["PullRequestReview"])
}
"""
Autogenerated return type of DismissPullRequestReview
"""
type DismissPullRequestReviewPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The dismissed pull request review.
"""
pullRequestReview: PullRequestReview
}
"""
Specifies a review comment to be left with a Pull Request Review.
"""
input DraftPullRequestReviewComment {
"""
Body of the comment to leave.
"""
body: String!
"""
Path to the file being commented on.
"""
path: String!
"""
Position in the file to leave a comment on.
"""
position: Int!
}
"""
An external identity provisioned by SAML SSO or SCIM.
"""
type ExternalIdentity implements Node {
"""
The GUID for this identity
"""
guid: String!
id: ID!
"""
Organization invitation for this SCIM-provisioned external identity
"""
organizationInvitation: OrganizationInvitation
"""
SAML Identity attributes
"""
samlIdentity: ExternalIdentitySamlAttributes
"""
SCIM Identity attributes
"""
scimIdentity: ExternalIdentityScimAttributes
"""
User linked to this external identity. Will be NULL if this identity has not been claimed by an organization member.
"""
user: User
}
"""
The connection type for ExternalIdentity.
"""
type ExternalIdentityConnection {
"""
A list of edges.
"""
edges: [ExternalIdentityEdge]
"""
A list of nodes.
"""
nodes: [ExternalIdentity]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type ExternalIdentityEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: ExternalIdentity
}
"""
SAML attributes for the External Identity
"""
type ExternalIdentitySamlAttributes {
"""
The NameID of the SAML identity
"""
nameId: String
}
"""
SCIM attributes for the External Identity
"""
type ExternalIdentityScimAttributes {
"""
The userName of the SCIM identity
"""
username: String
}
"""
The connection type for User.
"""
type FollowerConnection {
"""
A list of edges.
"""
edges: [UserEdge]
"""
A list of nodes.
"""
nodes: [User]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
The connection type for User.
"""
type FollowingConnection {
"""
A list of edges.
"""
edges: [UserEdge]
"""
A list of nodes.
"""
nodes: [User]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
A generic hovercard context with a message and icon
"""
type GenericHovercardContext implements HovercardContext @preview(toggledBy: "hagar-preview") {
"""
A string describing this context
"""
message: String!
"""
An octicon to accompany this context
"""
octicon: String!
}
"""
A Gist.
"""
type Gist implements Node & Starrable {
"""
A list of comments associated with the gist
"""
comments(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): GistCommentConnection!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
The gist description.
"""
description: String
id: ID!
"""
Whether the gist is public or not.
"""
isPublic: Boolean!
"""
The gist name.
"""
name: String!
"""
The gist owner.
"""
owner: RepositoryOwner
"""
Identifies when the gist was last pushed to.
"""
pushedAt: DateTime
"""
A list of users who have starred this starrable.
"""
stargazers(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Order for connection
"""
orderBy: StarOrder
): StargazerConnection!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
Returns a boolean indicating whether the viewing user has starred this starrable.
"""
viewerHasStarred: Boolean!
}
"""
Represents a comment on an Gist.
"""
type GistComment implements Comment & Deletable & Minimizable & Node & Updatable & UpdatableComment {
"""
The actor who authored the comment.
"""
author: Actor
"""
Author's association with the gist.
"""
authorAssociation: CommentAuthorAssociation!
"""
Identifies the comment body.
"""
body: String!
"""
The comment body rendered to HTML.
"""
bodyHTML: HTML!
"""
The body rendered to text.
"""
bodyText: String!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Check if this comment was created via an email reply.
"""
createdViaEmail: Boolean!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The actor who edited the comment.
"""
editor: Actor
"""
The associated gist.
"""
gist: Gist!
id: ID!
"""
Check if this comment was edited and includes an edit with the creation data
"""
includesCreatedEdit: Boolean!
"""
Returns whether or not a comment has been minimized.
"""
isMinimized: Boolean!
"""
The moment the editor made the last edit
"""
lastEditedAt: DateTime
"""
Returns why the comment was minimized.
"""
minimizedReason: String
"""
Identifies when the comment was published at.
"""
publishedAt: DateTime
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
A list of edits to this content.
"""
userContentEdits(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserContentEditConnection
"""
Check if the current viewer can delete this object.
"""
viewerCanDelete: Boolean!
"""
Check if the current viewer can minimize this object.
"""
viewerCanMinimize: Boolean!
"""
Check if the current viewer can update this object.
"""
viewerCanUpdate: Boolean!
"""
Reasons why the current viewer can not update this comment.
"""
viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!
"""
Did the viewer author this comment.
"""
viewerDidAuthor: Boolean!
}
"""
The connection type for GistComment.
"""
type GistCommentConnection {
"""
A list of edges.
"""
edges: [GistCommentEdge]
"""
A list of nodes.
"""
nodes: [GistComment]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type GistCommentEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: GistComment
}
"""
The connection type for Gist.
"""
type GistConnection {
"""
A list of edges.
"""
edges: [GistEdge]
"""
A list of nodes.
"""
nodes: [Gist]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type GistEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Gist
}
"""
Ordering options for gist connections
"""
input GistOrder {
"""
The ordering direction.
"""
direction: OrderDirection!
"""
The field to order repositories by.
"""
field: GistOrderField!
}
"""
Properties by which gist connections can be ordered.
"""
enum GistOrderField {
"""
Order gists by creation time
"""
CREATED_AT
"""
Order gists by push time
"""
PUSHED_AT
"""
Order gists by update time
"""
UPDATED_AT
}
"""
The privacy of a Gist
"""
enum GistPrivacy {
"""
Gists that are public and secret
"""
ALL
"""
Public
"""
PUBLIC
"""
Secret
"""
SECRET
}
"""
Represents an actor in a Git commit (ie. an author or committer).
"""
type GitActor {
"""
A URL pointing to the author's public avatar.
"""
avatarUrl(
"""
The size of the resulting square image.
"""
size: Int
): URI!
"""
The timestamp of the Git action (authoring or committing).
"""
date: GitTimestamp
"""
The email in the Git commit.
"""
email: String
"""
The name in the Git commit.
"""
name: String
"""
The GitHub user corresponding to the email field. Null if no such user exists.
"""
user: User
}
"""
Represents information about the GitHub instance.
"""
type GitHubMetadata {
"""
Returns a String that's a SHA of `github-services`
"""
gitHubServicesSha: GitObjectID!
"""
IP addresses that users connect to for git operations
"""
gitIpAddresses: [String!]
"""
IP addresses that service hooks are sent from
"""
hookIpAddresses: [String!]
"""
IP addresses that the importer connects from
"""
importerIpAddresses: [String!]
"""
Whether or not users are verified
"""
isPasswordAuthenticationVerifiable: Boolean!
"""
IP addresses for GitHub Pages' A records
"""
pagesIpAddresses: [String!]
}
"""
Represents a Git object.
"""
interface GitObject {
"""
An abbreviated version of the Git object ID
"""
abbreviatedOid: String!
"""
The HTTP path for this Git object
"""
commitResourcePath: URI!
"""
The HTTP URL for this Git object
"""
commitUrl: URI!
id: ID!
"""
The Git object ID
"""
oid: GitObjectID!
"""
The Repository the Git object belongs to
"""
repository: Repository!
}
"""
A Git object ID.
"""
scalar GitObjectID
"""
Git SSH string
"""
scalar GitSSHRemote
"""
Information about a signature (GPG or S/MIME) on a Commit or Tag.
"""
interface GitSignature {
"""
Email used to sign this object.
"""
email: String!
"""
True if the signature is valid and verified by GitHub.
"""
isValid: Boolean!
"""
Payload for GPG signing object. Raw ODB object without the signature header.
"""
payload: String!
"""
ASCII-armored signature header from object.
"""
signature: String!
"""
GitHub user corresponding to the email signing this commit.
"""
signer: User
"""
The state of this signature. `VALID` if signature is valid and verified by
GitHub, otherwise represents reason why signature is considered invalid.
"""
state: GitSignatureState!
"""
True if the signature was made with GitHub's signing key.
"""
wasSignedByGitHub: Boolean!
}
"""
The state of a Git signature.
"""
enum GitSignatureState {
"""
The signing certificate or its chain could not be verified
"""
BAD_CERT
"""
Invalid email used for signing
"""
BAD_EMAIL
"""
Signing key expired
"""
EXPIRED_KEY
"""
Internal error - the GPG verification service misbehaved
"""
GPGVERIFY_ERROR
"""
Internal error - the GPG verification service is unavailable at the moment
"""
GPGVERIFY_UNAVAILABLE
"""
Invalid signature
"""
INVALID
"""
Malformed signature
"""
MALFORMED_SIG
"""
The usage flags for the key that signed this don't allow signing
"""
NOT_SIGNING_KEY
"""
Email used for signing not known to GitHub
"""
NO_USER
"""
Valid siganture, though certificate revocation check failed
"""
OCSP_ERROR
"""
Valid signature, pending certificate revocation checking
"""
OCSP_PENDING
"""
One or more certificates in chain has been revoked
"""
OCSP_REVOKED
"""
Key used for signing not known to GitHub
"""
UNKNOWN_KEY
"""
Unknown signature type
"""
UNKNOWN_SIG_TYPE
"""
Unsigned
"""
UNSIGNED
"""
Email used for signing unverified on GitHub
"""
UNVERIFIED_EMAIL
"""
Valid signature and verified by GitHub
"""
VALID
}
"""
An ISO-8601 encoded date string. Unlike the DateTime type, GitTimestamp is not converted in UTC.
"""
scalar GitTimestamp
"""
Represents a GPG signature on a Commit or Tag.
"""
type GpgSignature implements GitSignature {
"""
Email used to sign this object.
"""
email: String!
"""
True if the signature is valid and verified by GitHub.
"""
isValid: Boolean!
"""
Hex-encoded ID of the key that signed this object.
"""
keyId: String
"""
Payload for GPG signing object. Raw ODB object without the signature header.
"""
payload: String!
"""
ASCII-armored signature header from object.
"""
signature: String!
"""
GitHub user corresponding to the email signing this commit.
"""
signer: User
"""
The state of this signature. `VALID` if signature is valid and verified by
GitHub, otherwise represents reason why signature is considered invalid.
"""
state: GitSignatureState!
"""
True if the signature was made with GitHub's signing key.
"""
wasSignedByGitHub: Boolean!
}
"""
A string containing HTML code.
"""
scalar HTML
"""
Represents a 'head_ref_deleted' event on a given pull request.
"""
type HeadRefDeletedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the Ref associated with the `head_ref_deleted` event.
"""
headRef: Ref
"""
Identifies the name of the Ref associated with the `head_ref_deleted` event.
"""
headRefName: String!
id: ID!
"""
PullRequest referenced by event.
"""
pullRequest: PullRequest!
}
"""
Represents a 'head_ref_force_pushed' event on a given pull request.
"""
type HeadRefForcePushedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the after commit SHA for the 'head_ref_force_pushed' event.
"""
afterCommit: Commit
"""
Identifies the before commit SHA for the 'head_ref_force_pushed' event.
"""
beforeCommit: Commit
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
PullRequest referenced by event.
"""
pullRequest: PullRequest!
"""
Identifies the fully qualified ref name for the 'head_ref_force_pushed' event.
"""
ref: Ref
}
"""
Represents a 'head_ref_restored' event on a given pull request.
"""
type HeadRefRestoredEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
PullRequest referenced by event.
"""
pullRequest: PullRequest!
}
"""
Detail needed to display a hovercard for a user
"""
type Hovercard @preview(toggledBy: "hagar-preview") {
"""
Each of the contexts for this hovercard
"""
contexts: [HovercardContext!]!
}
"""
An individual line of a hovercard
"""
interface HovercardContext @preview(toggledBy: "hagar-preview") {
"""
A string describing this context
"""
message: String!
"""
An octicon to accompany this context
"""
octicon: String!
}
"""
Autogenerated input type of InviteBusinessAdmin
"""
input InviteBusinessAdminInput {
"""
The ID of the business to which you want to invite an administrator.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The email of the person to invite as an administrator.
"""
email: String
"""
The login of a user to invite as an administrator.
"""
invitee: String
}
"""
Autogenerated return type of InviteBusinessAdmin
"""
type InviteBusinessAdminPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The created business administrator invitation
"""
invitation: BusinessMemberInvitation @preview(toggledBy: "gwenpool-preview")
}
"""
Autogenerated input type of InviteBusinessBillingManager
"""
input InviteBusinessBillingManagerInput {
"""
The ID of the business to which you want to invite a billing manager.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The email of the person to invite as a billing manager.
"""
email: String
"""
The login of a user to invite as a billing manager.
"""
invitee: String
}
"""
Autogenerated return type of InviteBusinessBillingManager
"""
type InviteBusinessBillingManagerPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The created business billing manager invitation
"""
invitation: BusinessMemberInvitation @preview(toggledBy: "gwenpool-preview")
}
"""
An Issue is a place to discuss ideas, enhancements, tasks, and bugs for a project.
"""
type Issue implements Assignable & Closable & Comment & Labelable & Lockable & Node & Reactable & RepositoryNode & Subscribable & UniformResourceLocatable & Updatable & UpdatableComment {
"""
Reason that the conversation was locked.
"""
activeLockReason: LockReason
"""
A list of Users assigned to this object.
"""
assignees(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection!
"""
The actor who authored the comment.
"""
author: Actor
"""
Author's association with the subject of the comment.
"""
authorAssociation: CommentAuthorAssociation!
"""
Identifies the body of the issue.
"""
body: String!
"""
Identifies the body of the issue rendered to HTML.
"""
bodyHTML: HTML!
"""
Identifies the body of the issue rendered to text.
"""
bodyText: String!
"""
`true` if the object is closed (definition of closed may depend on type)
"""
closed: Boolean!
"""
Identifies the date and time when the object was closed.
"""
closedAt: DateTime
"""
A list of comments associated with the Issue.
"""
comments(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): IssueCommentConnection!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Check if this comment was created via an email reply.
"""
createdViaEmail: Boolean!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The actor who edited the comment.
"""
editor: Actor
"""
The hovercard information for this issue
"""
hovercard(
"""
Whether or not to include notification contexts
"""
includeNotificationContexts: Boolean = true
): Hovercard! @preview(toggledBy: "hagar-preview")
id: ID!
"""
Check if this comment was edited and includes an edit with the creation data
"""
includesCreatedEdit: Boolean!
"""
A list of labels associated with the object.
"""
labels(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): LabelConnection
"""
The moment the editor made the last edit
"""
lastEditedAt: DateTime
"""
`true` if the object is locked
"""
locked: Boolean!
"""
Identifies the milestone associated with the issue.
"""
milestone: Milestone
"""
Identifies the issue number.
"""
number: Int!
"""
A list of Users that are participating in the Issue conversation.
"""
participants(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection!
"""
List of project cards associated with this issue.
"""
projectCards(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
A list of archived states to filter the cards by
"""
archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED]
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): ProjectCardConnection!
"""
Identifies when the comment was published at.
"""
publishedAt: DateTime
"""
A list of reactions grouped by content left on the subject.
"""
reactionGroups: [ReactionGroup!]
"""
A list of Reactions left on the Issue.
"""
reactions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Allows filtering Reactions by emoji.
"""
content: ReactionContent
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Allows specifying the order in which reactions are returned.
"""
orderBy: ReactionOrder
): ReactionConnection!
"""
The repository associated with this node.
"""
repository: Repository!
"""
The HTTP path for this issue
"""
resourcePath: URI!
"""
Identifies the state of the issue.
"""
state: IssueState!
"""
A list of events, comments, commits, etc. associated with the issue.
"""
timeline(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Allows filtering timeline events by a `since` timestamp.
"""
since: DateTime
): IssueTimelineConnection!
"""
A list of events, comments, commits, etc. associated with the issue.
"""
timelineItems(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Filter timeline items by type.
"""
itemTypes: [IssueTimelineItemsItemType!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Filter timeline items by a `since` timestamp.
"""
since: DateTime
"""
Skips the first _n_ elements in the list.
"""
skip: Int
): IssueTimelineItemsConnection! @preview(toggledBy: "starfire-preview")
"""
Identifies the issue title.
"""
title: String!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL for this issue
"""
url: URI!
"""
A list of edits to this content.
"""
userContentEdits(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserContentEditConnection
"""
Can user react to this subject
"""
viewerCanReact: Boolean!
"""
Check if the viewer is able to change their subscription status for the repository.
"""
viewerCanSubscribe: Boolean!
"""
Check if the current viewer can update this object.
"""
viewerCanUpdate: Boolean!
"""
Reasons why the current viewer can not update this comment.
"""
viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!
"""
Did the viewer author this comment.
"""
viewerDidAuthor: Boolean!
"""
Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.
"""
viewerSubscription: SubscriptionState
}
"""
Represents a comment on an Issue.
"""
type IssueComment implements Comment & Deletable & Minimizable & Node & Reactable & RepositoryNode & Updatable & UpdatableComment {
"""
The actor who authored the comment.
"""
author: Actor
"""
Author's association with the subject of the comment.
"""
authorAssociation: CommentAuthorAssociation!
"""
The body as Markdown.
"""
body: String!
"""
The body rendered to HTML.
"""
bodyHTML: HTML!
"""
The body rendered to text.
"""
bodyText: String!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Check if this comment was created via an email reply.
"""
createdViaEmail: Boolean!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The actor who edited the comment.
"""
editor: Actor
id: ID!
"""
Check if this comment was edited and includes an edit with the creation data
"""
includesCreatedEdit: Boolean!
"""
Returns whether or not a comment has been minimized.
"""
isMinimized: Boolean!
"""
Identifies the issue associated with the comment.
"""
issue: Issue!
"""
The moment the editor made the last edit
"""
lastEditedAt: DateTime
"""
Returns why the comment was minimized.
"""
minimizedReason: String
"""
Identifies when the comment was published at.
"""
publishedAt: DateTime
"""
Returns the pull request associated with the comment, if this comment was made on a
pull request.
"""
pullRequest: PullRequest
"""
A list of reactions grouped by content left on the subject.
"""
reactionGroups: [ReactionGroup!]
"""
A list of Reactions left on the Issue.
"""
reactions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Allows filtering Reactions by emoji.
"""
content: ReactionContent
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Allows specifying the order in which reactions are returned.
"""
orderBy: ReactionOrder
): ReactionConnection!
"""
The repository associated with this node.
"""
repository: Repository!
"""
The HTTP path for this issue comment
"""
resourcePath: URI!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL for this issue comment
"""
url: URI!
"""
A list of edits to this content.
"""
userContentEdits(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserContentEditConnection
"""
Check if the current viewer can delete this object.
"""
viewerCanDelete: Boolean!
"""
Check if the current viewer can minimize this object.
"""
viewerCanMinimize: Boolean!
"""
Can user react to this subject
"""
viewerCanReact: Boolean!
"""
Check if the current viewer can update this object.
"""
viewerCanUpdate: Boolean!
"""
Reasons why the current viewer can not update this comment.
"""
viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!
"""
Did the viewer author this comment.
"""
viewerDidAuthor: Boolean!
}
"""
The connection type for IssueComment.
"""
type IssueCommentConnection {
"""
A list of edges.
"""
edges: [IssueCommentEdge]
"""
A list of nodes.
"""
nodes: [IssueComment]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type IssueCommentEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: IssueComment
}
"""
The connection type for Issue.
"""
type IssueConnection {
"""
A list of edges.
"""
edges: [IssueEdge]
"""
A list of nodes.
"""
nodes: [Issue]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type IssueEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Issue
}
"""
Ways in which to filter lists of issues.
"""
input IssueFilters @preview(toggledBy: "starfire-preview") {
"""
List issues assigned to given name. Pass in `null` for issues with no assigned
user, and `*` for issues assigned to any user.
"""
assignee: String
"""
List issues created by given name.
"""
createdBy: String
"""
List issues where the list of label names exist on the issue.
"""
labels: [String!]
"""
List issues where the given name is mentioned in the issue.
"""
mentioned: String
"""
List issues by given milestone argument. If an string representation of an
integer is passed, it should refer to a milestone by its number field. Pass in
`null` for issues with no milestone, and `*` for issues that are assigned to any milestone.
"""
milestone: String
"""
List issues that have been updated at or after the given date.
"""
since: DateTime
"""
List issues filtered by the list of states given.
"""
states: [IssueState!]
"""
List issues subscribed to by viewer.
"""
viewerSubscribed: Boolean = false
}
"""
Used for return value of Repository.issueOrPullRequest.
"""
union IssueOrPullRequest = Issue | PullRequest
"""
Ways in which lists of issues can be ordered upon return.
"""
input IssueOrder {
"""
The direction in which to order issues by the specified field.
"""
direction: OrderDirection!
"""
The field in which to order issues by.
"""
field: IssueOrderField!
}
"""
Properties by which issue connections can be ordered.
"""
enum IssueOrderField {
"""
Order issues by comment count
"""
COMMENTS
"""
Order issues by creation time
"""
CREATED_AT
"""
Order issues by update time
"""
UPDATED_AT
}
"""
The possible states of an issue.
"""
enum IssueState {
"""
An issue that has been closed
"""
CLOSED
"""
An issue that is still open
"""
OPEN
}
"""
The connection type for IssueTimelineItem.
"""
type IssueTimelineConnection {
"""
A list of edges.
"""
edges: [IssueTimelineItemEdge]
"""
A list of nodes.
"""
nodes: [IssueTimelineItem]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An item in an issue timeline
"""
union IssueTimelineItem = AssignedEvent | ClosedEvent | Commit | CrossReferencedEvent | DemilestonedEvent | IssueComment | LabeledEvent | LockedEvent | MilestonedEvent | ReferencedEvent | RenamedTitleEvent | ReopenedEvent | SubscribedEvent | TransferredEvent | UnassignedEvent | UnlabeledEvent | UnlockedEvent | UnsubscribedEvent
"""
An edge in a connection.
"""
type IssueTimelineItemEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: IssueTimelineItem
}
"""
An item in an issue timeline
"""
union IssueTimelineItems = AddedToProjectEvent | AssignedEvent | ClosedEvent | CommentDeletedEvent | ConvertedNoteToIssueEvent | CrossReferencedEvent | DemilestonedEvent | IssueComment | LabeledEvent | LockedEvent | MentionedEvent | MilestonedEvent | MovedColumnsInProjectEvent | PinnedEvent | ReferencedEvent | RemovedFromProjectEvent | RenamedTitleEvent | ReopenedEvent | SubscribedEvent | TransferredEvent | UnassignedEvent | UnlabeledEvent | UnlockedEvent | UnpinnedEvent | UnsubscribedEvent
"""
The connection type for IssueTimelineItems.
"""
type IssueTimelineItemsConnection {
"""
A list of edges.
"""
edges: [IssueTimelineItemsEdge]
"""
Identifies the count of items after applying `before` and `after` filters.
"""
filteredCount: Int!
"""
A list of nodes.
"""
nodes: [IssueTimelineItems]
"""
Identifies the count of items after applying `before`/`after` filters and `first`/`last`/`skip` slicing.
"""
pageCount: Int!
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
"""
Identifies the date and time when the timeline was last updated.
"""
updatedAt: DateTime!
}
"""
An edge in a connection.
"""
type IssueTimelineItemsEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: IssueTimelineItems
}
"""
The possible item types found in a timeline.
"""
enum IssueTimelineItemsItemType {
"""
Represents a 'added_to_project' event on a given issue or pull request.
"""
ADDED_TO_PROJECT_EVENT
"""
Represents an 'assigned' event on any assignable object.
"""
ASSIGNED_EVENT
"""
Represents a 'closed' event on any `Closable`.
"""
CLOSED_EVENT
"""
Represents a 'comment_deleted' event on a given issue or pull request.
"""
COMMENT_DELETED_EVENT
"""
Represents a 'converted_note_to_issue' event on a given issue or pull request.
"""
CONVERTED_NOTE_TO_ISSUE_EVENT
"""
Represents a mention made by one issue or pull request to another.
"""
CROSS_REFERENCED_EVENT
"""
Represents a 'demilestoned' event on a given issue or pull request.
"""
DEMILESTONED_EVENT
"""
Represents a comment on an Issue.
"""
ISSUE_COMMENT
"""
Represents a 'labeled' event on a given issue or pull request.
"""
LABELED_EVENT
"""
Represents a 'locked' event on a given issue or pull request.
"""
LOCKED_EVENT
"""
Represents a 'mentioned' event on a given issue or pull request.
"""
MENTIONED_EVENT
"""
Represents a 'milestoned' event on a given issue or pull request.
"""
MILESTONED_EVENT
"""
Represents a 'moved_columns_in_project' event on a given issue or pull request.
"""
MOVED_COLUMNS_IN_PROJECT_EVENT
"""
Represents a 'pinned' event on a given issue or pull request.
"""
PINNED_EVENT
"""
Represents a 'referenced' event on a given `ReferencedSubject`.
"""
REFERENCED_EVENT
"""
Represents a 'removed_from_project' event on a given issue or pull request.
"""
REMOVED_FROM_PROJECT_EVENT
"""
Represents a 'renamed' event on a given issue or pull request
"""
RENAMED_TITLE_EVENT
"""
Represents a 'reopened' event on any `Closable`.
"""
REOPENED_EVENT
"""
Represents a 'subscribed' event on a given `Subscribable`.
"""
SUBSCRIBED_EVENT
"""
Represents a 'transferred' event on a given issue or pull request.
"""
TRANSFERRED_EVENT
"""
Represents an 'unassigned' event on any assignable object.
"""
UNASSIGNED_EVENT
"""
Represents an 'unlabeled' event on a given issue or pull request.
"""
UNLABELED_EVENT
"""
Represents an 'unlocked' event on a given issue or pull request.
"""
UNLOCKED_EVENT
"""
Represents an 'unpinned' event on a given issue or pull request.
"""
UNPINNED_EVENT
"""
Represents an 'unsubscribed' event on a given `Subscribable`.
"""
UNSUBSCRIBED_EVENT
}
"""
Represents a user signing up for a GitHub account.
"""
type JoinedGitHubContribution implements Contribution {
"""
Whether this contribution is associated with a record you do not have access to. For
example, your own 'first issue' contribution may have been made on a repository you can no
longer access.
"""
isRestricted: Boolean!
"""
When this contribution was made.
"""
occurredAt: DateTime!
"""
The HTTP path for this contribution.
"""
resourcePath: URI!
"""
The HTTP URL for this contribution.
"""
url: URI!
"""
The user who made this contribution.
"""
user: User!
}
"""
A label for categorizing Issues or Milestones with a given Repository.
"""
type Label implements Node {
"""
Identifies the label color.
"""
color: String!
"""
Identifies the date and time when the label was created.
"""
createdAt: DateTime
"""
A brief description of this label.
"""
description: String
id: ID!
"""
Indicates whether or not this is a default label.
"""
isDefault: Boolean!
"""
A list of issues associated with this label.
"""
issues(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Filtering options for issues returned from the connection.
"""
filterBy: IssueFilters @preview(toggledBy: "starfire-preview")
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
A list of label names to filter the pull requests by.
"""
labels: [String!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for issues returned from the connection.
"""
orderBy: IssueOrder
"""
A list of states to filter the issues by.
"""
states: [IssueState!]
): IssueConnection!
"""
Identifies the label name.
"""
name: String!
"""
A list of pull requests associated with this label.
"""
pullRequests(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
The base ref name to filter the pull requests by.
"""
baseRefName: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
The head ref name to filter the pull requests by.
"""
headRefName: String
"""
A list of label names to filter the pull requests by.
"""
labels: [String!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for pull requests returned from the connection.
"""
orderBy: IssueOrder
"""
A list of states to filter the pull requests by.
"""
states: [PullRequestState!]
): PullRequestConnection!
"""
The repository associated with this label.
"""
repository: Repository!
"""
The HTTP path for this label.
"""
resourcePath: URI!
"""
Identifies the date and time when the label was last updated.
"""
updatedAt: DateTime
"""
The HTTP URL for this label.
"""
url: URI!
}
"""
The connection type for Label.
"""
type LabelConnection {
"""
A list of edges.
"""
edges: [LabelEdge]
"""
A list of nodes.
"""
nodes: [Label]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type LabelEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Label
}
"""
An object that can have labels assigned to it.
"""
interface Labelable {
"""
A list of labels associated with the object.
"""
labels(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): LabelConnection
}
"""
Represents a 'labeled' event on a given issue or pull request.
"""
type LabeledEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
Identifies the label associated with the 'labeled' event.
"""
label: Label!
"""
Identifies the `Labelable` associated with the event.
"""
labelable: Labelable!
}
"""
Represents a given language found in repositories.
"""
type Language implements Node {
"""
The color defined for the current language.
"""
color: String
id: ID!
"""
The name of the current language.
"""
name: String!
}
"""
A list of languages associated with the parent.
"""
type LanguageConnection {
"""
A list of edges.
"""
edges: [LanguageEdge]
"""
A list of nodes.
"""
nodes: [Language]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
"""
The total size in bytes of files written in that language.
"""
totalSize: Int!
}
"""
Represents the language of a repository.
"""
type LanguageEdge {
cursor: String!
node: Language!
"""
The number of bytes of code written in the language.
"""
size: Int!
}
"""
Ordering options for language connections.
"""
input LanguageOrder {
"""
The ordering direction.
"""
direction: OrderDirection!
"""
The field to order languages by.
"""
field: LanguageOrderField!
}
"""
Properties by which language connections can be ordered.
"""
enum LanguageOrderField {
"""
Order languages by the size of all files containing the language
"""
SIZE
}
"""
A repository's open source license
"""
type License implements Node {
"""
The full text of the license
"""
body: String!
"""
The conditions set by the license
"""
conditions: [LicenseRule]!
"""
A human-readable description of the license
"""
description: String
"""
Whether the license should be featured
"""
featured: Boolean!
"""
Whether the license should be displayed in license pickers
"""
hidden: Boolean!
id: ID!
"""
Instructions on how to implement the license
"""
implementation: String
"""
The lowercased SPDX ID of the license
"""
key: String!
"""
The limitations set by the license
"""
limitations: [LicenseRule]!
"""
The license full name specified by
"""
name: String!
"""
Customary short name if applicable (e.g, GPLv3)
"""
nickname: String
"""
The permissions set by the license
"""
permissions: [LicenseRule]!
"""
Whether the license is a pseudo-license placeholder (e.g., other, no-license)
"""
pseudoLicense: Boolean!
"""
Short identifier specified by
"""
spdxId: String
"""
URL to the license on
"""
url: URI
}
"""
Describes a License's conditions, permissions, and limitations
"""
type LicenseRule {
"""
A description of the rule
"""
description: String!
"""
The machine-readable rule key
"""
key: String!
"""
The human-readable rule label
"""
label: String!
}
"""
Autogenerated input type of LockLockable
"""
input LockLockableInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
A reason for why the issue or pull request will be locked.
"""
lockReason: LockReason
"""
ID of the issue or pull request to be locked.
"""
lockableId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "Lockable")
}
"""
Autogenerated return type of LockLockable
"""
type LockLockablePayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The item that was locked.
"""
lockedRecord: Lockable
}
"""
The possible reasons that an issue or pull request was locked.
"""
enum LockReason {
"""
The issue or pull request was locked because the conversation was off-topic.
"""
OFF_TOPIC
"""
The issue or pull request was locked because the conversation was resolved.
"""
RESOLVED
"""
The issue or pull request was locked because the conversation was spam.
"""
SPAM
"""
The issue or pull request was locked because the conversation was too heated.
"""
TOO_HEATED
}
"""
An object that can be locked.
"""
interface Lockable {
"""
Reason that the conversation was locked.
"""
activeLockReason: LockReason
"""
`true` if the object is locked
"""
locked: Boolean!
}
"""
Represents a 'locked' event on a given issue or pull request.
"""
type LockedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
Reason that the conversation was locked (optional).
"""
lockReason: LockReason
"""
Object that was locked.
"""
lockable: Lockable!
}
"""
A public description of a Marketplace category.
"""
type MarketplaceCategory implements Node {
"""
The category's description.
"""
description: String
"""
The technical description of how apps listed in this category work with GitHub.
"""
howItWorks: String
id: ID!
"""
The category's name.
"""
name: String!
"""
How many Marketplace listings have this as their primary category.
"""
primaryListingCount: Int!
"""
The HTTP path for this Marketplace category.
"""
resourcePath: URI!
"""
How many Marketplace listings have this as their secondary category.
"""
secondaryListingCount: Int!
"""
The short name of the category used in its URL.
"""
slug: String!
"""
The HTTP URL for this Marketplace category.
"""
url: URI!
}
"""
A listing in the GitHub integration marketplace.
"""
type MarketplaceListing implements Node {
"""
The GitHub App this listing represents.
"""
app: App
"""
URL to the listing owner's company site.
"""
companyUrl: URI
"""
The HTTP path for configuring access to the listing's integration or OAuth app
"""
configurationResourcePath: URI!
"""
The HTTP URL for configuring access to the listing's integration or OAuth app
"""
configurationUrl: URI!
"""
URL to the listing's documentation.
"""
documentationUrl: URI
"""
The listing's detailed description.
"""
extendedDescription: String
"""
The listing's detailed description rendered to HTML.
"""
extendedDescriptionHTML: HTML!
"""
The listing's introductory description.
"""
fullDescription: String!
"""
The listing's introductory description rendered to HTML.
"""
fullDescriptionHTML: HTML!
"""
Whether this listing has been submitted for review from GitHub for approval to be displayed in the Marketplace.
"""
hasApprovalBeenRequested: Boolean!
"""
Does this listing have any plans with a free trial?
"""
hasPublishedFreeTrialPlans: Boolean!
"""
Does this listing have a terms of service link?
"""
hasTermsOfService: Boolean!
"""
A technical description of how this app works with GitHub.
"""
howItWorks: String
"""
The listing's technical description rendered to HTML.
"""
howItWorksHTML: HTML!
id: ID!
"""
URL to install the product to the viewer's account or organization.
"""
installationUrl: URI
"""
Whether this listing's app has been installed for the current viewer
"""
installedForViewer: Boolean!
"""
Whether this listing has been approved for display in the Marketplace.
"""
isApproved: Boolean!
"""
Whether this listing has been removed from the Marketplace.
"""
isDelisted: Boolean!
"""
Whether this listing is still an editable draft that has not been submitted
for review and is not publicly visible in the Marketplace.
"""
isDraft: Boolean!
"""
Whether the product this listing represents is available as part of a paid plan.
"""
isPaid: Boolean!
"""
Whether this listing has been rejected by GitHub for display in the Marketplace.
"""
isRejected: Boolean!
"""
The hex color code, without the leading '#', for the logo background.
"""
logoBackgroundColor: String!
"""
URL for the listing's logo image.
"""
logoUrl(
"""
The size in pixels of the resulting square image.
"""
size: Int = 400
): URI
"""
The listing's full name.
"""
name: String!
"""
The listing's very short description without a trailing period or ampersands.
"""
normalizedShortDescription: String!
"""
URL to the listing's detailed pricing.
"""
pricingUrl: URI
"""
The category that best describes the listing.
"""
primaryCategory: MarketplaceCategory!
"""
URL to the listing's privacy policy.
"""
privacyPolicyUrl: URI!
"""
The HTTP path for the Marketplace listing.
"""
resourcePath: URI!
"""
The URLs for the listing's screenshots.
"""
screenshotUrls: [String]!
"""
An alternate category that describes the listing.
"""
secondaryCategory: MarketplaceCategory
"""
The listing's very short description.
"""
shortDescription: String!
"""
The short name of the listing used in its URL.
"""
slug: String!
"""
URL to the listing's status page.
"""
statusUrl: URI
"""
An email address for support for this listing's app.
"""
supportEmail: String
"""
Either a URL or an email address for support for this listing's app.
"""
supportUrl: URI!
"""
URL to the listing's terms of service.
"""
termsOfServiceUrl: URI
"""
The HTTP URL for the Marketplace listing.
"""
url: URI!
"""
Can the current viewer add plans for this Marketplace listing.
"""
viewerCanAddPlans: Boolean!
"""
Can the current viewer approve this Marketplace listing.
"""
viewerCanApprove: Boolean!
"""
Can the current viewer delist this Marketplace listing.
"""
viewerCanDelist: Boolean!
"""
Can the current viewer edit this Marketplace listing.
"""
viewerCanEdit: Boolean!
"""
Can the current viewer edit the primary and secondary category of this
Marketplace listing.
"""
viewerCanEditCategories: Boolean!
"""
Can the current viewer edit the plans for this Marketplace listing.
"""
viewerCanEditPlans: Boolean!
"""
Can the current viewer return this Marketplace listing to draft state
so it becomes editable again.
"""
viewerCanRedraft: Boolean!
"""
Can the current viewer reject this Marketplace listing by returning it to
an editable draft state or rejecting it entirely.
"""
viewerCanReject: Boolean!
"""
Can the current viewer request this listing be reviewed for display in
the Marketplace.
"""
viewerCanRequestApproval: Boolean!
"""
Indicates whether the current user has an active subscription to this Marketplace listing.
"""
viewerHasPurchased: Boolean!
"""
Indicates if the current user has purchased a subscription to this Marketplace listing
for all of the organizations the user owns.
"""
viewerHasPurchasedForAllOrganizations: Boolean!
"""
Does the current viewer role allow them to administer this Marketplace listing.
"""
viewerIsListingAdmin: Boolean!
}
"""
Look up Marketplace Listings
"""
type MarketplaceListingConnection {
"""
A list of edges.
"""
edges: [MarketplaceListingEdge]
"""
A list of nodes.
"""
nodes: [MarketplaceListing]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type MarketplaceListingEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: MarketplaceListing
}
"""
Represents a 'mentioned' event on a given issue or pull request.
"""
type MentionedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
}
"""
Autogenerated input type of MergePullRequest
"""
input MergePullRequestInput @preview(toggledBy: "ocelot-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Commit body to use for the merge commit; if omitted, a default message will be used
"""
commitBody: String
"""
Commit headline to use for the merge commit; if omitted, a default message will be used.
"""
commitHeadline: String
"""
OID that the pull request head ref must match to allow merge; if omitted, no check is performed.
"""
expectedHeadOid: GitObjectID
"""
ID of the pull request to be merged.
"""
pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"])
}
"""
Autogenerated return type of MergePullRequest
"""
type MergePullRequestPayload @preview(toggledBy: "ocelot-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The pull request that was merged.
"""
pullRequest: PullRequest
}
"""
Detailed status information about a pull request merge.
"""
enum MergeStateStatus {
"""
The head ref is out of date.
"""
BEHIND
"""
The merge is blocked.
"""
BLOCKED
"""
Mergeable and passing commit status.
"""
CLEAN
"""
The merge commit cannot be cleanly created.
"""
DIRTY
"""
Mergeable with passing commit status and pre-recieve hooks.
"""
HAS_HOOKS
"""
The state cannot currently be determined.
"""
UNKNOWN
"""
Mergeable with non-passing commit status.
"""
UNSTABLE
}
"""
Whether or not a PullRequest can be merged.
"""
enum MergeableState {
"""
The pull request cannot be merged due to merge conflicts.
"""
CONFLICTING
"""
The pull request can be merged.
"""
MERGEABLE
"""
The mergeability of the pull request is still being calculated.
"""
UNKNOWN
}
"""
Represents a 'merged' event on a given pull request.
"""
type MergedEvent implements Node & UniformResourceLocatable {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the commit associated with the `merge` event.
"""
commit: Commit
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
Identifies the Ref associated with the `merge` event.
"""
mergeRef: Ref
"""
Identifies the name of the Ref associated with the `merge` event.
"""
mergeRefName: String!
"""
PullRequest referenced by event.
"""
pullRequest: PullRequest!
"""
The HTTP path for this merged event.
"""
resourcePath: URI!
"""
The HTTP URL for this merged event.
"""
url: URI!
}
"""
Represents a Milestone object on a given repository.
"""
type Milestone implements Closable & Node & UniformResourceLocatable {
"""
`true` if the object is closed (definition of closed may depend on type)
"""
closed: Boolean!
"""
Identifies the date and time when the object was closed.
"""
closedAt: DateTime
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the actor who created the milestone.
"""
creator: Actor
"""
Identifies the description of the milestone.
"""
description: String
"""
Identifies the due date of the milestone.
"""
dueOn: DateTime
id: ID!
"""
A list of issues associated with the milestone.
"""
issues(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Filtering options for issues returned from the connection.
"""
filterBy: IssueFilters @preview(toggledBy: "starfire-preview")
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
A list of label names to filter the pull requests by.
"""
labels: [String!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for issues returned from the connection.
"""
orderBy: IssueOrder
"""
A list of states to filter the issues by.
"""
states: [IssueState!]
): IssueConnection!
"""
Identifies the number of the milestone.
"""
number: Int!
"""
A list of pull requests associated with the milestone.
"""
pullRequests(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
The base ref name to filter the pull requests by.
"""
baseRefName: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
The head ref name to filter the pull requests by.
"""
headRefName: String
"""
A list of label names to filter the pull requests by.
"""
labels: [String!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for pull requests returned from the connection.
"""
orderBy: IssueOrder
"""
A list of states to filter the pull requests by.
"""
states: [PullRequestState!]
): PullRequestConnection!
"""
The repository associated with this milestone.
"""
repository: Repository!
"""
The HTTP path for this milestone
"""
resourcePath: URI!
"""
Identifies the state of the milestone.
"""
state: MilestoneState!
"""
Identifies the title of the milestone.
"""
title: String!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL for this milestone
"""
url: URI!
}
"""
The connection type for Milestone.
"""
type MilestoneConnection {
"""
A list of edges.
"""
edges: [MilestoneEdge]
"""
A list of nodes.
"""
nodes: [Milestone]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type MilestoneEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Milestone
}
"""
Types that can be inside a Milestone.
"""
union MilestoneItem = Issue | PullRequest
"""
Ordering options for milestone connections.
"""
input MilestoneOrder {
"""
The ordering direction.
"""
direction: OrderDirection!
"""
The field to order milestones by.
"""
field: MilestoneOrderField!
}
"""
Properties by which milestone connections can be ordered.
"""
enum MilestoneOrderField {
"""
Order milestones by when they were created.
"""
CREATED_AT
"""
Order milestones by when they are due.
"""
DUE_DATE
"""
Order milestones by their number.
"""
NUMBER
"""
Order milestones by when they were last updated.
"""
UPDATED_AT
}
"""
The possible states of a milestone.
"""
enum MilestoneState {
"""
A milestone that has been closed.
"""
CLOSED
"""
A milestone that is still open.
"""
OPEN
}
"""
Represents a 'milestoned' event on a given issue or pull request.
"""
type MilestonedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
Identifies the milestone title associated with the 'milestoned' event.
"""
milestoneTitle: String!
"""
Object referenced by event.
"""
subject: MilestoneItem!
}
"""
Entities that can be minimized.
"""
interface Minimizable @preview(toggledBy: "queen-beryl-preview") {
"""
Returns whether or not a comment has been minimized.
"""
isMinimized: Boolean!
"""
Returns why the comment was minimized.
"""
minimizedReason: String
"""
Check if the current viewer can minimize this object.
"""
viewerCanMinimize: Boolean!
}
"""
Autogenerated input type of MinimizeComment
"""
input MinimizeCommentInput {
"""
The classification of comment
"""
classifier: ReportedContentClassifiers!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Node ID of the subject to modify.
"""
subjectId: ID! @possibleTypes(concreteTypes: ["CommitComment", "GistComment", "IssueComment", "PullRequestReviewComment"], abstractType: "Minimizable")
}
"""
Autogenerated return type of MinimizeComment
"""
type MinimizeCommentPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The comment that was minimized.
"""
minimizedComment: Minimizable
}
"""
Autogenerated input type of MoveProjectCard
"""
input MoveProjectCardInput {
"""
Place the new card after the card with this id. Pass null to place it at the top.
"""
afterCardId: ID @possibleTypes(concreteTypes: ["ProjectCard"])
"""
The id of the card to move.
"""
cardId: ID! @possibleTypes(concreteTypes: ["ProjectCard"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The id of the column to move it into.
"""
columnId: ID! @possibleTypes(concreteTypes: ["ProjectColumn"])
}
"""
Autogenerated return type of MoveProjectCard
"""
type MoveProjectCardPayload {
"""
The new edge of the moved card.
"""
cardEdge: ProjectCardEdge
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated input type of MoveProjectColumn
"""
input MoveProjectColumnInput {
"""
Place the new column after the column with this id. Pass null to place it at the front.
"""
afterColumnId: ID @possibleTypes(concreteTypes: ["ProjectColumn"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The id of the column to move.
"""
columnId: ID! @possibleTypes(concreteTypes: ["ProjectColumn"])
}
"""
Autogenerated return type of MoveProjectColumn
"""
type MoveProjectColumnPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The new edge of the moved column.
"""
columnEdge: ProjectColumnEdge
}
"""
Represents a 'moved_columns_in_project' event on a given issue or pull request.
"""
type MovedColumnsInProjectEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
"""
Column name the issue or pull request was moved from.
"""
previousProjectColumnName: String! @preview(toggledBy: "starfox-preview")
"""
Project referenced by event.
"""
project: Project @preview(toggledBy: "starfox-preview")
"""
Project card referenced by this project event.
"""
projectCard: ProjectCard @preview(toggledBy: "starfox-preview")
"""
Column name the issue or pull request was moved to.
"""
projectColumnName: String! @preview(toggledBy: "starfox-preview")
}
"""
The root query for implementing GraphQL mutations.
"""
type Mutation {
"""
Accepts a pending invitation for a user to join a business.
"""
acceptBusinessMemberInvitation(input: AcceptBusinessMemberInvitationInput!): AcceptBusinessMemberInvitationPayload @preview(toggledBy: "gwenpool-preview")
"""
Applies a suggested topic to the repository.
"""
acceptTopicSuggestion(input: AcceptTopicSuggestionInput!): AcceptTopicSuggestionPayload
"""
Adds assignees to an assignable object.
"""
addAssigneesToAssignable(input: AddAssigneesToAssignableInput!): AddAssigneesToAssignablePayload @preview(toggledBy: "starfire-preview")
"""
Adds a comment to an Issue or Pull Request.
"""
addComment(input: AddCommentInput!): AddCommentPayload
"""
Adds labels to a labelable object.
"""
addLabelsToLabelable(input: AddLabelsToLabelableInput!): AddLabelsToLabelablePayload @preview(toggledBy: "starfire-preview")
"""
Adds a card to a ProjectColumn. Either `contentId` or `note` must be provided but **not** both.
"""
addProjectCard(input: AddProjectCardInput!): AddProjectCardPayload
"""
Adds a column to a Project.
"""
addProjectColumn(input: AddProjectColumnInput!): AddProjectColumnPayload
"""
Adds a review to a Pull Request.
"""
addPullRequestReview(input: AddPullRequestReviewInput!): AddPullRequestReviewPayload
"""
Adds a comment to a review.
"""
addPullRequestReviewComment(input: AddPullRequestReviewCommentInput!): AddPullRequestReviewCommentPayload
"""
Adds a reaction to a subject.
"""
addReaction(input: AddReactionInput!): AddReactionPayload
"""
Adds a star to a Starrable.
"""
addStar(input: AddStarInput!): AddStarPayload
"""
Cancels a pending invitation for an administrator to join a business.
"""
cancelBusinessAdminInvitation(input: CancelBusinessAdminInvitationInput!): CancelBusinessAdminInvitationPayload @preview(toggledBy: "gwenpool-preview")
"""
Cancels a pending invitation for a billing manager to join a business.
"""
cancelBusinessBillingManagerInvitation(input: CancelBusinessBillingManagerInvitationInput!): CancelBusinessBillingManagerInvitationPayload @preview(toggledBy: "gwenpool-preview")
"""
Clears all labels from a labelable object.
"""
clearLabelsFromLabelable(input: ClearLabelsFromLabelableInput!): ClearLabelsFromLabelablePayload @preview(toggledBy: "starfire-preview")
"""
Close an issue.
"""
closeIssue(input: CloseIssueInput!): CloseIssuePayload @preview(toggledBy: "starfire-preview")
"""
Close a pull request.
"""
closePullRequest(input: ClosePullRequestInput!): ClosePullRequestPayload @preview(toggledBy: "ocelot-preview")
"""
Convert a project note card to one associated with a newly created issue.
"""
convertProjectCardNoteToIssue(input: ConvertProjectCardNoteToIssueInput!): ConvertProjectCardNoteToIssuePayload @preview(toggledBy: "starfire-preview")
"""
Create a new branch protection rule
"""
createBranchProtectionRule(input: CreateBranchProtectionRuleInput!): CreateBranchProtectionRulePayload
"""
Create a check run.
"""
createCheckRun(input: CreateCheckRunInput!): CreateCheckRunPayload @preview(toggledBy: "antiope-preview")
"""
Create a check suite
"""
createCheckSuite(input: CreateCheckSuiteInput!): CreateCheckSuitePayload @preview(toggledBy: "antiope-preview")
"""
Create a content attachment.
"""
createContentAttachment(input: CreateContentAttachmentInput!): CreateContentAttachmentPayload @preview(toggledBy: "corsair-preview")
"""
Creates a new deployment event.
"""
createDeployment(input: CreateDeploymentInput!): CreateDeploymentPayload @preview(toggledBy: "flash-preview")
"""
Create a deployment status.
"""
createDeploymentStatus(input: CreateDeploymentStatusInput!): CreateDeploymentStatusPayload @preview(toggledBy: "flash-preview")
"""
Creates a new issue.
"""
createIssue(input: CreateIssueInput!): CreateIssuePayload @preview(toggledBy: "starfire-preview")
"""
Creates a new project.
"""
createProject(input: CreateProjectInput!): CreateProjectPayload
"""
Create a new pull request
"""
createPullRequest(input: CreatePullRequestInput!): CreatePullRequestPayload @preview(toggledBy: "ocelot-preview")
"""
Creates a new team discussion.
"""
createTeamDiscussion(input: CreateTeamDiscussionInput!): CreateTeamDiscussionPayload @preview(toggledBy: "echo-preview")
"""
Creates a new team discussion comment.
"""
createTeamDiscussionComment(input: CreateTeamDiscussionCommentInput!): CreateTeamDiscussionCommentPayload @preview(toggledBy: "echo-preview")
"""
Rejects a suggested topic for the repository.
"""
declineTopicSuggestion(input: DeclineTopicSuggestionInput!): DeclineTopicSuggestionPayload
"""
Delete a branch protection rule
"""
deleteBranchProtectionRule(input: DeleteBranchProtectionRuleInput!): DeleteBranchProtectionRulePayload
"""
Deletes an Issue object.
"""
deleteIssue(input: DeleteIssueInput!): DeleteIssuePayload @preview(toggledBy: "starfire-preview")
"""
Deletes an IssueComment object.
"""
deleteIssueComment(input: DeleteIssueCommentInput!): DeleteIssueCommentPayload @preview(toggledBy: "starfire-preview")
"""
Deletes a project.
"""
deleteProject(input: DeleteProjectInput!): DeleteProjectPayload
"""
Deletes a project card.
"""
deleteProjectCard(input: DeleteProjectCardInput!): DeleteProjectCardPayload
"""
Deletes a project column.
"""
deleteProjectColumn(input: DeleteProjectColumnInput!): DeleteProjectColumnPayload
"""
Deletes a pull request review.
"""
deletePullRequestReview(input: DeletePullRequestReviewInput!): DeletePullRequestReviewPayload
"""
Deletes a pull request review comment.
"""
deletePullRequestReviewComment(input: DeletePullRequestReviewCommentInput!): DeletePullRequestReviewCommentPayload @preview(toggledBy: "ocelot-preview")
"""
Deletes a team discussion.
"""
deleteTeamDiscussion(input: DeleteTeamDiscussionInput!): DeleteTeamDiscussionPayload @preview(toggledBy: "echo-preview")
"""
Deletes a team discussion comment.
"""
deleteTeamDiscussionComment(input: DeleteTeamDiscussionCommentInput!): DeleteTeamDiscussionCommentPayload @preview(toggledBy: "echo-preview")
"""
Dismisses an approved or rejected pull request review.
"""
dismissPullRequestReview(input: DismissPullRequestReviewInput!): DismissPullRequestReviewPayload
"""
Invite someone to become an administrator of the business
"""
inviteBusinessAdmin(input: InviteBusinessAdminInput!): InviteBusinessAdminPayload @preview(toggledBy: "gwenpool-preview")
"""
Invite someone to become a billing manager of the business
"""
inviteBusinessBillingManager(input: InviteBusinessBillingManagerInput!): InviteBusinessBillingManagerPayload @preview(toggledBy: "gwenpool-preview")
"""
Lock a lockable object
"""
lockLockable(input: LockLockableInput!): LockLockablePayload
"""
Merge a pull request.
"""
mergePullRequest(input: MergePullRequestInput!): MergePullRequestPayload @preview(toggledBy: "ocelot-preview")
"""
Minimizes a comment on an Issue, Commit, Pull Request, or Gist
"""
minimizeComment(input: MinimizeCommentInput!): MinimizeCommentPayload @preview(toggledBy: "queen-beryl-preview")
"""
Moves a project card to another place.
"""
moveProjectCard(input: MoveProjectCardInput!): MoveProjectCardPayload
"""
Moves a project column to another place.
"""
moveProjectColumn(input: MoveProjectColumnInput!): MoveProjectColumnPayload
"""
Pin an issue to a repository
"""
pinIssue(input: PinIssueInput!): PinIssuePayload @preview(toggledBy: "elektra-preview")
"""
Removes assignees from an assignable object.
"""
removeAssigneesFromAssignable(input: RemoveAssigneesFromAssignableInput!): RemoveAssigneesFromAssignablePayload @preview(toggledBy: "starfire-preview")
"""
Removes an admin from the business
"""
removeBusinessAdmin(input: RemoveBusinessAdminInput!): RemoveBusinessAdminPayload @preview(toggledBy: "gwenpool-preview")
"""
Removes a billing manager from the business
"""
removeBusinessBillingManager(input: RemoveBusinessBillingManagerInput!): RemoveBusinessBillingManagerPayload @preview(toggledBy: "gwenpool-preview")
"""
Removes labels from a Labelable object.
"""
removeLabelsFromLabelable(input: RemoveLabelsFromLabelableInput!): RemoveLabelsFromLabelablePayload @preview(toggledBy: "starfire-preview")
"""
Removes outside collaborator from all repositories in an organization.
"""
removeOutsideCollaborator(input: RemoveOutsideCollaboratorInput!): RemoveOutsideCollaboratorPayload
"""
Removes a reaction from a subject.
"""
removeReaction(input: RemoveReactionInput!): RemoveReactionPayload
"""
Removes a star from a Starrable.
"""
removeStar(input: RemoveStarInput!): RemoveStarPayload
"""
Reopen a issue.
"""
reopenIssue(input: ReopenIssueInput!): ReopenIssuePayload @preview(toggledBy: "starfire-preview")
"""
Reopen a pull request.
"""
reopenPullRequest(input: ReopenPullRequestInput!): ReopenPullRequestPayload @preview(toggledBy: "ocelot-preview")
"""
Set review requests on a pull request.
"""
requestReviews(input: RequestReviewsInput!): RequestReviewsPayload
"""
Rerequests an existing check suite.
"""
rerequestCheckSuite(input: RerequestCheckSuiteInput!): RerequestCheckSuitePayload @preview(toggledBy: "antiope-preview")
"""
Marks a review thread as resolved.
"""
resolveReviewThread(input: ResolveReviewThreadInput!): ResolveReviewThreadPayload @preview(toggledBy: "cateye-preview")
"""
Submits a pending pull request review.
"""
submitPullRequestReview(input: SubmitPullRequestReviewInput!): SubmitPullRequestReviewPayload
"""
Unlock a lockable object
"""
unlockLockable(input: UnlockLockableInput!): UnlockLockablePayload
"""
Unmark an issue as a duplicate of another issue.
"""
unmarkIssueAsDuplicate(input: UnmarkIssueAsDuplicateInput!): UnmarkIssueAsDuplicatePayload @preview(toggledBy: "starfire-preview")
"""
Unminimizes a comment on an Issue, Commit, Pull Request, or Gist
"""
unminimizeComment(input: UnminimizeCommentInput!): UnminimizeCommentPayload @preview(toggledBy: "queen-beryl-preview")
"""
Unpin a pinned issue from a repository
"""
unpinIssue(input: UnpinIssueInput!): UnpinIssuePayload @preview(toggledBy: "elektra-preview")
"""
Marks a review thread as unresolved.
"""
unresolveReviewThread(input: UnresolveReviewThreadInput!): UnresolveReviewThreadPayload @preview(toggledBy: "cateye-preview")
"""
Create a new branch protection rule
"""
updateBranchProtectionRule(input: UpdateBranchProtectionRuleInput!): UpdateBranchProtectionRulePayload
"""
Sets whether private repository forks are enabled for a business.
"""
updateBusinessAllowPrivateRepositoryForkingSetting(input: UpdateBusinessAllowPrivateRepositoryForkingSettingInput!): UpdateBusinessAllowPrivateRepositoryForkingSettingPayload @preview(toggledBy: "gwenpool-preview")
"""
Sets the default repository permission for organizations in a business.
"""
updateBusinessDefaultRepositoryPermissionSetting(input: UpdateBusinessDefaultRepositoryPermissionSettingInput!): UpdateBusinessDefaultRepositoryPermissionSettingPayload @preview(toggledBy: "gwenpool-preview")
"""
Sets whether organization members with admin permissions on a repository can change repository visibility.
"""
updateBusinessMembersCanChangeRepositoryVisibilitySetting(input: UpdateBusinessMembersCanChangeRepositoryVisibilitySettingInput!): UpdateBusinessMembersCanChangeRepositoryVisibilitySettingPayload @preview(toggledBy: "gwenpool-preview")
"""
Sets the members can create repositories setting for a business.
"""
updateBusinessMembersCanCreateRepositoriesSetting(input: UpdateBusinessMembersCanCreateRepositoriesSettingInput!): UpdateBusinessMembersCanCreateRepositoriesSettingPayload @preview(toggledBy: "gwenpool-preview")
"""
Sets the members can delete issues setting for a business.
"""
updateBusinessMembersCanDeleteIssuesSetting(input: UpdateBusinessMembersCanDeleteIssuesSettingInput!): UpdateBusinessMembersCanDeleteIssuesSettingPayload @preview(toggledBy: "gwenpool-preview")
"""
Sets the members can delete repositories setting for a business.
"""
updateBusinessMembersCanDeleteRepositoriesSetting(input: UpdateBusinessMembersCanDeleteRepositoriesSettingInput!): UpdateBusinessMembersCanDeleteRepositoriesSettingPayload @preview(toggledBy: "gwenpool-preview")
"""
Sets whether members can invite collaborators are enabled for a business.
"""
updateBusinessMembersCanInviteCollaboratorsSetting(input: UpdateBusinessMembersCanInviteCollaboratorsSettingInput!): UpdateBusinessMembersCanInviteCollaboratorsSettingPayload @preview(toggledBy: "gwenpool-preview")
"""
Sets the members can update protected branches setting for a business.
"""
updateBusinessMembersCanUpdateProtectedBranchesSetting(input: UpdateBusinessMembersCanUpdateProtectedBranchesSettingInput!): UpdateBusinessMembersCanUpdateProtectedBranchesSettingPayload @preview(toggledBy: "gwenpool-preview")
"""
Sets whether organization projects are enabled for a business.
"""
updateBusinessOrganizationProjectsSetting(input: UpdateBusinessOrganizationProjectsSettingInput!): UpdateBusinessOrganizationProjectsSettingPayload @preview(toggledBy: "gwenpool-preview")
"""
Updates business's profile
"""
updateBusinessProfile(input: UpdateBusinessProfileInput!): UpdateBusinessProfilePayload @preview(toggledBy: "gwenpool-preview")
"""
Sets whether repository projects are enabled for a business.
"""
updateBusinessRepositoryProjectsSetting(input: UpdateBusinessRepositoryProjectsSettingInput!): UpdateBusinessRepositoryProjectsSettingPayload @preview(toggledBy: "gwenpool-preview")
"""
Sets whether team discussions are enabled for a business.
"""
updateBusinessTeamDiscussionsSetting(input: UpdateBusinessTeamDiscussionsSettingInput!): UpdateBusinessTeamDiscussionsSettingPayload @preview(toggledBy: "gwenpool-preview")
"""
Sets whether two factor authentication is required for all users in a business.
"""
updateBusinessTwoFactorAuthenticationRequiredSetting(input: UpdateBusinessTwoFactorAuthenticationRequiredSettingInput!): UpdateBusinessTwoFactorAuthenticationRequiredSettingPayload @preview(toggledBy: "gwenpool-preview")
"""
Update a check run
"""
updateCheckRun(input: UpdateCheckRunInput!): UpdateCheckRunPayload @preview(toggledBy: "antiope-preview")
"""
Modifies the settings of an existing check suite
"""
updateCheckSuitePreferences(input: UpdateCheckSuitePreferencesInput!): UpdateCheckSuitePreferencesPayload @preview(toggledBy: "antiope-preview")
"""
Updates an Issue.
"""
updateIssue(input: UpdateIssueInput!): UpdateIssuePayload @preview(toggledBy: "starfire-preview")
"""
Updates an IssueComment object.
"""
updateIssueComment(input: UpdateIssueCommentInput!): UpdateIssueCommentPayload @preview(toggledBy: "starfire-preview")
"""
Updates an existing project.
"""
updateProject(input: UpdateProjectInput!): UpdateProjectPayload
"""
Updates an existing project card.
"""
updateProjectCard(input: UpdateProjectCardInput!): UpdateProjectCardPayload
"""
Updates an existing project column.
"""
updateProjectColumn(input: UpdateProjectColumnInput!): UpdateProjectColumnPayload
"""
Update a pull request
"""
updatePullRequest(input: UpdatePullRequestInput!): UpdatePullRequestPayload @preview(toggledBy: "ocelot-preview")
"""
Updates the body of a pull request review.
"""
updatePullRequestReview(input: UpdatePullRequestReviewInput!): UpdatePullRequestReviewPayload
"""
Updates a pull request review comment.
"""
updatePullRequestReviewComment(input: UpdatePullRequestReviewCommentInput!): UpdatePullRequestReviewCommentPayload
"""
Updates the state for subscribable subjects.
"""
updateSubscription(input: UpdateSubscriptionInput!): UpdateSubscriptionPayload
"""
Updates a team discussion.
"""
updateTeamDiscussion(input: UpdateTeamDiscussionInput!): UpdateTeamDiscussionPayload @preview(toggledBy: "echo-preview")
"""
Updates a discussion comment.
"""
updateTeamDiscussionComment(input: UpdateTeamDiscussionCommentInput!): UpdateTeamDiscussionCommentPayload @preview(toggledBy: "echo-preview")
"""
Replaces the repository's topics with the given topics.
"""
updateTopics(input: UpdateTopicsInput!): UpdateTopicsPayload
}
"""
An object with an ID.
"""
interface Node {
"""
ID of the object.
"""
id: ID!
}
"""
Possible directions in which to order a list of items when provided an `orderBy` argument.
"""
enum OrderDirection {
"""
Specifies an ascending order for a given `orderBy` argument.
"""
ASC
"""
Specifies a descending order for a given `orderBy` argument.
"""
DESC
}
"""
An account on GitHub, with one or more owners, that has repositories, members and teams.
"""
type Organization implements Actor & Node & ProjectOwner & RegistryPackageOwner & RegistryPackageSearch & RepositoryOwner & UniformResourceLocatable {
"""
A URL pointing to the organization's public avatar.
"""
avatarUrl(
"""
The size of the resulting square image.
"""
size: Int
): URI!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The organization's public profile description.
"""
description: String
"""
The organization's public email.
"""
email: String
id: ID!
"""
Whether the organization has verified its profile email and website.
"""
isVerified: Boolean!
"""
The organization's public profile location.
"""
location: String
"""
The organization's login name.
"""
login: String!
"""
A list of users who are members of this organization.
"""
members(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection! @deprecated(reason: "The `members` field is deprecated and will be removed soon. Use `Organization.membersWithRole` instead. Removal on 2019-04-01 UTC.")
"""
A list of users who are members of this organization.
"""
membersWithRole(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): OrganizationMemberConnection!
"""
The organization's public profile name.
"""
name: String
"""
The HTTP path creating a new team
"""
newTeamResourcePath: URI!
"""
The HTTP URL creating a new team
"""
newTeamUrl: URI!
"""
The billing email for the organization.
"""
organizationBillingEmail: String
"""
A list of users who have been invited to join this organization.
"""
pendingMembers(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection!
"""
A list of repositories this user has pinned to their profile
"""
pinnedRepositories(
"""
Array of viewer's affiliation options for repositories returned from the
connection. For example, OWNER will include only repositories that the
current viewer owns.
"""
affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
If non-null, filters repositories according to whether they have been locked
"""
isLocked: Boolean
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for repositories returned from the connection
"""
orderBy: RepositoryOrder
"""
Array of owner's affiliation options for repositories returned from the
connection. For example, OWNER will include only repositories that the
organization or user being viewed owns.
"""
ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]
"""
If non-null, filters repositories according to privacy
"""
privacy: RepositoryPrivacy
): RepositoryConnection!
"""
Find project by number.
"""
project(
"""
The project number to find.
"""
number: Int!
): Project
"""
A list of projects under the owner.
"""
projects(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for projects returned from the connection
"""
orderBy: ProjectOrder
"""
Query to search projects by, currently only searching by name.
"""
search: String
"""
A list of states to filter the projects by.
"""
states: [ProjectState!]
): ProjectConnection!
"""
The HTTP path listing organization's projects
"""
projectsResourcePath: URI!
"""
The HTTP URL listing organization's projects
"""
projectsUrl: URI!
"""
A list of repositories that the user owns.
"""
repositories(
"""
Array of viewer's affiliation options for repositories returned from the
connection. For example, OWNER will include only repositories that the
current viewer owns.
"""
affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
If non-null, filters repositories according to whether they are forks of another repository
"""
isFork: Boolean
"""
If non-null, filters repositories according to whether they have been locked
"""
isLocked: Boolean
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for repositories returned from the connection
"""
orderBy: RepositoryOrder
"""
Array of owner's affiliation options for repositories returned from the
connection. For example, OWNER will include only repositories that the
organization or user being viewed owns.
"""
ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]
"""
If non-null, filters repositories according to privacy
"""
privacy: RepositoryPrivacy
): RepositoryConnection!
"""
Find Repository.
"""
repository(
"""
Name of Repository to find.
"""
name: String!
): Repository
"""
When true the organization requires all members, billing managers, and outside
collaborators to enable two-factor authentication.
"""
requiresTwoFactorAuthentication: Boolean
"""
The HTTP path for this organization.
"""
resourcePath: URI!
"""
The Organization's SAML Identity Providers
"""
samlIdentityProvider: OrganizationIdentityProvider
"""
Find an organization's team by its slug.
"""
team(
"""
The name or slug of the team to find.
"""
slug: String!
): Team
"""
A list of teams in this organization.
"""
teams(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
If true, filters teams that are mapped to an LDAP Group (Enterprise only)
"""
ldapMapped: Boolean
"""
Ordering options for teams returned from the connection
"""
orderBy: TeamOrder
"""
If non-null, filters teams according to privacy
"""
privacy: TeamPrivacy
"""
If non-null, filters teams with query on team name and team slug
"""
query: String
"""
If non-null, filters teams according to whether the viewer is an admin or member on team
"""
role: TeamRole
"""
If true, restrict to only root teams
"""
rootTeamsOnly: Boolean = false
"""
User logins to filter by
"""
userLogins: [String!]
): TeamConnection!
"""
The HTTP path listing organization's teams
"""
teamsResourcePath: URI!
"""
The HTTP URL listing organization's teams
"""
teamsUrl: URI!
"""
The HTTP URL for this organization.
"""
url: URI!
"""
Organization is adminable by the viewer.
"""
viewerCanAdminister: Boolean!
"""
Can the current viewer create new projects on this owner.
"""
viewerCanCreateProjects: Boolean!
"""
Viewer can create repositories on this organization
"""
viewerCanCreateRepositories: Boolean!
"""
Viewer can create teams on this organization.
"""
viewerCanCreateTeams: Boolean!
"""
Viewer is an active member of this organization.
"""
viewerIsAMember: Boolean!
"""
The organization's public profile URL.
"""
websiteUrl: URI
}
"""
The connection type for Organization.
"""
type OrganizationConnection {
"""
A list of edges.
"""
edges: [OrganizationEdge]
"""
A list of nodes.
"""
nodes: [Organization]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type OrganizationEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Organization
}
"""
An Identity Provider configured to provision SAML and SCIM identities for Organizations
"""
type OrganizationIdentityProvider implements Node {
"""
The digest algorithm used to sign SAML requests for the Identity Provider.
"""
digestMethod: URI
"""
External Identities provisioned by this Identity Provider
"""
externalIdentities(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): ExternalIdentityConnection!
id: ID!
"""
The x509 certificate used by the Identity Provder to sign assertions and responses.
"""
idpCertificate: X509Certificate
"""
The Issuer Entity ID for the SAML Identity Provider
"""
issuer: String
"""
Organization this Identity Provider belongs to
"""
organization: Organization
"""
The signature algorithm used to sign SAML requests for the Identity Provider.
"""
signatureMethod: URI
"""
The URL endpoint for the Identity Provider's SAML SSO.
"""
ssoUrl: URI
}
"""
An Invitation for a user to an organization.
"""
type OrganizationInvitation implements Node {
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
The email address of the user invited to the organization.
"""
email: String
id: ID!
"""
The type of invitation that was sent (e.g. email, user).
"""
invitationType: OrganizationInvitationType!
"""
The user who was invited to the organization.
"""
invitee: User
"""
The user who created the invitation.
"""
inviter: User!
"""
The organization the invite is for
"""
organization: Organization!
"""
The user's pending role in the organization (e.g. member, owner).
"""
role: OrganizationInvitationRole!
}
"""
The connection type for OrganizationInvitation.
"""
type OrganizationInvitationConnection {
"""
A list of edges.
"""
edges: [OrganizationInvitationEdge]
"""
A list of nodes.
"""
nodes: [OrganizationInvitation]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type OrganizationInvitationEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: OrganizationInvitation
}
"""
The possible organization invitation roles.
"""
enum OrganizationInvitationRole {
"""
The user is invited to be an admin of the organization.
"""
ADMIN
"""
The user is invited to be a billing manager of the organization.
"""
BILLING_MANAGER
"""
The user is invited to be a direct member of the organization.
"""
DIRECT_MEMBER
"""
The user's previous role will be reinstated.
"""
REINSTATE
}
"""
The possible organization invitation types.
"""
enum OrganizationInvitationType {
"""
The invitation was to an email address.
"""
EMAIL
"""
The invitation was to an existing user.
"""
USER
}
"""
The connection type for User.
"""
type OrganizationMemberConnection {
"""
A list of edges.
"""
edges: [OrganizationMemberEdge]
"""
A list of nodes.
"""
nodes: [User]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
Represents a user within an organization.
"""
type OrganizationMemberEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: User
"""
The role this user has in the organization.
"""
role: OrganizationMemberRole
}
"""
The possible roles within an organization for its members.
"""
enum OrganizationMemberRole {
"""
The user is an administrator of the organization.
"""
ADMIN
"""
The user is a member of the organization.
"""
MEMBER
}
"""
Ordering options for organization connections.
"""
input OrganizationOrder @preview(toggledBy: "gwenpool-preview") {
"""
The ordering direction.
"""
direction: OrderDirection!
"""
The field to order organizations by.
"""
field: OrganizationOrderField!
}
"""
Properties by which organization connections can be ordered.
"""
enum OrganizationOrderField @preview(toggledBy: "gwenpool-preview") {
"""
Order organizations by creation time
"""
CREATED_AT
"""
Order organizations by login
"""
LOGIN
}
"""
An organization teams hovercard context
"""
type OrganizationTeamsHovercardContext implements HovercardContext @preview(toggledBy: "hagar-preview") {
"""
A string describing this context
"""
message: String!
"""
An octicon to accompany this context
"""
octicon: String!
"""
Teams in this organization the user is a member of that are relevant
"""
relevantTeams(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): TeamConnection!
"""
The path for the full team list for this user
"""
teamsResourcePath: URI!
"""
The URL for the full team list for this user
"""
teamsUrl: URI!
"""
The total number of teams the user is on in the organization
"""
totalTeamCount: Int!
}
"""
An organization list hovercard context
"""
type OrganizationsHovercardContext implements HovercardContext @preview(toggledBy: "hagar-preview") {
"""
A string describing this context
"""
message: String!
"""
An octicon to accompany this context
"""
octicon: String!
"""
Organizations this user is a member of that are relevant
"""
relevantOrganizations(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): OrganizationConnection!
"""
The total number of organizations this user is in
"""
totalOrganizationCount: Int!
}
"""
Information about pagination in a connection.
"""
type PageInfo {
"""
When paginating forwards, the cursor to continue.
"""
endCursor: String
"""
When paginating forwards, are there more items?
"""
hasNextPage: Boolean!
"""
When paginating backwards, are there more items?
"""
hasPreviousPage: Boolean!
"""
When paginating backwards, the cursor to continue.
"""
startCursor: String
}
"""
Autogenerated input type of PinIssue
"""
input PinIssueInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ID of the issue to be pinned
"""
issueId: ID! @possibleTypes(concreteTypes: ["Issue"])
}
"""
Autogenerated return type of PinIssue
"""
type PinIssuePayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The issue that was pinned
"""
issue: Issue
}
"""
Represents a 'pinned' event on a given issue or pull request.
"""
type PinnedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
Identifies the issue associated with the event.
"""
issue: Issue!
}
"""
A Pinned Issue is a issue pinned to a repository's index page.
"""
type PinnedIssue implements Node @preview(toggledBy: "elektra-preview") {
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
"""
The issue that was pinned.
"""
issue: Issue!
"""
The actor that pinned this issue.
"""
pinnedBy: Actor!
"""
The repository that this issue was pinned to.
"""
repository: Repository!
}
"""
The connection type for PinnedIssue.
"""
type PinnedIssueConnection @preview(toggledBy: "elektra-preview") {
"""
A list of edges.
"""
edges: [PinnedIssueEdge]
"""
A list of nodes.
"""
nodes: [PinnedIssue]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type PinnedIssueEdge @preview(toggledBy: "elektra-preview") {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: PinnedIssue
}
"""
Projects manage issues, pull requests and notes within a project owner.
"""
type Project implements Closable & Node & Updatable {
"""
The project's description body.
"""
body: String
"""
The projects description body rendered to HTML.
"""
bodyHTML: HTML!
"""
`true` if the object is closed (definition of closed may depend on type)
"""
closed: Boolean!
"""
Identifies the date and time when the object was closed.
"""
closedAt: DateTime
"""
List of columns in the project
"""
columns(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): ProjectColumnConnection!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
The actor who originally created the project.
"""
creator: Actor
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
"""
The project's name.
"""
name: String!
"""
The project's number.
"""
number: Int!
"""
The project's owner. Currently limited to repositories and organizations.
"""
owner: ProjectOwner!
"""
List of pending cards in this project
"""
pendingCards(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
A list of archived states to filter the cards by
"""
archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED]
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): ProjectCardConnection!
"""
The HTTP path for this project
"""
resourcePath: URI!
"""
Whether the project is open or closed.
"""
state: ProjectState!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL for this project
"""
url: URI!
"""
Check if the current viewer can update this object.
"""
viewerCanUpdate: Boolean!
}
"""
A card in a project.
"""
type ProjectCard implements Node {
"""
The project column this card is associated under. A card may only belong to one
project column at a time. The column field will be null if the card is created
in a pending state and has yet to be associated with a column. Once cards are
associated with a column, they will not become pending in the future.
"""
column: ProjectColumn
"""
The card content item
"""
content: ProjectCardItem
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
The actor who created this card
"""
creator: Actor
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
"""
Whether the card is archived
"""
isArchived: Boolean!
"""
The card note
"""
note: String
"""
The project that contains this card.
"""
project: Project!
"""
The HTTP path for this card
"""
resourcePath: URI!
"""
The state of ProjectCard
"""
state: ProjectCardState
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL for this card
"""
url: URI!
}
"""
The possible archived states of a project card.
"""
enum ProjectCardArchivedState {
"""
A project card that is archived
"""
ARCHIVED
"""
A project card that is not archived
"""
NOT_ARCHIVED
}
"""
The connection type for ProjectCard.
"""
type ProjectCardConnection {
"""
A list of edges.
"""
edges: [ProjectCardEdge]
"""
A list of nodes.
"""
nodes: [ProjectCard]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type ProjectCardEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: ProjectCard
}
"""
Types that can be inside Project Cards.
"""
union ProjectCardItem = Issue | PullRequest
"""
Various content states of a ProjectCard
"""
enum ProjectCardState {
"""
The card has content only.
"""
CONTENT_ONLY
"""
The card has a note only.
"""
NOTE_ONLY
"""
The card is redacted.
"""
REDACTED
}
"""
A column inside a project.
"""
type ProjectColumn implements Node {
"""
List of cards in the column
"""
cards(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
A list of archived states to filter the cards by
"""
archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED]
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): ProjectCardConnection!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
"""
The project column's name.
"""
name: String!
"""
The project that contains this column.
"""
project: Project!
"""
The semantic purpose of the column
"""
purpose: ProjectColumnPurpose
"""
The HTTP path for this project column
"""
resourcePath: URI!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL for this project column
"""
url: URI!
}
"""
The connection type for ProjectColumn.
"""
type ProjectColumnConnection {
"""
A list of edges.
"""
edges: [ProjectColumnEdge]
"""
A list of nodes.
"""
nodes: [ProjectColumn]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type ProjectColumnEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: ProjectColumn
}
"""
The semantic purpose of the column - todo, in progress, or done.
"""
enum ProjectColumnPurpose {
"""
The column contains cards which are complete
"""
DONE
"""
The column contains cards which are currently being worked on
"""
IN_PROGRESS
"""
The column contains cards still to be worked on
"""
TODO
}
"""
A list of projects associated with the owner.
"""
type ProjectConnection {
"""
A list of edges.
"""
edges: [ProjectEdge]
"""
A list of nodes.
"""
nodes: [Project]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type ProjectEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Project
}
"""
Ways in which lists of projects can be ordered upon return.
"""
input ProjectOrder {
"""
The direction in which to order projects by the specified field.
"""
direction: OrderDirection!
"""
The field in which to order projects by.
"""
field: ProjectOrderField!
}
"""
Properties by which project connections can be ordered.
"""
enum ProjectOrderField {
"""
Order projects by creation time
"""
CREATED_AT
"""
Order projects by name
"""
NAME
"""
Order projects by update time
"""
UPDATED_AT
}
"""
Represents an owner of a Project.
"""
interface ProjectOwner {
id: ID!
"""
Find project by number.
"""
project(
"""
The project number to find.
"""
number: Int!
): Project
"""
A list of projects under the owner.
"""
projects(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for projects returned from the connection
"""
orderBy: ProjectOrder
"""
Query to search projects by, currently only searching by name.
"""
search: String
"""
A list of states to filter the projects by.
"""
states: [ProjectState!]
): ProjectConnection!
"""
The HTTP path listing owners projects
"""
projectsResourcePath: URI!
"""
The HTTP URL listing owners projects
"""
projectsUrl: URI!
"""
Can the current viewer create new projects on this owner.
"""
viewerCanCreateProjects: Boolean!
}
"""
State of the project; either 'open' or 'closed'
"""
enum ProjectState {
"""
The project is closed.
"""
CLOSED
"""
The project is open.
"""
OPEN
}
"""
A repository protected branch.
"""
type ProtectedBranch implements Node {
"""
The actor who created this protected branch.
"""
creator: Actor
"""
Will new commits pushed to this branch dismiss pull request review approvals.
"""
hasDismissableStaleReviews: Boolean!
"""
Are reviews required to update this branch.
"""
hasRequiredReviews: Boolean!
"""
Are commits required to be signed.
"""
hasRequiredSignatures: Boolean! @preview(toggledBy: "zzzax-preview")
"""
Are status checks required to update this branch.
"""
hasRequiredStatusChecks: Boolean!
"""
Is pushing to this branch restricted.
"""
hasRestrictedPushes: Boolean!
"""
Is dismissal of pull request reviews restricted.
"""
hasRestrictedReviewDismissals: Boolean!
"""
Are branches required to be up to date before merging.
"""
hasStrictRequiredStatusChecks: Boolean!
id: ID!
"""
Can admins overwrite branch protection.
"""
isAdminEnforced: Boolean!
"""
The name of the protected branch rule.
"""
name: String!
"""
A list push allowances for this protected branch.
"""
pushAllowances(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): PushAllowanceConnection!
"""
The repository associated with this protected branch.
"""
repository: Repository!
"""
Number of approving reviews required to update this branch.
"""
requiredApprovingReviewCount: Int @preview(toggledBy: "luke-cage-preview")
"""
List of required status check contexts that must pass for commits to be accepted to this branch.
"""
requiredStatusCheckContexts: [String]
"""
A list review dismissal allowances for this protected branch.
"""
reviewDismissalAllowances(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): ReviewDismissalAllowanceConnection!
}
"""
The connection type for ProtectedBranch.
"""
type ProtectedBranchConnection {
"""
A list of edges.
"""
edges: [ProtectedBranchEdge]
"""
A list of nodes.
"""
nodes: [ProtectedBranch]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type ProtectedBranchEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: ProtectedBranch
}
"""
A user's public key.
"""
type PublicKey implements Node {
id: ID!
"""
The public key string
"""
key: String!
}
"""
The connection type for PublicKey.
"""
type PublicKeyConnection {
"""
A list of edges.
"""
edges: [PublicKeyEdge]
"""
A list of nodes.
"""
nodes: [PublicKey]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type PublicKeyEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: PublicKey
}
"""
A repository pull request.
"""
type PullRequest implements Assignable & Closable & Comment & Labelable & Lockable & Node & Reactable & RepositoryNode & Subscribable & UniformResourceLocatable & Updatable & UpdatableComment {
"""
Reason that the conversation was locked.
"""
activeLockReason: LockReason
"""
The number of additions in this pull request.
"""
additions: Int!
"""
A list of Users assigned to this object.
"""
assignees(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection!
"""
The actor who authored the comment.
"""
author: Actor
"""
Author's association with the subject of the comment.
"""
authorAssociation: CommentAuthorAssociation!
"""
Identifies the base Ref associated with the pull request.
"""
baseRef: Ref
"""
Identifies the name of the base Ref associated with the pull request, even if the ref has been deleted.
"""
baseRefName: String!
"""
Identifies the oid of the base ref associated with the pull request, even if the ref has been deleted.
"""
baseRefOid: GitObjectID!
"""
The body as Markdown.
"""
body: String!
"""
The body rendered to HTML.
"""
bodyHTML: HTML!
"""
The body rendered to text.
"""
bodyText: String!
"""
Whether or not the pull request is rebaseable.
"""
canBeRebased: Boolean! @preview(toggledBy: "merge-info-preview")
"""
The number of changed files in this pull request.
"""
changedFiles: Int!
"""
`true` if the pull request is closed
"""
closed: Boolean!
"""
Identifies the date and time when the object was closed.
"""
closedAt: DateTime
"""
A list of comments associated with the pull request.
"""
comments(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): IssueCommentConnection!
"""
A list of commits present in this pull request's head branch not present in the base branch.
"""
commits(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): PullRequestCommitConnection!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Check if this comment was created via an email reply.
"""
createdViaEmail: Boolean!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The number of deletions in this pull request.
"""
deletions: Int!
"""
The actor who edited this pull request's body.
"""
editor: Actor
"""
Lists the files changed within this pull request.
"""
files(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): PullRequestChangedFileConnection @preview(toggledBy: "ocelot-preview")
"""
Identifies the head Ref associated with the pull request.
"""
headRef: Ref
"""
Identifies the name of the head Ref associated with the pull request, even if the ref has been deleted.
"""
headRefName: String!
"""
Identifies the oid of the head ref associated with the pull request, even if the ref has been deleted.
"""
headRefOid: GitObjectID!
"""
The repository associated with this pull request's head Ref.
"""
headRepository: Repository
"""
The owner of the repository associated with this pull request's head Ref.
"""
headRepositoryOwner: RepositoryOwner
"""
The hovercard information for this issue
"""
hovercard(
"""
Whether or not to include notification contexts
"""
includeNotificationContexts: Boolean = true
): Hovercard! @preview(toggledBy: "hagar-preview")
id: ID!
"""
Check if this comment was edited and includes an edit with the creation data
"""
includesCreatedEdit: Boolean!
"""
The head and base repositories are different.
"""
isCrossRepository: Boolean!
"""
A list of labels associated with the object.
"""
labels(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): LabelConnection
"""
The moment the editor made the last edit
"""
lastEditedAt: DateTime
"""
`true` if the pull request is locked
"""
locked: Boolean!
"""
Indicates whether maintainers can modify the pull request.
"""
maintainerCanModify: Boolean!
"""
The commit that was created when this pull request was merged.
"""
mergeCommit: Commit
"""
Detailed information about the current pull request merge state status.
"""
mergeStateStatus: MergeStateStatus! @preview(toggledBy: "merge-info-preview")
"""
Whether or not the pull request can be merged based on the existence of merge conflicts.
"""
mergeable: MergeableState!
"""
Whether or not the pull request was merged.
"""
merged: Boolean!
"""
The date and time that the pull request was merged.
"""
mergedAt: DateTime
"""
The actor who merged the pull request.
"""
mergedBy: Actor
"""
Identifies the milestone associated with the pull request.
"""
milestone: Milestone
"""
Identifies the pull request number.
"""
number: Int!
"""
A list of Users that are participating in the Pull Request conversation.
"""
participants(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection!
"""
The permalink to the pull request.
"""
permalink: URI!
"""
The commit that GitHub automatically generated to test if this pull request
could be merged. This field will not return a value if the pull request is
merged, or if the test merge commit is still being generated. See the
`mergeable` field for more details on the mergeability of the pull request.
"""
potentialMergeCommit: Commit
"""
List of project cards associated with this pull request.
"""
projectCards(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
A list of archived states to filter the cards by
"""
archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED]
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): ProjectCardConnection!
"""
Identifies when the comment was published at.
"""
publishedAt: DateTime
"""
A list of reactions grouped by content left on the subject.
"""
reactionGroups: [ReactionGroup!]
"""
A list of Reactions left on the Issue.
"""
reactions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Allows filtering Reactions by emoji.
"""
content: ReactionContent
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Allows specifying the order in which reactions are returned.
"""
orderBy: ReactionOrder
): ReactionConnection!
"""
The repository associated with this node.
"""
repository: Repository!
"""
The HTTP path for this pull request.
"""
resourcePath: URI!
"""
The HTTP path for reverting this pull request.
"""
revertResourcePath: URI!
"""
The HTTP URL for reverting this pull request.
"""
revertUrl: URI!
"""
A list of review requests associated with the pull request.
"""
reviewRequests(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): ReviewRequestConnection
"""
The list of all review threads for this pull request.
"""
reviewThreads(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): PullRequestReviewThreadConnection! @preview(toggledBy: "ocelot-preview")
"""
A list of reviews associated with the pull request.
"""
reviews(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Filter by author of the review.
"""
author: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
A list of states to filter the reviews.
"""
states: [PullRequestReviewState!]
): PullRequestReviewConnection
"""
Identifies the state of the pull request.
"""
state: PullRequestState!
"""
A list of reviewer suggestions based on commit history and past review comments.
"""
suggestedReviewers: [SuggestedReviewer]!
"""
A list of events, comments, commits, etc. associated with the pull request.
"""
timeline(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Allows filtering timeline events by a `since` timestamp.
"""
since: DateTime
): PullRequestTimelineConnection!
"""
A list of events, comments, commits, etc. associated with the pull request.
"""
timelineItems(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Filter timeline items by type.
"""
itemTypes: [PullRequestTimelineItemsItemType!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Filter timeline items by a `since` timestamp.
"""
since: DateTime
"""
Skips the first _n_ elements in the list.
"""
skip: Int
): PullRequestTimelineItemsConnection! @preview(toggledBy: "starfire-preview")
"""
Identifies the pull request title.
"""
title: String!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL for this pull request.
"""
url: URI!
"""
A list of edits to this content.
"""
userContentEdits(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserContentEditConnection
"""
Whether or not the viewer can apply suggestion.
"""
viewerCanApplySuggestion: Boolean!
"""
Can user react to this subject
"""
viewerCanReact: Boolean!
"""
Check if the viewer is able to change their subscription status for the repository.
"""
viewerCanSubscribe: Boolean!
"""
Check if the current viewer can update this object.
"""
viewerCanUpdate: Boolean!
"""
Reasons why the current viewer can not update this comment.
"""
viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!
"""
Did the viewer author this comment.
"""
viewerDidAuthor: Boolean!
"""
Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.
"""
viewerSubscription: SubscriptionState
}
"""
A file changed in a pull request.
"""
type PullRequestChangedFile @preview(toggledBy: "ocelot-preview") {
"""
The number of additions to the file.
"""
additions: Int!
"""
The number of deletions to the file.
"""
deletions: Int!
"""
The path of the file.
"""
path: String!
}
"""
The connection type for PullRequestChangedFile.
"""
type PullRequestChangedFileConnection @preview(toggledBy: "ocelot-preview") {
"""
A list of edges.
"""
edges: [PullRequestChangedFileEdge]
"""
A list of nodes.
"""
nodes: [PullRequestChangedFile]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type PullRequestChangedFileEdge @preview(toggledBy: "ocelot-preview") {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: PullRequestChangedFile
}
"""
Represents a Git commit part of a pull request.
"""
type PullRequestCommit implements Node & UniformResourceLocatable {
"""
The Git commit object
"""
commit: Commit!
id: ID!
"""
The pull request this commit belongs to
"""
pullRequest: PullRequest!
"""
The HTTP path for this pull request commit
"""
resourcePath: URI!
"""
The HTTP URL for this pull request commit
"""
url: URI!
}
"""
Represents a commit comment thread part of a pull request.
"""
type PullRequestCommitCommentThread implements Node & RepositoryNode @preview(toggledBy: "starfire-preview") {
"""
The comments that exist in this thread.
"""
comments(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): CommitCommentConnection!
"""
The commit the comments were made on.
"""
commit: Commit!
id: ID!
"""
The file the comments were made on.
"""
path: String
"""
The position in the diff for the commit that the comment was made on.
"""
position: Int
"""
The pull request this commit comment thread belongs to
"""
pullRequest: PullRequest!
"""
The repository associated with this node.
"""
repository: Repository!
}
"""
The connection type for PullRequestCommit.
"""
type PullRequestCommitConnection {
"""
A list of edges.
"""
edges: [PullRequestCommitEdge]
"""
A list of nodes.
"""
nodes: [PullRequestCommit]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type PullRequestCommitEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: PullRequestCommit
}
"""
The connection type for PullRequest.
"""
type PullRequestConnection {
"""
A list of edges.
"""
edges: [PullRequestEdge]
"""
A list of nodes.
"""
nodes: [PullRequest]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type PullRequestEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: PullRequest
}
"""
Properties by which pull_requests connections can be ordered.
"""
enum PullRequestOrderField {
"""
Order pull_requests by creation time
"""
CREATED_AT
"""
Order pull_requests by update time
"""
UPDATED_AT
}
"""
A review object for a given pull request.
"""
type PullRequestReview implements Comment & Deletable & Node & Reactable & RepositoryNode & Updatable & UpdatableComment {
"""
The actor who authored the comment.
"""
author: Actor
"""
Author's association with the subject of the comment.
"""
authorAssociation: CommentAuthorAssociation!
"""
Identifies the pull request review body.
"""
body: String!
"""
The body of this review rendered to HTML.
"""
bodyHTML: HTML!
"""
The body of this review rendered as plain text.
"""
bodyText: String!
"""
A list of review comments for the current pull request review.
"""
comments(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): PullRequestReviewCommentConnection!
"""
Identifies the commit associated with this pull request review.
"""
commit: Commit
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Check if this comment was created via an email reply.
"""
createdViaEmail: Boolean!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The actor who edited the comment.
"""
editor: Actor
id: ID!
"""
Check if this comment was edited and includes an edit with the creation data
"""
includesCreatedEdit: Boolean!
"""
The moment the editor made the last edit
"""
lastEditedAt: DateTime
"""
A list of teams that this review was made on behalf of.
"""
onBehalfOf(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): TeamConnection!
"""
Identifies when the comment was published at.
"""
publishedAt: DateTime
"""
Identifies the pull request associated with this pull request review.
"""
pullRequest: PullRequest!
"""
A list of reactions grouped by content left on the subject.
"""
reactionGroups: [ReactionGroup!]
"""
A list of Reactions left on the Issue.
"""
reactions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Allows filtering Reactions by emoji.
"""
content: ReactionContent
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Allows specifying the order in which reactions are returned.
"""
orderBy: ReactionOrder
): ReactionConnection!
"""
The repository associated with this node.
"""
repository: Repository!
"""
The HTTP path permalink for this PullRequestReview.
"""
resourcePath: URI!
"""
Identifies the current state of the pull request review.
"""
state: PullRequestReviewState!
"""
Identifies when the Pull Request Review was submitted
"""
submittedAt: DateTime
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL permalink for this PullRequestReview.
"""
url: URI!
"""
A list of edits to this content.
"""
userContentEdits(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserContentEditConnection
"""
Check if the current viewer can delete this object.
"""
viewerCanDelete: Boolean!
"""
Can user react to this subject
"""
viewerCanReact: Boolean!
"""
Check if the current viewer can update this object.
"""
viewerCanUpdate: Boolean!
"""
Reasons why the current viewer can not update this comment.
"""
viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!
"""
Did the viewer author this comment.
"""
viewerDidAuthor: Boolean!
}
"""
A review comment associated with a given repository pull request.
"""
type PullRequestReviewComment implements Comment & Deletable & Minimizable & Node & Reactable & RepositoryNode & Updatable & UpdatableComment {
"""
The actor who authored the comment.
"""
author: Actor
"""
Author's association with the subject of the comment.
"""
authorAssociation: CommentAuthorAssociation!
"""
The comment body of this review comment.
"""
body: String!
"""
The comment body of this review comment rendered to HTML.
"""
bodyHTML: HTML!
"""
The comment body of this review comment rendered as plain text.
"""
bodyText: String!
"""
Identifies the commit associated with the comment.
"""
commit: Commit!
"""
Identifies when the comment was created.
"""
createdAt: DateTime!
"""
Check if this comment was created via an email reply.
"""
createdViaEmail: Boolean!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The diff hunk to which the comment applies.
"""
diffHunk: String!
"""
Identifies when the comment was created in a draft state.
"""
draftedAt: DateTime!
"""
The actor who edited the comment.
"""
editor: Actor
id: ID!
"""
Check if this comment was edited and includes an edit with the creation data
"""
includesCreatedEdit: Boolean!
"""
Returns whether or not a comment has been minimized.
"""
isMinimized: Boolean!
"""
The moment the editor made the last edit
"""
lastEditedAt: DateTime
"""
Returns why the comment was minimized.
"""
minimizedReason: String
"""
Identifies the original commit associated with the comment.
"""
originalCommit: Commit
"""
The original line index in the diff to which the comment applies.
"""
originalPosition: Int!
"""
Identifies when the comment body is outdated
"""
outdated: Boolean!
"""
The path to which the comment applies.
"""
path: String!
"""
The line index in the diff to which the comment applies.
"""
position: Int
"""
Identifies when the comment was published at.
"""
publishedAt: DateTime
"""
The pull request associated with this review comment.
"""
pullRequest: PullRequest!
"""
The pull request review associated with this review comment.
"""
pullRequestReview: PullRequestReview
"""
A list of reactions grouped by content left on the subject.
"""
reactionGroups: [ReactionGroup!]
"""
A list of Reactions left on the Issue.
"""
reactions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Allows filtering Reactions by emoji.
"""
content: ReactionContent
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Allows specifying the order in which reactions are returned.
"""
orderBy: ReactionOrder
): ReactionConnection!
"""
The comment this is a reply to.
"""
replyTo: PullRequestReviewComment
"""
The repository associated with this node.
"""
repository: Repository!
"""
The HTTP path permalink for this review comment.
"""
resourcePath: URI!
"""
Identifies the state of the comment.
"""
state: PullRequestReviewCommentState!
"""
Identifies when the comment was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL permalink for this review comment.
"""
url: URI!
"""
A list of edits to this content.
"""
userContentEdits(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserContentEditConnection
"""
Check if the current viewer can delete this object.
"""
viewerCanDelete: Boolean!
"""
Check if the current viewer can minimize this object.
"""
viewerCanMinimize: Boolean!
"""
Can user react to this subject
"""
viewerCanReact: Boolean!
"""
Check if the current viewer can update this object.
"""
viewerCanUpdate: Boolean!
"""
Reasons why the current viewer can not update this comment.
"""
viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!
"""
Did the viewer author this comment.
"""
viewerDidAuthor: Boolean!
}
"""
The connection type for PullRequestReviewComment.
"""
type PullRequestReviewCommentConnection {
"""
A list of edges.
"""
edges: [PullRequestReviewCommentEdge]
"""
A list of nodes.
"""
nodes: [PullRequestReviewComment]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type PullRequestReviewCommentEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: PullRequestReviewComment
}
"""
The possible states of a pull request review comment.
"""
enum PullRequestReviewCommentState {
"""
A comment that is part of a pending review
"""
PENDING
"""
A comment that is part of a submitted review
"""
SUBMITTED
}
"""
The connection type for PullRequestReview.
"""
type PullRequestReviewConnection {
"""
A list of edges.
"""
edges: [PullRequestReviewEdge]
"""
A list of nodes.
"""
nodes: [PullRequestReview]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type PullRequestReviewEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: PullRequestReview
}
"""
The possible events to perform on a pull request review.
"""
enum PullRequestReviewEvent {
"""
Submit feedback and approve merging these changes.
"""
APPROVE
"""
Submit general feedback without explicit approval.
"""
COMMENT
"""
Dismiss review so it now longer effects merging.
"""
DISMISS
"""
Submit feedback that must be addressed before merging.
"""
REQUEST_CHANGES
}
"""
The possible states of a pull request review.
"""
enum PullRequestReviewState {
"""
A review allowing the pull request to merge.
"""
APPROVED
"""
A review blocking the pull request from merging.
"""
CHANGES_REQUESTED
"""
An informational review.
"""
COMMENTED
"""
A review that has been dismissed.
"""
DISMISSED
"""
A review that has not yet been submitted.
"""
PENDING
}
"""
A threaded list of comments for a given pull request.
"""
type PullRequestReviewThread implements Node {
"""
A list of pull request comments associated with the thread.
"""
comments(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): PullRequestReviewCommentConnection!
id: ID!
"""
Whether this thread has been resolved
"""
isResolved: Boolean! @preview(toggledBy: "cateye-preview")
"""
Identifies the pull request associated with this thread.
"""
pullRequest: PullRequest!
"""
Identifies the repository associated with this thread.
"""
repository: Repository!
"""
The user who resolved this thread
"""
resolvedBy: User @preview(toggledBy: "cateye-preview")
"""
Whether or not the viewer can resolve this thread
"""
viewerCanResolve: Boolean! @preview(toggledBy: "cateye-preview")
"""
Whether or not the viewer can unresolve this thread
"""
viewerCanUnresolve: Boolean! @preview(toggledBy: "cateye-preview")
}
"""
Review comment threads for a pull request review.
"""
type PullRequestReviewThreadConnection {
"""
A list of edges.
"""
edges: [PullRequestReviewThreadEdge]
"""
A list of nodes.
"""
nodes: [PullRequestReviewThread]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type PullRequestReviewThreadEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: PullRequestReviewThread
}
"""
Represents the latest point in the pull request timeline for which the viewer has seen the pull request's commits.
"""
type PullRequestRevisionMarker @preview(toggledBy: "starfire-preview") {
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
The last commit the viewer has seen.
"""
lastSeenCommit: Commit!
"""
The pull request to which the marker belongs.
"""
pullRequest: PullRequest!
}
"""
The possible states of a pull request.
"""
enum PullRequestState {
"""
A pull request that has been closed without being merged.
"""
CLOSED
"""
A pull request that has been closed by being merged.
"""
MERGED
"""
A pull request that is still open.
"""
OPEN
}
"""
The connection type for PullRequestTimelineItem.
"""
type PullRequestTimelineConnection {
"""
A list of edges.
"""
edges: [PullRequestTimelineItemEdge]
"""
A list of nodes.
"""
nodes: [PullRequestTimelineItem]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An item in an pull request timeline
"""
union PullRequestTimelineItem = AssignedEvent | BaseRefForcePushedEvent | ClosedEvent | Commit | CommitCommentThread | CrossReferencedEvent | DemilestonedEvent | DeployedEvent | DeploymentEnvironmentChangedEvent | HeadRefDeletedEvent | HeadRefForcePushedEvent | HeadRefRestoredEvent | IssueComment | LabeledEvent | LockedEvent | MergedEvent | MilestonedEvent | PullRequestReview | PullRequestReviewComment | PullRequestReviewThread | ReferencedEvent | RenamedTitleEvent | ReopenedEvent | ReviewDismissedEvent | ReviewRequestRemovedEvent | ReviewRequestedEvent | SubscribedEvent | UnassignedEvent | UnlabeledEvent | UnlockedEvent | UnsubscribedEvent
"""
An edge in a connection.
"""
type PullRequestTimelineItemEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: PullRequestTimelineItem
}
"""
An item in a pull request timeline
"""
union PullRequestTimelineItems = AddedToProjectEvent | AssignedEvent | BaseRefChangedEvent | BaseRefForcePushedEvent | ClosedEvent | CommentDeletedEvent | ConvertedNoteToIssueEvent | CrossReferencedEvent | DemilestonedEvent | DeployedEvent | DeploymentEnvironmentChangedEvent | HeadRefDeletedEvent | HeadRefForcePushedEvent | HeadRefRestoredEvent | IssueComment | LabeledEvent | LockedEvent | MentionedEvent | MergedEvent | MilestonedEvent | MovedColumnsInProjectEvent | PinnedEvent | PullRequestCommit | PullRequestCommitCommentThread | PullRequestReview | PullRequestReviewThread | PullRequestRevisionMarker | ReferencedEvent | RemovedFromProjectEvent | RenamedTitleEvent | ReopenedEvent | ReviewDismissedEvent | ReviewRequestRemovedEvent | ReviewRequestedEvent | SubscribedEvent | TransferredEvent | UnassignedEvent | UnlabeledEvent | UnlockedEvent | UnpinnedEvent | UnsubscribedEvent
"""
The connection type for PullRequestTimelineItems.
"""
type PullRequestTimelineItemsConnection {
"""
A list of edges.
"""
edges: [PullRequestTimelineItemsEdge]
"""
Identifies the count of items after applying `before` and `after` filters.
"""
filteredCount: Int!
"""
A list of nodes.
"""
nodes: [PullRequestTimelineItems]
"""
Identifies the count of items after applying `before`/`after` filters and `first`/`last`/`skip` slicing.
"""
pageCount: Int!
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
"""
Identifies the date and time when the timeline was last updated.
"""
updatedAt: DateTime!
}
"""
An edge in a connection.
"""
type PullRequestTimelineItemsEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: PullRequestTimelineItems
}
"""
The possible item types found in a timeline.
"""
enum PullRequestTimelineItemsItemType {
"""
Represents a 'added_to_project' event on a given issue or pull request.
"""
ADDED_TO_PROJECT_EVENT
"""
Represents an 'assigned' event on any assignable object.
"""
ASSIGNED_EVENT
"""
Represents a 'base_ref_changed' event on a given issue or pull request.
"""
BASE_REF_CHANGED_EVENT
"""
Represents a 'base_ref_force_pushed' event on a given pull request.
"""
BASE_REF_FORCE_PUSHED_EVENT
"""
Represents a 'closed' event on any `Closable`.
"""
CLOSED_EVENT
"""
Represents a 'comment_deleted' event on a given issue or pull request.
"""
COMMENT_DELETED_EVENT
"""
Represents a 'converted_note_to_issue' event on a given issue or pull request.
"""
CONVERTED_NOTE_TO_ISSUE_EVENT
"""
Represents a mention made by one issue or pull request to another.
"""
CROSS_REFERENCED_EVENT
"""
Represents a 'demilestoned' event on a given issue or pull request.
"""
DEMILESTONED_EVENT
"""
Represents a 'deployed' event on a given pull request.
"""
DEPLOYED_EVENT
"""
Represents a 'deployment_environment_changed' event on a given pull request.
"""
DEPLOYMENT_ENVIRONMENT_CHANGED_EVENT
"""
Represents a 'head_ref_deleted' event on a given pull request.
"""
HEAD_REF_DELETED_EVENT
"""
Represents a 'head_ref_force_pushed' event on a given pull request.
"""
HEAD_REF_FORCE_PUSHED_EVENT
"""
Represents a 'head_ref_restored' event on a given pull request.
"""
HEAD_REF_RESTORED_EVENT
"""
Represents a comment on an Issue.
"""
ISSUE_COMMENT
"""
Represents a 'labeled' event on a given issue or pull request.
"""
LABELED_EVENT
"""
Represents a 'locked' event on a given issue or pull request.
"""
LOCKED_EVENT
"""
Represents a 'mentioned' event on a given issue or pull request.
"""
MENTIONED_EVENT
"""
Represents a 'merged' event on a given pull request.
"""
MERGED_EVENT
"""
Represents a 'milestoned' event on a given issue or pull request.
"""
MILESTONED_EVENT
"""
Represents a 'moved_columns_in_project' event on a given issue or pull request.
"""
MOVED_COLUMNS_IN_PROJECT_EVENT
"""
Represents a 'pinned' event on a given issue or pull request.
"""
PINNED_EVENT
"""
Represents a Git commit part of a pull request.
"""
PULL_REQUEST_COMMIT
"""
Represents a commit comment thread part of a pull request.
"""
PULL_REQUEST_COMMIT_COMMENT_THREAD
"""
A review object for a given pull request.
"""
PULL_REQUEST_REVIEW
"""
A threaded list of comments for a given pull request.
"""
PULL_REQUEST_REVIEW_THREAD
"""
Represents the latest point in the pull request timeline for which the viewer has seen the pull request's commits.
"""
PULL_REQUEST_REVISION_MARKER
"""
Represents a 'referenced' event on a given `ReferencedSubject`.
"""
REFERENCED_EVENT
"""
Represents a 'removed_from_project' event on a given issue or pull request.
"""
REMOVED_FROM_PROJECT_EVENT
"""
Represents a 'renamed' event on a given issue or pull request
"""
RENAMED_TITLE_EVENT
"""
Represents a 'reopened' event on any `Closable`.
"""
REOPENED_EVENT
"""
Represents a 'review_dismissed' event on a given issue or pull request.
"""
REVIEW_DISMISSED_EVENT
"""
Represents an 'review_requested' event on a given pull request.
"""
REVIEW_REQUESTED_EVENT
"""
Represents an 'review_request_removed' event on a given pull request.
"""
REVIEW_REQUEST_REMOVED_EVENT
"""
Represents a 'subscribed' event on a given `Subscribable`.
"""
SUBSCRIBED_EVENT
"""
Represents a 'transferred' event on a given issue or pull request.
"""
TRANSFERRED_EVENT
"""
Represents an 'unassigned' event on any assignable object.
"""
UNASSIGNED_EVENT
"""
Represents an 'unlabeled' event on a given issue or pull request.
"""
UNLABELED_EVENT
"""
Represents an 'unlocked' event on a given issue or pull request.
"""
UNLOCKED_EVENT
"""
Represents an 'unpinned' event on a given issue or pull request.
"""
UNPINNED_EVENT
"""
Represents an 'unsubscribed' event on a given `Subscribable`.
"""
UNSUBSCRIBED_EVENT
}
"""
A Git push.
"""
type Push implements Node @preview(toggledBy: "antiope-preview") {
id: ID!
"""
The SHA after the push
"""
nextSha: GitObjectID
"""
The permalink for this push.
"""
permalink: URI!
"""
The SHA before the push
"""
previousSha: GitObjectID
"""
The user who pushed
"""
pusher: User!
"""
The repository that was pushed to
"""
repository: Repository!
}
"""
A team or user who has the ability to push to a protected branch.
"""
type PushAllowance implements Node {
"""
The actor that can push.
"""
actor: PushAllowanceActor
"""
Identifies the branch protection rule associated with the allowed user or team.
"""
branchProtectionRule: BranchProtectionRule
id: ID!
}
"""
Types that can be an actor.
"""
union PushAllowanceActor = Team | User
"""
The connection type for PushAllowance.
"""
type PushAllowanceConnection {
"""
A list of edges.
"""
edges: [PushAllowanceEdge]
"""
A list of nodes.
"""
nodes: [PushAllowance]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type PushAllowanceEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: PushAllowance
}
"""
The query root of GitHub's GraphQL interface.
"""
type Query {
"""
Look up a business by URL slug.
"""
business(
"""
The business invitation token
"""
invitationToken: String
"""
The business URL slug.
"""
slug: String!
): Business @preview(toggledBy: "gwenpool-preview")
"""
Look up a pending business member invitation by invitee, business and role.
"""
businessMemberInvitation(
"""
The slug of the business the user was invited to join
"""
businessSlug: String!
"""
The role for the business member invitation.
"""
role: BusinessMemberInvitationRole!
"""
The login of the user invited to join the business
"""
userLogin: String!
): BusinessMemberInvitation @preview(toggledBy: "gwenpool-preview")
"""
Look up a pending business member invitation by invitation token
"""
businessMemberInvitationByToken(
"""
The invitation token sent with the invitation email.
"""
invitationToken: String!
): BusinessMemberInvitation @preview(toggledBy: "gwenpool-preview")
"""
Look up a code of conduct by its key
"""
codeOfConduct(
"""
The code of conduct's key
"""
key: String!
): CodeOfConduct
"""
Look up a code of conduct by its key
"""
codesOfConduct: [CodeOfConduct]
"""
Look up an open source license by its key
"""
license(
"""
The license's downcased SPDX ID
"""
key: String!
): License
"""
Return a list of known open source licenses
"""
licenses: [License]!
"""
Get alphabetically sorted list of Marketplace categories
"""
marketplaceCategories(
"""
Exclude categories with no listings.
"""
excludeEmpty: Boolean
"""
Returns top level categories only, excluding any subcategories.
"""
excludeSubcategories: Boolean
"""
Return only the specified categories.
"""
includeCategories: [String!]
): [MarketplaceCategory!]!
"""
Look up a Marketplace category by its slug.
"""
marketplaceCategory(
"""
The URL slug of the category.
"""
slug: String!
"""
Also check topic aliases for the category slug
"""
useTopicAliases: Boolean
): MarketplaceCategory
"""
Look up a single Marketplace listing
"""
marketplaceListing(
"""
Select the listing that matches this slug. It's the short name of the listing used in its URL.
"""
slug: String!
): MarketplaceListing
"""
Look up Marketplace listings
"""
marketplaceListings(
"""
Select listings that can be administered by the specified user.
"""
adminId: ID
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Select listings visible to the viewer even if they are not approved. If omitted or
false, only approved listings will be returned.
"""
allStates: Boolean
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Select only listings with the given category.
"""
categorySlug: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Select listings for products owned by the specified organization.
"""
organizationId: ID
"""
Select only listings where the primary category matches the given category slug.
"""
primaryCategoryOnly: Boolean = false
"""
Select the listings with these slugs, if they are visible to the viewer.
"""
slugs: [String]
"""
Also check topic aliases for the category slug
"""
useTopicAliases: Boolean
"""
Select listings to which user has admin access. If omitted, listings visible to the
viewer are returned.
"""
viewerCanAdmin: Boolean
"""
Select only listings that offer a free trial.
"""
withFreeTrialsOnly: Boolean = false
): MarketplaceListingConnection!
"""
Return information about the GitHub instance
"""
meta: GitHubMetadata!
"""
Fetches an object given its ID.
"""
node(
"""
ID of the object.
"""
id: ID!
): Node
"""
Lookup nodes by a list of IDs.
"""
nodes(
"""
The list of node IDs.
"""
ids: [ID!]!
): [Node]!
"""
Lookup a organization by login.
"""
organization(
"""
The organization's login.
"""
login: String!
): Organization
"""
The client's rate limit information.
"""
rateLimit(
"""
If true, calculate the cost for the query without evaluating it
"""
dryRun: Boolean = false
): RateLimit
"""
Hack to workaround https://github.com/facebook/relay/issues/112 re-exposing the root query object
"""
relay: Query!
"""
Lookup a given repository by the owner and repository name.
"""
repository(
"""
The name of the repository
"""
name: String!
"""
The login field of a user or organization
"""
owner: String!
): Repository
"""
Lookup a repository owner (ie. either a User or an Organization) by login.
"""
repositoryOwner(
"""
The username to lookup the owner by.
"""
login: String!
): RepositoryOwner
"""
Lookup resource by a URL.
"""
resource(
"""
The URL.
"""
url: URI!
): UniformResourceLocatable
"""
Perform a search across resources.
"""
search(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
The search string to look for.
"""
query: String!
"""
The types of search items to search within.
"""
type: SearchType!
): SearchResultItemConnection!
"""
GitHub Security Advisories
"""
securityAdvisories(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Filter advisories by identifier, e.g. GHSA or CVE.
"""
identifier: SecurityAdvisoryIdentifierFilter
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for the returned topics.
"""
orderBy: SecurityAdvisoryOrder = {field: UPDATED_AT, direction: DESC}
"""
Filter advisories to those published since a time in the past.
"""
publishedSince: DateTime
"""
Filter advisories to those updated since a time in the past.
"""
updatedSince: DateTime
): SecurityAdvisoryConnection!
"""
Fetch a Security Advisory by its GHSA ID
"""
securityAdvisory(
"""
GitHub Security Advisory ID.
"""
ghsaId: String!
): SecurityAdvisory
"""
Software Vulnerabilities documented by GitHub Security Advisories
"""
securityVulnerabilities(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
An ecosystem to filter vulnerabilities by.
"""
ecosystem: SecurityAdvisoryEcosystem
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for the returned topics.
"""
orderBy: SecurityVulnerabilityOrder = {field: UPDATED_AT, direction: DESC}
"""
A package name to filter vulnerabilities by.
"""
package: String
"""
A list of severities to filter vulnerabilities by.
"""
severities: [SecurityAdvisorySeverity!]
): SecurityVulnerabilityConnection!
"""
Look up a topic by name.
"""
topic(
"""
The topic's name.
"""
name: String!
): Topic
"""
Lookup a user by login.
"""
user(
"""
The user's login.
"""
login: String!
): User
"""
The currently authenticated user.
"""
viewer: User!
}
"""
Represents the client's rate limit.
"""
type RateLimit {
"""
The point cost for the current query counting against the rate limit.
"""
cost: Int!
"""
The maximum number of points the client is permitted to consume in a 60 minute window.
"""
limit: Int!
"""
The maximum number of nodes this query may return
"""
nodeCount: Int!
"""
The number of points remaining in the current rate limit window.
"""
remaining: Int!
"""
The time at which the current rate limit window resets in UTC epoch seconds.
"""
resetAt: DateTime!
}
"""
Represents a subject that can be reacted on.
"""
interface Reactable {
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
"""
A list of reactions grouped by content left on the subject.
"""
reactionGroups: [ReactionGroup!]
"""
A list of Reactions left on the Issue.
"""
reactions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Allows filtering Reactions by emoji.
"""
content: ReactionContent
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Allows specifying the order in which reactions are returned.
"""
orderBy: ReactionOrder
): ReactionConnection!
"""
Can user react to this subject
"""
viewerCanReact: Boolean!
}
"""
The connection type for User.
"""
type ReactingUserConnection {
"""
A list of edges.
"""
edges: [ReactingUserEdge]
"""
A list of nodes.
"""
nodes: [User]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
Represents a user that's made a reaction.
"""
type ReactingUserEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
node: User!
"""
The moment when the user made the reaction.
"""
reactedAt: DateTime!
}
"""
An emoji reaction to a particular piece of content.
"""
type Reaction implements Node {
"""
Identifies the emoji reaction.
"""
content: ReactionContent!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
"""
The reactable piece of content
"""
reactable: Reactable!
"""
Identifies the user who created this reaction.
"""
user: User
}
"""
A list of reactions that have been left on the subject.
"""
type ReactionConnection {
"""
A list of edges.
"""
edges: [ReactionEdge]
"""
A list of nodes.
"""
nodes: [Reaction]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
"""
Whether or not the authenticated user has left a reaction on the subject.
"""
viewerHasReacted: Boolean!
}
"""
Emojis that can be attached to Issues, Pull Requests and Comments.
"""
enum ReactionContent {
"""
Represents the 😕 emoji.
"""
CONFUSED
"""
Represents the 👀 emoji.
"""
EYES
"""
Represents the ❤️ emoji.
"""
HEART
"""
Represents the 🎉 emoji.
"""
HOORAY
"""
Represents the 😄 emoji.
"""
LAUGH
"""
Represents the 🚀 emoji.
"""
ROCKET
"""
Represents the 👎 emoji.
"""
THUMBS_DOWN
"""
Represents the 👍 emoji.
"""
THUMBS_UP
}
"""
An edge in a connection.
"""
type ReactionEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Reaction
}
"""
A group of emoji reactions to a particular piece of content.
"""
type ReactionGroup {
"""
Identifies the emoji reaction.
"""
content: ReactionContent!
"""
Identifies when the reaction was created.
"""
createdAt: DateTime
"""
The subject that was reacted to.
"""
subject: Reactable!
"""
Users who have reacted to the reaction subject with the emotion represented by this reaction group
"""
users(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): ReactingUserConnection!
"""
Whether or not the authenticated user has left a reaction on the subject.
"""
viewerHasReacted: Boolean!
}
"""
Ways in which lists of reactions can be ordered upon return.
"""
input ReactionOrder {
"""
The direction in which to order reactions by the specified field.
"""
direction: OrderDirection!
"""
The field in which to order reactions by.
"""
field: ReactionOrderField!
}
"""
A list of fields that reactions can be ordered by.
"""
enum ReactionOrderField {
"""
Allows ordering a list of reactions by when they were created.
"""
CREATED_AT
}
"""
Represents a Git reference.
"""
type Ref implements Node {
"""
A list of pull requests with this ref as the head ref.
"""
associatedPullRequests(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
The base ref name to filter the pull requests by.
"""
baseRefName: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
The head ref name to filter the pull requests by.
"""
headRefName: String
"""
A list of label names to filter the pull requests by.
"""
labels: [String!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for pull requests returned from the connection.
"""
orderBy: IssueOrder
"""
A list of states to filter the pull requests by.
"""
states: [PullRequestState!]
): PullRequestConnection!
id: ID!
"""
The ref name.
"""
name: String!
"""
The ref's prefix, such as `refs/heads/` or `refs/tags/`.
"""
prefix: String!
"""
The repository the ref belongs to.
"""
repository: Repository!
"""
The object the ref points to.
"""
target: GitObject!
}
"""
The connection type for Ref.
"""
type RefConnection {
"""
A list of edges.
"""
edges: [RefEdge]
"""
A list of nodes.
"""
nodes: [Ref]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type RefEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Ref
}
"""
Ways in which lists of git refs can be ordered upon return.
"""
input RefOrder {
"""
The direction in which to order refs by the specified field.
"""
direction: OrderDirection!
"""
The field in which to order refs by.
"""
field: RefOrderField!
}
"""
Properties by which ref connections can be ordered.
"""
enum RefOrderField {
"""
Order refs by their alphanumeric name
"""
ALPHABETICAL
"""
Order refs by underlying commit date if the ref prefix is refs/tags/
"""
TAG_COMMIT_DATE
}
"""
Represents a 'referenced' event on a given `ReferencedSubject`.
"""
type ReferencedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the commit associated with the 'referenced' event.
"""
commit: Commit
"""
Identifies the repository associated with the 'referenced' event.
"""
commitRepository: Repository!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
Reference originated in a different repository.
"""
isCrossRepository: Boolean!
"""
Checks if the commit message itself references the subject. Can be false in the case of a commit comment reference.
"""
isDirectReference: Boolean!
"""
Object referenced by event.
"""
subject: ReferencedSubject!
}
"""
Any referencable object
"""
union ReferencedSubject = Issue | PullRequest
"""
Represents an owner of a registry package.
"""
interface RegistryPackageOwner {
id: ID!
}
"""
Represents an interface to search packages on an object.
"""
interface RegistryPackageSearch {
id: ID!
}
"""
A release contains the content for a release.
"""
type Release implements Node & UniformResourceLocatable {
"""
The author of the release
"""
author: User
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the description of the release.
"""
description: String
id: ID!
"""
Whether or not the release is a draft
"""
isDraft: Boolean!
"""
Whether or not the release is a prerelease
"""
isPrerelease: Boolean!
"""
Identifies the title of the release.
"""
name: String
"""
Identifies the date and time when the release was created.
"""
publishedAt: DateTime
"""
List of releases assets which are dependent on this release.
"""
releaseAssets(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
A list of names to filter the assets by.
"""
name: String
): ReleaseAssetConnection!
"""
The HTTP path for this issue
"""
resourcePath: URI!
"""
The Git tag the release points to
"""
tag: Ref
"""
The name of the release's Git tag
"""
tagName: String!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL for this issue
"""
url: URI!
}
"""
A release asset contains the content for a release asset.
"""
type ReleaseAsset implements Node {
"""
The asset's content-type
"""
contentType: String!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
The number of times this asset was downloaded
"""
downloadCount: Int!
"""
Identifies the URL where you can download the release asset via the browser.
"""
downloadUrl: URI!
id: ID!
"""
Identifies the title of the release asset.
"""
name: String!
"""
Release that the asset is associated with
"""
release: Release
"""
The size (in bytes) of the asset
"""
size: Int!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The user that performed the upload
"""
uploadedBy: User!
"""
Identifies the URL of the release asset.
"""
url: URI!
}
"""
The connection type for ReleaseAsset.
"""
type ReleaseAssetConnection {
"""
A list of edges.
"""
edges: [ReleaseAssetEdge]
"""
A list of nodes.
"""
nodes: [ReleaseAsset]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type ReleaseAssetEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: ReleaseAsset
}
"""
The connection type for Release.
"""
type ReleaseConnection {
"""
A list of edges.
"""
edges: [ReleaseEdge]
"""
A list of nodes.
"""
nodes: [Release]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type ReleaseEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Release
}
"""
Ways in which lists of releases can be ordered upon return.
"""
input ReleaseOrder {
"""
The direction in which to order releases by the specified field.
"""
direction: OrderDirection!
"""
The field in which to order releases by.
"""
field: ReleaseOrderField!
}
"""
Properties by which release connections can be ordered.
"""
enum ReleaseOrderField {
"""
Order releases by creation time
"""
CREATED_AT
"""
Order releases alphabetically by name
"""
NAME
}
"""
Autogenerated input type of RemoveAssigneesFromAssignable
"""
input RemoveAssigneesFromAssignableInput @preview(toggledBy: "starfire-preview") {
"""
The id of the assignable object to remove assignees from.
"""
assignableId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "Assignable")
"""
The id of users to remove as assignees.
"""
assigneeIds: [ID!]! @possibleTypes(concreteTypes: ["User"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated return type of RemoveAssigneesFromAssignable
"""
type RemoveAssigneesFromAssignablePayload @preview(toggledBy: "starfire-preview") {
"""
The item that was unassigned.
"""
assignable: Assignable
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated input type of RemoveBusinessAdmin
"""
input RemoveBusinessAdminInput {
"""
The Business ID to update.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The login of the user to add as an admin.
"""
login: String!
}
"""
Autogenerated return type of RemoveBusinessAdmin
"""
type RemoveBusinessAdminPayload {
"""
The user who was added as an admin.
"""
admin: User
"""
The updated business.
"""
business: Business @preview(toggledBy: "gwenpool-preview")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The viewer performing the mutation.
"""
viewer: User
}
"""
Autogenerated input type of RemoveBusinessBillingManager
"""
input RemoveBusinessBillingManagerInput {
"""
The Business ID to update.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The login of the user to add as a billing manager.
"""
login: String!
}
"""
Autogenerated return type of RemoveBusinessBillingManager
"""
type RemoveBusinessBillingManagerPayload {
"""
The user who was added as a billing manager.
"""
billingManager: User
"""
The updated business.
"""
business: Business @preview(toggledBy: "gwenpool-preview")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The viewer performing the mutation.
"""
viewer: User
}
"""
Autogenerated input type of RemoveLabelsFromLabelable
"""
input RemoveLabelsFromLabelableInput @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ids of labels to remove.
"""
labelIds: [ID!]! @possibleTypes(concreteTypes: ["Label"])
"""
The id of the Labelable to remove labels from.
"""
labelableId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "Labelable")
}
"""
Autogenerated return type of RemoveLabelsFromLabelable
"""
type RemoveLabelsFromLabelablePayload @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Labelable the labels were removed from.
"""
labelable: Labelable
}
"""
Autogenerated input type of RemoveOutsideCollaborator
"""
input RemoveOutsideCollaboratorInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ID of the organization to remove the outside collaborator from.
"""
organizationId: ID! @possibleTypes(concreteTypes: ["Organization"])
"""
The ID of the outside collaborator to remove.
"""
userId: ID! @possibleTypes(concreteTypes: ["User"])
}
"""
Autogenerated return type of RemoveOutsideCollaborator
"""
type RemoveOutsideCollaboratorPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The user that was removed as an outside collaborator.
"""
removedUser: User
}
"""
Autogenerated input type of RemoveReaction
"""
input RemoveReactionInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The name of the emoji reaction to remove.
"""
content: ReactionContent!
"""
The Node ID of the subject to modify.
"""
subjectId: ID! @possibleTypes(concreteTypes: ["CommitComment", "Issue", "IssueComment", "PullRequest", "PullRequestReview", "PullRequestReviewComment", "TeamDiscussion", "TeamDiscussionComment"], abstractType: "Reactable")
}
"""
Autogenerated return type of RemoveReaction
"""
type RemoveReactionPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The reaction object.
"""
reaction: Reaction
"""
The reactable subject.
"""
subject: Reactable
}
"""
Autogenerated input type of RemoveStar
"""
input RemoveStarInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Starrable ID to unstar.
"""
starrableId: ID! @possibleTypes(concreteTypes: ["Gist", "Repository", "Topic"], abstractType: "Starrable")
}
"""
Autogenerated return type of RemoveStar
"""
type RemoveStarPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The starrable.
"""
starrable: Starrable
}
"""
Represents a 'removed_from_project' event on a given issue or pull request.
"""
type RemovedFromProjectEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
"""
Project referenced by event.
"""
project: Project @preview(toggledBy: "starfox-preview")
"""
Column name referenced by this project event.
"""
projectColumnName: String! @preview(toggledBy: "starfox-preview")
}
"""
Represents a 'renamed' event on a given issue or pull request
"""
type RenamedTitleEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the current title of the issue or pull request.
"""
currentTitle: String!
id: ID!
"""
Identifies the previous title of the issue or pull request.
"""
previousTitle: String!
"""
Subject that was renamed.
"""
subject: RenamedTitleSubject!
}
"""
An object which has a renamable title
"""
union RenamedTitleSubject = Issue | PullRequest
"""
Autogenerated input type of ReopenIssue
"""
input ReopenIssueInput @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
ID of the issue to be opened.
"""
issueId: ID! @possibleTypes(concreteTypes: ["Issue"])
}
"""
Autogenerated return type of ReopenIssue
"""
type ReopenIssuePayload @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The issue that was opened.
"""
issue: Issue
}
"""
Autogenerated input type of ReopenPullRequest
"""
input ReopenPullRequestInput @preview(toggledBy: "ocelot-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
ID of the pull request to be reopened.
"""
pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"])
}
"""
Autogenerated return type of ReopenPullRequest
"""
type ReopenPullRequestPayload @preview(toggledBy: "ocelot-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The pull request that was reopened.
"""
pullRequest: PullRequest
}
"""
Represents a 'reopened' event on any `Closable`.
"""
type ReopenedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Object that was reopened.
"""
closable: Closable!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
}
"""
The reasons a piece of content can be reported or minimized.
"""
enum ReportedContentClassifiers {
"""
An abusive or harassing piece of content
"""
ABUSE
"""
An irrelevant piece of content
"""
OFF_TOPIC
"""
An outdated piece of content
"""
OUTDATED
"""
The content has been resolved
"""
RESOLVED
"""
A spammy piece of content
"""
SPAM
}
"""
A repository contains the content for a project.
"""
type Repository implements Node & ProjectOwner & RegistryPackageOwner & RepositoryInfo & Starrable & Subscribable & UniformResourceLocatable {
"""
A list of users that can be assigned to issues in this repository.
"""
assignableUsers(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection!
"""
A list of branch protection rules for this repository.
"""
branchProtectionRules(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): BranchProtectionRuleConnection!
"""
Returns the code of conduct for this repository
"""
codeOfConduct: CodeOfConduct
"""
A list of collaborators associated with the repository.
"""
collaborators(
"""
Collaborators affiliation level with a repository.
"""
affiliation: CollaboratorAffiliation
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): RepositoryCollaboratorConnection
"""
A list of commit comments associated with the repository.
"""
commitComments(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): CommitCommentConnection!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The Ref associated with the repository's default branch.
"""
defaultBranchRef: Ref
"""
A list of dependency manifests contained in the repository
"""
dependencyGraphManifests(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Cursor to paginate dependencies
"""
dependenciesAfter: String
"""
Number of dependencies to fetch
"""
dependenciesFirst: Int
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Flag to scope to only manifests with dependencies
"""
withDependencies: Boolean
): DependencyGraphManifestConnection @preview(toggledBy: "hawkgirl-preview")
"""
A list of deploy keys that are on this repository.
"""
deployKeys(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): DeployKeyConnection!
"""
Deployments associated with the repository
"""
deployments(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Environments to list deployments for
"""
environments: [String!]
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for deployments returned from the connection.
"""
orderBy: DeploymentOrder = {field: CREATED_AT, direction: ASC}
): DeploymentConnection!
"""
The description of the repository.
"""
description: String
"""
The description of the repository rendered to HTML.
"""
descriptionHTML: HTML!
"""
The number of kilobytes this repository occupies on disk.
"""
diskUsage: Int
"""
Returns how many forks there are of this repository in the whole network.
"""
forkCount: Int!
"""
A list of direct forked repositories.
"""
forks(
"""
Array of viewer's affiliation options for repositories returned from the
connection. For example, OWNER will include only repositories that the
current viewer owns.
"""
affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
If non-null, filters repositories according to whether they have been locked
"""
isLocked: Boolean
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for repositories returned from the connection
"""
orderBy: RepositoryOrder
"""
Array of owner's affiliation options for repositories returned from the
connection. For example, OWNER will include only repositories that the
organization or user being viewed owns.
"""
ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]
"""
If non-null, filters repositories according to privacy
"""
privacy: RepositoryPrivacy
): RepositoryConnection!
"""
Indicates if the repository has issues feature enabled.
"""
hasIssuesEnabled: Boolean!
"""
Indicates if the repository has wiki feature enabled.
"""
hasWikiEnabled: Boolean!
"""
The repository's URL.
"""
homepageUrl: URI
id: ID!
"""
Indicates if the repository is unmaintained.
"""
isArchived: Boolean!
"""
Identifies if the repository is a fork.
"""
isFork: Boolean!
"""
Indicates if the repository has been locked or not.
"""
isLocked: Boolean!
"""
Identifies if the repository is a mirror.
"""
isMirror: Boolean!
"""
Identifies if the repository is private.
"""
isPrivate: Boolean!
"""
Returns a single issue from the current repository by number.
"""
issue(
"""
The number for the issue to be returned.
"""
number: Int!
): Issue
"""
Returns a single issue-like object from the current repository by number.
"""
issueOrPullRequest(
"""
The number for the issue to be returned.
"""
number: Int!
): IssueOrPullRequest
"""
A list of issues that have been opened in the repository.
"""
issues(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Filtering options for issues returned from the connection.
"""
filterBy: IssueFilters @preview(toggledBy: "starfire-preview")
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
A list of label names to filter the pull requests by.
"""
labels: [String!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for issues returned from the connection.
"""
orderBy: IssueOrder
"""
A list of states to filter the issues by.
"""
states: [IssueState!]
): IssueConnection!
"""
Returns a single label by name
"""
label(
"""
Label name
"""
name: String!
): Label
"""
A list of labels associated with the repository.
"""
labels(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
If provided, searches labels by name and description.
"""
query: String
): LabelConnection
"""
A list containing a breakdown of the language composition of the repository.
"""
languages(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Order for connection
"""
orderBy: LanguageOrder
): LanguageConnection
"""
The license associated with the repository
"""
licenseInfo: License
"""
The reason the repository has been locked.
"""
lockReason: RepositoryLockReason
"""
A list of Users that can be mentioned in the context of the repository.
"""
mentionableUsers(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection!
"""
Whether or not PRs are merged with a merge commit on this repository.
"""
mergeCommitAllowed: Boolean!
"""
Returns a single milestone from the current repository by number.
"""
milestone(
"""
The number for the milestone to be returned.
"""
number: Int!
): Milestone
"""
A list of milestones associated with the repository.
"""
milestones(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for milestones.
"""
orderBy: MilestoneOrder
"""
Filter by the state of the milestones.
"""
states: [MilestoneState!]
): MilestoneConnection
"""
The repository's original mirror URL.
"""
mirrorUrl: URI
"""
The name of the repository.
"""
name: String!
"""
The repository's name with owner.
"""
nameWithOwner: String!
"""
A Git object in the repository
"""
object(
"""
A Git revision expression suitable for rev-parse
"""
expression: String
"""
The Git object ID
"""
oid: GitObjectID
): GitObject
"""
The User owner of the repository.
"""
owner: RepositoryOwner!
"""
The repository parent, if this is a fork.
"""
parent: Repository
"""
A list of pinned issues for this repository.
"""
pinnedIssues(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): PinnedIssueConnection @preview(toggledBy: "elektra-preview")
"""
The primary language of the repository's code.
"""
primaryLanguage: Language
"""
Find project by number.
"""
project(
"""
The project number to find.
"""
number: Int!
): Project
"""
A list of projects under the owner.
"""
projects(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for projects returned from the connection
"""
orderBy: ProjectOrder
"""
Query to search projects by, currently only searching by name.
"""
search: String
"""
A list of states to filter the projects by.
"""
states: [ProjectState!]
): ProjectConnection!
"""
The HTTP path listing the repository's projects
"""
projectsResourcePath: URI!
"""
The HTTP URL listing the repository's projects
"""
projectsUrl: URI!
"""
A list of protected branches that are on this repository.
"""
protectedBranches(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): ProtectedBranchConnection! @deprecated(reason: "The `ProtectedBranch` type is deprecated and will be removed soon. Use `Repository.branchProtectionRules` instead. Removal on 2019-01-01 UTC.")
"""
Returns a single pull request from the current repository by number.
"""
pullRequest(
"""
The number for the pull request to be returned.
"""
number: Int!
): PullRequest
"""
A list of pull requests that have been opened in the repository.
"""
pullRequests(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
The base ref name to filter the pull requests by.
"""
baseRefName: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
The head ref name to filter the pull requests by.
"""
headRefName: String
"""
A list of label names to filter the pull requests by.
"""
labels: [String!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for pull requests returned from the connection.
"""
orderBy: IssueOrder
"""
A list of states to filter the pull requests by.
"""
states: [PullRequestState!]
): PullRequestConnection!
"""
Identifies when the repository was last pushed to.
"""
pushedAt: DateTime
"""
Whether or not rebase-merging is enabled on this repository.
"""
rebaseMergeAllowed: Boolean!
"""
Fetch a given ref from the repository
"""
ref(
"""
The ref to retrieve. Fully qualified matches are checked in order
(`refs/heads/master`) before falling back onto checks for short name matches (`master`).
"""
qualifiedName: String!
): Ref
"""
Fetch a list of refs from the repository
"""
refs(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
DEPRECATED: use orderBy. The ordering direction.
"""
direction: OrderDirection
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for refs returned from the connection.
"""
orderBy: RefOrder
"""
A ref name prefix like `refs/heads/`, `refs/tags/`, etc.
"""
refPrefix: String!
): RefConnection
"""
Lookup a single release given various criteria.
"""
release(
"""
The name of the Tag the Release was created from
"""
tagName: String!
): Release
"""
List of releases which are dependent on this repository.
"""
releases(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Order for connection
"""
orderBy: ReleaseOrder
): ReleaseConnection!
"""
A list of applied repository-topic associations for this repository.
"""
repositoryTopics(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): RepositoryTopicConnection!
"""
The HTTP path for this repository
"""
resourcePath: URI!
"""
A description of the repository, rendered to HTML without any links in it.
"""
shortDescriptionHTML(
"""
How many characters to return.
"""
limit: Int = 200
): HTML!
"""
Whether or not squash-merging is enabled on this repository.
"""
squashMergeAllowed: Boolean!
"""
The SSH URL to clone this repository
"""
sshUrl: GitSSHRemote!
"""
A list of users who have starred this starrable.
"""
stargazers(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Order for connection
"""
orderBy: StarOrder
): StargazerConnection!
"""
Temporary authentication token for cloning this repository.
"""
tempCloneToken: String @preview(toggledBy: "daredevil-preview")
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL for this repository
"""
url: URI!
"""
Indicates whether the viewer has admin permissions on this repository.
"""
viewerCanAdminister: Boolean!
"""
Can the current viewer create new projects on this owner.
"""
viewerCanCreateProjects: Boolean!
"""
Check if the viewer is able to change their subscription status for the repository.
"""
viewerCanSubscribe: Boolean!
"""
Indicates whether the viewer can update the topics of this repository.
"""
viewerCanUpdateTopics: Boolean!
"""
Returns a boolean indicating whether the viewing user has starred this starrable.
"""
viewerHasStarred: Boolean!
"""
The users permission level on the repository. Will return null if authenticated as an GitHub App.
"""
viewerPermission: RepositoryPermission
"""
Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.
"""
viewerSubscription: SubscriptionState
"""
A list of vulnerability alerts that are on this repository.
"""
vulnerabilityAlerts(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): RepositoryVulnerabilityAlertConnection @preview(toggledBy: "vixen-preview")
"""
A list of users watching the repository.
"""
watchers(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection!
}
"""
The affiliation of a user to a repository
"""
enum RepositoryAffiliation {
"""
Repositories that the user has been added to as a collaborator.
"""
COLLABORATOR
"""
Repositories that the user has access to through being a member of an
organization. This includes every repository on every team that the user is on.
"""
ORGANIZATION_MEMBER
"""
Repositories that are owned by the authenticated user.
"""
OWNER
}
"""
The connection type for User.
"""
type RepositoryCollaboratorConnection {
"""
A list of edges.
"""
edges: [RepositoryCollaboratorEdge]
"""
A list of nodes.
"""
nodes: [User]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
Represents a user who is a collaborator of a repository.
"""
type RepositoryCollaboratorEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
node: User!
"""
The permission the user has on the repository.
"""
permission: RepositoryPermission!
}
"""
A list of repositories owned by the subject.
"""
type RepositoryConnection {
"""
A list of edges.
"""
edges: [RepositoryEdge]
"""
A list of nodes.
"""
nodes: [Repository]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
"""
The total size in kilobytes of all repositories in the connection.
"""
totalDiskUsage: Int!
}
"""
The reason a repository is listed as 'contributed'.
"""
enum RepositoryContributionType {
"""
Created a commit
"""
COMMIT
"""
Created an issue
"""
ISSUE
"""
Created a pull request
"""
PULL_REQUEST
"""
Reviewed a pull request
"""
PULL_REQUEST_REVIEW
"""
Created the repository
"""
REPOSITORY
}
"""
An edge in a connection.
"""
type RepositoryEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Repository
}
"""
A subset of repository info.
"""
interface RepositoryInfo {
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
The description of the repository.
"""
description: String
"""
The description of the repository rendered to HTML.
"""
descriptionHTML: HTML!
"""
Returns how many forks there are of this repository in the whole network.
"""
forkCount: Int!
"""
Indicates if the repository has issues feature enabled.
"""
hasIssuesEnabled: Boolean!
"""
Indicates if the repository has wiki feature enabled.
"""
hasWikiEnabled: Boolean!
"""
The repository's URL.
"""
homepageUrl: URI
"""
Indicates if the repository is unmaintained.
"""
isArchived: Boolean!
"""
Identifies if the repository is a fork.
"""
isFork: Boolean!
"""
Indicates if the repository has been locked or not.
"""
isLocked: Boolean!
"""
Identifies if the repository is a mirror.
"""
isMirror: Boolean!
"""
Identifies if the repository is private.
"""
isPrivate: Boolean!
"""
The license associated with the repository
"""
licenseInfo: License
"""
The reason the repository has been locked.
"""
lockReason: RepositoryLockReason
"""
The repository's original mirror URL.
"""
mirrorUrl: URI
"""
The name of the repository.
"""
name: String!
"""
The repository's name with owner.
"""
nameWithOwner: String!
"""
The User owner of the repository.
"""
owner: RepositoryOwner!
"""
Identifies when the repository was last pushed to.
"""
pushedAt: DateTime
"""
The HTTP path for this repository
"""
resourcePath: URI!
"""
A description of the repository, rendered to HTML without any links in it.
"""
shortDescriptionHTML(
"""
How many characters to return.
"""
limit: Int = 200
): HTML!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL for this repository
"""
url: URI!
}
"""
An invitation for a user to be added to a repository.
"""
type RepositoryInvitation implements Node {
id: ID!
"""
The user who received the invitation.
"""
invitee: User!
"""
The user who created the invitation.
"""
inviter: User!
"""
The permission granted on this repository by this invitation.
"""
permission: RepositoryPermission!
"""
The Repository the user is invited to.
"""
repository: RepositoryInfo
}
"""
The possible reasons a given repository could be in a locked state.
"""
enum RepositoryLockReason {
"""
The repository is locked due to a billing related reason.
"""
BILLING
"""
The repository is locked due to a migration.
"""
MIGRATING
"""
The repository is locked due to a move.
"""
MOVING
"""
The repository is locked due to a rename.
"""
RENAME
}
"""
Represents a object that belongs to a repository.
"""
interface RepositoryNode {
"""
The repository associated with this node.
"""
repository: Repository!
}
"""
Ordering options for repository connections
"""
input RepositoryOrder {
"""
The ordering direction.
"""
direction: OrderDirection!
"""
The field to order repositories by.
"""
field: RepositoryOrderField!
}
"""
Properties by which repository connections can be ordered.
"""
enum RepositoryOrderField {
"""
Order repositories by creation time
"""
CREATED_AT
"""
Order repositories by name
"""
NAME
"""
Order repositories by push time
"""
PUSHED_AT
"""
Order repositories by number of stargazers
"""
STARGAZERS
"""
Order repositories by update time
"""
UPDATED_AT
}
"""
Represents an owner of a Repository.
"""
interface RepositoryOwner {
"""
A URL pointing to the owner's public avatar.
"""
avatarUrl(
"""
The size of the resulting square image.
"""
size: Int
): URI!
id: ID!
"""
The username used to login.
"""
login: String!
"""
A list of repositories this user has pinned to their profile
"""
pinnedRepositories(
"""
Array of viewer's affiliation options for repositories returned from the
connection. For example, OWNER will include only repositories that the
current viewer owns.
"""
affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
If non-null, filters repositories according to whether they have been locked
"""
isLocked: Boolean
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for repositories returned from the connection
"""
orderBy: RepositoryOrder
"""
Array of owner's affiliation options for repositories returned from the
connection. For example, OWNER will include only repositories that the
organization or user being viewed owns.
"""
ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]
"""
If non-null, filters repositories according to privacy
"""
privacy: RepositoryPrivacy
): RepositoryConnection!
"""
A list of repositories that the user owns.
"""
repositories(
"""
Array of viewer's affiliation options for repositories returned from the
connection. For example, OWNER will include only repositories that the
current viewer owns.
"""
affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
If non-null, filters repositories according to whether they are forks of another repository
"""
isFork: Boolean
"""
If non-null, filters repositories according to whether they have been locked
"""
isLocked: Boolean
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for repositories returned from the connection
"""
orderBy: RepositoryOrder
"""
Array of owner's affiliation options for repositories returned from the
connection. For example, OWNER will include only repositories that the
organization or user being viewed owns.
"""
ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]
"""
If non-null, filters repositories according to privacy
"""
privacy: RepositoryPrivacy
): RepositoryConnection!
"""
Find Repository.
"""
repository(
"""
Name of Repository to find.
"""
name: String!
): Repository
"""
The HTTP URL for the owner.
"""
resourcePath: URI!
"""
The HTTP URL for the owner.
"""
url: URI!
}
"""
The access level to a repository
"""
enum RepositoryPermission {
"""
Can read, clone, push, and add collaborators
"""
ADMIN
"""
Can read and clone
"""
READ
"""
Can read, clone and push
"""
WRITE
}
"""
The privacy of a repository
"""
enum RepositoryPrivacy {
"""
Private
"""
PRIVATE
"""
Public
"""
PUBLIC
}
"""
A repository-topic connects a repository to a topic.
"""
type RepositoryTopic implements Node & UniformResourceLocatable {
id: ID!
"""
The HTTP path for this repository-topic.
"""
resourcePath: URI!
"""
The topic.
"""
topic: Topic!
"""
The HTTP URL for this repository-topic.
"""
url: URI!
}
"""
The connection type for RepositoryTopic.
"""
type RepositoryTopicConnection {
"""
A list of edges.
"""
edges: [RepositoryTopicEdge]
"""
A list of nodes.
"""
nodes: [RepositoryTopic]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type RepositoryTopicEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: RepositoryTopic
}
"""
A alert for a repository with an affected vulnerability.
"""
type RepositoryVulnerabilityAlert implements Node & RepositoryNode @preview(toggledBy: "vixen-preview") {
"""
The affected version
"""
affectedRange: String! @deprecated(reason: "advisory specific fields are being removed from repositoryVulnerabilityAlert objects Use `securityVulnerability.vulnerableVersionRange` instead. Removal on 2019-07-01 UTC.")
"""
The reason the alert was dismissed
"""
dismissReason: String
"""
When was the alert dimissed?
"""
dismissedAt: DateTime
"""
The user who dismissed the alert
"""
dismisser: User
"""
The external identifier for the vulnerability
"""
externalIdentifier: String @deprecated(reason: "advisory specific fields are being removed from repositoryVulnerabilityAlert objects Use `securityAdvisory.identifiers` instead. Removal on 2019-07-01 UTC.")
"""
The external reference for the vulnerability
"""
externalReference: String! @deprecated(reason: "advisory specific fields are being removed from repositoryVulnerabilityAlert objects Use `securityAdvisory.references` instead. Removal on 2019-07-01 UTC.")
"""
The fixed version
"""
fixedIn: String @deprecated(reason: "advisory specific fields are being removed from repositoryVulnerabilityAlert objects Use `securityVulnerability.firstPatchedVersion` instead. Removal on 2019-07-01 UTC.")
id: ID!
"""
The affected package
"""
packageName: String! @deprecated(reason: "advisory specific fields are being removed from repositoryVulnerabilityAlert objects Use `securityVulnerability.package` instead. Removal on 2019-07-01 UTC.")
"""
The associated repository
"""
repository: Repository!
"""
The associated security advisory
"""
securityAdvisory: SecurityAdvisory
"""
The associated security vulnerablity
"""
securityVulnerability: SecurityVulnerability
"""
The vulnerable manifest filename
"""
vulnerableManifestFilename: String!
"""
The vulnerable manifest path
"""
vulnerableManifestPath: String!
"""
The vulnerable requirements
"""
vulnerableRequirements: String
}
"""
The connection type for RepositoryVulnerabilityAlert.
"""
type RepositoryVulnerabilityAlertConnection @preview(toggledBy: "vixen-preview") {
"""
A list of edges.
"""
edges: [RepositoryVulnerabilityAlertEdge]
"""
A list of nodes.
"""
nodes: [RepositoryVulnerabilityAlert]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type RepositoryVulnerabilityAlertEdge @preview(toggledBy: "vixen-preview") {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: RepositoryVulnerabilityAlert
}
"""
Autogenerated input type of RequestReviews
"""
input RequestReviewsInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Node ID of the pull request to modify.
"""
pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"])
"""
The Node IDs of the team to request.
"""
teamIds: [ID!] @possibleTypes(concreteTypes: ["Team"])
"""
Add users to the set rather than replace.
"""
union: Boolean
"""
The Node IDs of the user to request.
"""
userIds: [ID!] @possibleTypes(concreteTypes: ["User"])
}
"""
Autogenerated return type of RequestReviews
"""
type RequestReviewsPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The pull request that is getting requests.
"""
pullRequest: PullRequest
"""
The edge from the pull request to the requested reviewers.
"""
requestedReviewersEdge: UserEdge
}
"""
The possible states that can be requested when creating a check run.
"""
enum RequestableCheckStatusState @preview(toggledBy: "antiope-preview") {
"""
The check suite or run has been completed.
"""
COMPLETED
"""
The check suite or run is in progress.
"""
IN_PROGRESS
"""
The check suite or run has been queued.
"""
QUEUED
}
"""
Types that can be requested reviewers.
"""
union RequestedReviewer = Team | User
"""
Autogenerated input type of RerequestCheckSuite
"""
input RerequestCheckSuiteInput @preview(toggledBy: "antiope-preview") {
"""
The Node ID of the check suite.
"""
checkSuiteId: ID! @possibleTypes(concreteTypes: ["CheckSuite"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Node ID of the repository.
"""
repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])
}
"""
Autogenerated return type of RerequestCheckSuite
"""
type RerequestCheckSuitePayload @preview(toggledBy: "antiope-preview") {
"""
The requested check suite.
"""
checkSuite: CheckSuite
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated input type of ResolveReviewThread
"""
input ResolveReviewThreadInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ID of the thread to resolve
"""
threadId: ID! @possibleTypes(concreteTypes: ["PullRequestReviewThread"])
}
"""
Autogenerated return type of ResolveReviewThread
"""
type ResolveReviewThreadPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The thread to resolve.
"""
thread: PullRequestReviewThread
}
"""
Represents a private contribution a user made on GitHub.
"""
type RestrictedContribution implements Contribution {
"""
Whether this contribution is associated with a record you do not have access to. For
example, your own 'first issue' contribution may have been made on a repository you can no
longer access.
"""
isRestricted: Boolean!
"""
When this contribution was made.
"""
occurredAt: DateTime!
"""
The HTTP path for this contribution.
"""
resourcePath: URI!
"""
The HTTP URL for this contribution.
"""
url: URI!
"""
The user who made this contribution.
"""
user: User!
}
"""
A team or user who has the ability to dismiss a review on a protected branch.
"""
type ReviewDismissalAllowance implements Node {
"""
The actor that can dismiss.
"""
actor: ReviewDismissalAllowanceActor
"""
Identifies the branch protection rule associated with the allowed user or team.
"""
branchProtectionRule: BranchProtectionRule
id: ID!
}
"""
Types that can be an actor.
"""
union ReviewDismissalAllowanceActor = Team | User
"""
The connection type for ReviewDismissalAllowance.
"""
type ReviewDismissalAllowanceConnection {
"""
A list of edges.
"""
edges: [ReviewDismissalAllowanceEdge]
"""
A list of nodes.
"""
nodes: [ReviewDismissalAllowance]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type ReviewDismissalAllowanceEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: ReviewDismissalAllowance
}
"""
Represents a 'review_dismissed' event on a given issue or pull request.
"""
type ReviewDismissedEvent implements Node & UniformResourceLocatable {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
Identifies the optional message associated with the 'review_dismissed' event.
"""
dismissalMessage: String
"""
Identifies the optional message associated with the event, rendered to HTML.
"""
dismissalMessageHTML: String
id: ID!
"""
Identifies the message associated with the 'review_dismissed' event.
"""
message: String! @deprecated(reason: "`message` is being removed because it not nullable, whereas the underlying field is optional. Use `dismissalMessage` instead. Removal on 2019-07-01 UTC.")
"""
The message associated with the event, rendered to HTML.
"""
messageHtml: HTML! @deprecated(reason: "`messageHtml` is being removed because it not nullable, whereas the underlying field is optional. Use `dismissalMessageHTML` instead. Removal on 2019-07-01 UTC.")
"""
Identifies the previous state of the review with the 'review_dismissed' event.
"""
previousReviewState: PullRequestReviewState!
"""
PullRequest referenced by event.
"""
pullRequest: PullRequest!
"""
Identifies the commit which caused the review to become stale.
"""
pullRequestCommit: PullRequestCommit
"""
The HTTP path for this review dismissed event.
"""
resourcePath: URI!
"""
Identifies the review associated with the 'review_dismissed' event.
"""
review: PullRequestReview
"""
The HTTP URL for this review dismissed event.
"""
url: URI!
}
"""
A request for a user to review a pull request.
"""
type ReviewRequest implements Node {
"""
Identifies the primary key from the database.
"""
databaseId: Int
id: ID!
"""
Identifies the pull request associated with this review request.
"""
pullRequest: PullRequest!
"""
The reviewer that is requested.
"""
requestedReviewer: RequestedReviewer
}
"""
The connection type for ReviewRequest.
"""
type ReviewRequestConnection {
"""
A list of edges.
"""
edges: [ReviewRequestEdge]
"""
A list of nodes.
"""
nodes: [ReviewRequest]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type ReviewRequestEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: ReviewRequest
}
"""
Represents an 'review_request_removed' event on a given pull request.
"""
type ReviewRequestRemovedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
PullRequest referenced by event.
"""
pullRequest: PullRequest!
"""
Identifies the reviewer whose review request was removed.
"""
requestedReviewer: RequestedReviewer
}
"""
Represents an 'review_requested' event on a given pull request.
"""
type ReviewRequestedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
PullRequest referenced by event.
"""
pullRequest: PullRequest!
"""
Identifies the reviewer whose review was requested.
"""
requestedReviewer: RequestedReviewer
}
"""
A hovercard context with a message describing the current code review state of the pull
request.
"""
type ReviewStatusHovercardContext implements HovercardContext @preview(toggledBy: "hagar-preview") {
"""
A string describing this context
"""
message: String!
"""
An octicon to accompany this context
"""
octicon: String!
}
"""
The results of a search.
"""
union SearchResultItem = Issue | MarketplaceListing | Organization | PullRequest | Repository | User
"""
A list of results that matched against a search query.
"""
type SearchResultItemConnection {
"""
The number of pieces of code that matched the search query.
"""
codeCount: Int!
"""
A list of edges.
"""
edges: [SearchResultItemEdge]
"""
The number of issues that matched the search query.
"""
issueCount: Int!
"""
A list of nodes.
"""
nodes: [SearchResultItem]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
The number of repositories that matched the search query.
"""
repositoryCount: Int!
"""
The number of users that matched the search query.
"""
userCount: Int!
"""
The number of wiki pages that matched the search query.
"""
wikiCount: Int!
}
"""
An edge in a connection.
"""
type SearchResultItemEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: SearchResultItem
"""
Text matches on the result found.
"""
textMatches: [TextMatch]
}
"""
Represents the individual results of a search.
"""
enum SearchType {
"""
Returns results matching issues in repositories.
"""
ISSUE
"""
Returns results matching repositories.
"""
REPOSITORY
"""
Returns results matching users and organizations on GitHub.
"""
USER
}
"""
A GitHub Security Advisory
"""
type SecurityAdvisory implements Node {
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
This is a long plaintext description of the advisory
"""
description: String!
"""
The GitHub Security Advisory ID
"""
ghsaId: String!
id: ID!
"""
A list of identifiers for this advisory
"""
identifiers: [SecurityAdvisoryIdentifier!]!
"""
When the advisory was published
"""
publishedAt: DateTime!
"""
A list of references for this advisory
"""
references: [SecurityAdvisoryReference!]!
"""
The severity of the advisory
"""
severity: SecurityAdvisorySeverity!
"""
A short plaintext summary of the advisory
"""
summary: String!
"""
When the advisory was last updated
"""
updatedAt: DateTime!
"""
Vulnerabilities associated with this Advisory
"""
vulnerabilities(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
An ecosystem to filter vulnerabilities by.
"""
ecosystem: SecurityAdvisoryEcosystem
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for the returned topics.
"""
orderBy: SecurityVulnerabilityOrder = {field: UPDATED_AT, direction: DESC}
"""
A package name to filter vulnerabilities by.
"""
package: String
"""
A list of severities to filter vulnerabilities by.
"""
severities: [SecurityAdvisorySeverity!]
): SecurityVulnerabilityConnection!
"""
When the advisory was withdrawn, if it has been withdrawn
"""
withdrawnAt: DateTime
}
"""
The connection type for SecurityAdvisory.
"""
type SecurityAdvisoryConnection {
"""
A list of edges.
"""
edges: [SecurityAdvisoryEdge]
"""
A list of nodes.
"""
nodes: [SecurityAdvisory]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
The possible ecosystems of a security vulnerability's package.
"""
enum SecurityAdvisoryEcosystem {
"""
Java artifacts hosted at the Maven central repository
"""
MAVEN
"""
JavaScript packages hosted at npmjs.com
"""
NPM
"""
.NET packages hosted at the NuGet Gallery
"""
NUGET
"""
Python packages hosted at PyPI.org
"""
PIP
"""
Ruby gems hosted at RubyGems.org
"""
RUBYGEMS
}
"""
An edge in a connection.
"""
type SecurityAdvisoryEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: SecurityAdvisory
}
"""
A GitHub Security Advisory Identifier
"""
type SecurityAdvisoryIdentifier {
"""
The identifier type, e.g. GHSA, CVE
"""
type: String!
"""
The identifier
"""
value: String!
}
"""
An advisory identifier to filter results on.
"""
input SecurityAdvisoryIdentifierFilter {
"""
The identifier type.
"""
type: SecurityAdvisoryIdentifierType!
"""
The identifier string. Supports exact or partial matching.
"""
value: String!
}
"""
Identifier formats available for advisories.
"""
enum SecurityAdvisoryIdentifierType {
"""
Common Vulnerabilities and Exposures Identifier.
"""
CVE
"""
GitHub Security Advisory ID.
"""
GHSA
}
"""
Ordering options for security advisory connections
"""
input SecurityAdvisoryOrder {
"""
The ordering direction.
"""
direction: OrderDirection!
"""
The field to order security advisories by.
"""
field: SecurityAdvisoryOrderField!
}
"""
Properties by which security advisory connections can be ordered.
"""
enum SecurityAdvisoryOrderField {
"""
Order advisories by publication time
"""
PUBLISHED_AT
"""
Order advisories by update time
"""
UPDATED_AT
}
"""
An individual package
"""
type SecurityAdvisoryPackage {
"""
The ecosystem the package belongs to, e.g. RUBYGEMS, NPM
"""
ecosystem: SecurityAdvisoryEcosystem!
"""
The package name
"""
name: String!
}
"""
An individual package version
"""
type SecurityAdvisoryPackageVersion {
"""
The package name or version
"""
identifier: String!
}
"""
A GitHub Security Advisory Reference
"""
type SecurityAdvisoryReference {
"""
A publicly accessible reference
"""
url: URI!
}
"""
Severity of the vulnerability.
"""
enum SecurityAdvisorySeverity {
"""
Critical.
"""
CRITICAL
"""
High.
"""
HIGH
"""
Low.
"""
LOW
"""
Moderate.
"""
MODERATE
}
"""
An individual vulnerability within an Advisory
"""
type SecurityVulnerability {
"""
The Advisory associated with this Vulnerability
"""
advisory: SecurityAdvisory!
"""
The first version containing a fix for the vulnerability
"""
firstPatchedVersion: SecurityAdvisoryPackageVersion
"""
A description of the vulnerable package
"""
package: SecurityAdvisoryPackage!
"""
The severity of the vulnerability within this package
"""
severity: SecurityAdvisorySeverity!
"""
When the vulnerability was last updated
"""
updatedAt: DateTime!
"""
A string that describes the vulnerable package versions.
This string follows a basic syntax with a few forms.
+ `= 0.2.0` denotes a single vulnerable version.
+ `<= 1.0.8` denotes a version range up to and including the specified version
+ `< 0.1.11` denotes a version range up to, but excluding, the specified version
+ `>= 4.3.0, < 4.3.5` denotes a version range with a known minimum and maximum version.
+ `>= 0.0.1` denotes a version range with a known minimum, but no known maximum
"""
vulnerableVersionRange: String!
}
"""
The connection type for SecurityVulnerability.
"""
type SecurityVulnerabilityConnection {
"""
A list of edges.
"""
edges: [SecurityVulnerabilityEdge]
"""
A list of nodes.
"""
nodes: [SecurityVulnerability]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type SecurityVulnerabilityEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: SecurityVulnerability
}
"""
Ordering options for security vulnerability connections
"""
input SecurityVulnerabilityOrder {
"""
The ordering direction.
"""
direction: OrderDirection!
"""
The field to order security vulnerabilities by.
"""
field: SecurityVulnerabilityOrderField!
}
"""
Properties by which security vulnerability connections can be ordered.
"""
enum SecurityVulnerabilityOrderField {
"""
Order vulnerability by update time
"""
UPDATED_AT
}
"""
Represents an S/MIME signature on a Commit or Tag.
"""
type SmimeSignature implements GitSignature {
"""
Email used to sign this object.
"""
email: String!
"""
True if the signature is valid and verified by GitHub.
"""
isValid: Boolean!
"""
Payload for GPG signing object. Raw ODB object without the signature header.
"""
payload: String!
"""
ASCII-armored signature header from object.
"""
signature: String!
"""
GitHub user corresponding to the email signing this commit.
"""
signer: User
"""
The state of this signature. `VALID` if signature is valid and verified by
GitHub, otherwise represents reason why signature is considered invalid.
"""
state: GitSignatureState!
"""
True if the signature was made with GitHub's signing key.
"""
wasSignedByGitHub: Boolean!
}
"""
Ways in which star connections can be ordered.
"""
input StarOrder {
"""
The direction in which to order nodes.
"""
direction: OrderDirection!
"""
The field in which to order nodes by.
"""
field: StarOrderField!
}
"""
Properties by which star connections can be ordered.
"""
enum StarOrderField {
"""
Allows ordering a list of stars by when they were created.
"""
STARRED_AT
}
"""
The connection type for User.
"""
type StargazerConnection {
"""
A list of edges.
"""
edges: [StargazerEdge]
"""
A list of nodes.
"""
nodes: [User]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
Represents a user that's starred a repository.
"""
type StargazerEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
node: User!
"""
Identifies when the item was starred.
"""
starredAt: DateTime!
}
"""
Things that can be starred.
"""
interface Starrable {
id: ID!
"""
A list of users who have starred this starrable.
"""
stargazers(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Order for connection
"""
orderBy: StarOrder
): StargazerConnection!
"""
Returns a boolean indicating whether the viewing user has starred this starrable.
"""
viewerHasStarred: Boolean!
}
"""
The connection type for Repository.
"""
type StarredRepositoryConnection {
"""
A list of edges.
"""
edges: [StarredRepositoryEdge]
"""
A list of nodes.
"""
nodes: [Repository]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
Represents a starred repository.
"""
type StarredRepositoryEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
node: Repository!
"""
Identifies when the item was starred.
"""
starredAt: DateTime!
}
"""
Represents a commit status.
"""
type Status implements Node {
"""
The commit this status is attached to.
"""
commit: Commit
"""
Looks up an individual status context by context name.
"""
context(
"""
The context name.
"""
name: String!
): StatusContext
"""
The individual status contexts for this commit.
"""
contexts: [StatusContext!]!
id: ID!
"""
The combined commit status.
"""
state: StatusState!
}
"""
Represents an individual commit status context
"""
type StatusContext implements Node {
"""
This commit this status context is attached to.
"""
commit: Commit
"""
The name of this status context.
"""
context: String!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
The actor who created this status context.
"""
creator: Actor
"""
The description for this status context.
"""
description: String
id: ID!
"""
The state of this status context.
"""
state: StatusState!
"""
The URL for this status context.
"""
targetUrl: URI
}
"""
The possible commit status states.
"""
enum StatusState {
"""
Status is errored.
"""
ERROR
"""
Status is expected.
"""
EXPECTED
"""
Status is failing.
"""
FAILURE
"""
Status is pending.
"""
PENDING
"""
Status is successful.
"""
SUCCESS
}
"""
Autogenerated input type of SubmitPullRequestReview
"""
input SubmitPullRequestReviewInput {
"""
The text field to set on the Pull Request Review.
"""
body: String
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The event to send to the Pull Request Review.
"""
event: PullRequestReviewEvent!
"""
The Pull Request Review ID to submit.
"""
pullRequestReviewId: ID! @possibleTypes(concreteTypes: ["PullRequestReview"])
}
"""
Autogenerated return type of SubmitPullRequestReview
"""
type SubmitPullRequestReviewPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The submitted pull request review.
"""
pullRequestReview: PullRequestReview
}
"""
Entities that can be subscribed to for web and email notifications.
"""
interface Subscribable {
id: ID!
"""
Check if the viewer is able to change their subscription status for the repository.
"""
viewerCanSubscribe: Boolean!
"""
Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.
"""
viewerSubscription: SubscriptionState
}
"""
Represents a 'subscribed' event on a given `Subscribable`.
"""
type SubscribedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
Object referenced by event.
"""
subscribable: Subscribable!
}
"""
The possible states of a subscription.
"""
enum SubscriptionState {
"""
The User is never notified.
"""
IGNORED
"""
The User is notified of all conversations.
"""
SUBSCRIBED
"""
The User is only notified when participating or @mentioned.
"""
UNSUBSCRIBED
}
"""
A suggestion to review a pull request based on a user's commit history and review comments.
"""
type SuggestedReviewer {
"""
Is this suggestion based on past commits?
"""
isAuthor: Boolean!
"""
Is this suggestion based on past review comments?
"""
isCommenter: Boolean!
"""
Identifies the user suggested to review the pull request.
"""
reviewer: User!
}
"""
Represents a Git tag.
"""
type Tag implements GitObject & Node {
"""
An abbreviated version of the Git object ID
"""
abbreviatedOid: String!
"""
The HTTP path for this Git object
"""
commitResourcePath: URI!
"""
The HTTP URL for this Git object
"""
commitUrl: URI!
id: ID!
"""
The Git tag message.
"""
message: String
"""
The Git tag name.
"""
name: String!
"""
The Git object ID
"""
oid: GitObjectID!
"""
The Repository the Git object belongs to
"""
repository: Repository!
"""
Details about the tag author.
"""
tagger: GitActor
"""
The Git object the tag points to.
"""
target: GitObject!
}
"""
A team of users in an organization.
"""
type Team implements Node & Subscribable {
"""
A list of teams that are ancestors of this team.
"""
ancestors(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): TeamConnection!
"""
A URL pointing to the team's avatar.
"""
avatarUrl(
"""
The size in pixels of the resulting square image.
"""
size: Int = 400
): URI
"""
List of child teams belonging to this team
"""
childTeams(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Whether to list immediate child teams or all descendant child teams.
"""
immediateOnly: Boolean = true
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Order for connection
"""
orderBy: TeamOrder
"""
User logins to filter by
"""
userLogins: [String!]
): TeamConnection!
"""
The slug corresponding to the organization and team.
"""
combinedSlug: String!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
The description of the team.
"""
description: String
"""
Find a team discussion by its number.
"""
discussion(
"""
The sequence number of the discussion to find.
"""
number: Int!
): TeamDiscussion @preview(toggledBy: "echo-preview")
"""
A list of team discussions.
"""
discussions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
If provided, filters discussions according to whether or not they are pinned.
"""
isPinned: Boolean
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Order for connection
"""
orderBy: TeamDiscussionOrder
): TeamDiscussionConnection! @preview(toggledBy: "echo-preview")
"""
The HTTP path for team discussions
"""
discussionsResourcePath: URI! @preview(toggledBy: "echo-preview")
"""
The HTTP URL for team discussions
"""
discussionsUrl: URI! @preview(toggledBy: "echo-preview")
"""
The HTTP path for editing this team
"""
editTeamResourcePath: URI!
"""
The HTTP URL for editing this team
"""
editTeamUrl: URI!
id: ID!
"""
A list of pending invitations for users to this team
"""
invitations(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): OrganizationInvitationConnection
"""
A list of users who are members of this team.
"""
members(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Filter by membership type
"""
membership: TeamMembershipType = ALL
"""
Order for the connection.
"""
orderBy: TeamMemberOrder
"""
The search string to look for.
"""
query: String
"""
Filter by team member role
"""
role: TeamMemberRole
): TeamMemberConnection!
"""
The HTTP path for the team' members
"""
membersResourcePath: URI!
"""
The HTTP URL for the team' members
"""
membersUrl: URI!
"""
The name of the team.
"""
name: String!
"""
The HTTP path creating a new team
"""
newTeamResourcePath: URI!
"""
The HTTP URL creating a new team
"""
newTeamUrl: URI!
"""
The organization that owns this team.
"""
organization: Organization!
"""
The parent team of the team.
"""
parentTeam: Team
"""
The level of privacy the team has.
"""
privacy: TeamPrivacy!
"""
A list of repositories this team has access to.
"""
repositories(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Order for the connection.
"""
orderBy: TeamRepositoryOrder
"""
The search string to look for.
"""
query: String
): TeamRepositoryConnection!
"""
The HTTP path for this team's repositories
"""
repositoriesResourcePath: URI!
"""
The HTTP URL for this team's repositories
"""
repositoriesUrl: URI!
"""
The HTTP path for this team
"""
resourcePath: URI!
"""
The slug corresponding to the team.
"""
slug: String!
"""
The HTTP path for this team's teams
"""
teamsResourcePath: URI!
"""
The HTTP URL for this team's teams
"""
teamsUrl: URI!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL for this team
"""
url: URI!
"""
Team is adminable by the viewer.
"""
viewerCanAdminister: Boolean!
"""
Check if the viewer is able to change their subscription status for the repository.
"""
viewerCanSubscribe: Boolean!
"""
Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.
"""
viewerSubscription: SubscriptionState
}
"""
The connection type for Team.
"""
type TeamConnection {
"""
A list of edges.
"""
edges: [TeamEdge]
"""
A list of nodes.
"""
nodes: [Team]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
A team discussion.
"""
type TeamDiscussion implements Comment & Deletable & Node & Reactable & Subscribable & UniformResourceLocatable & Updatable & UpdatableComment @preview(toggledBy: "echo-preview") {
"""
The actor who authored the comment.
"""
author: Actor
"""
Author's association with the discussion's team.
"""
authorAssociation: CommentAuthorAssociation!
"""
The body as Markdown.
"""
body: String!
"""
The discussion body rendered to HTML.
"""
bodyHTML: HTML!
"""
The body rendered to text.
"""
bodyText: String!
"""
Identifies the discussion body hash.
"""
bodyVersion: String!
"""
A list of comments on this discussion.
"""
comments(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
When provided, filters the connection such that results begin with the comment with this number.
"""
fromComment: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Order for connection
"""
orderBy: TeamDiscussionCommentOrder
): TeamDiscussionCommentConnection!
"""
The HTTP path for discussion comments
"""
commentsResourcePath: URI!
"""
The HTTP URL for discussion comments
"""
commentsUrl: URI!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Check if this comment was created via an email reply.
"""
createdViaEmail: Boolean!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The actor who edited the comment.
"""
editor: Actor
id: ID!
"""
Check if this comment was edited and includes an edit with the creation data
"""
includesCreatedEdit: Boolean!
"""
Whether or not the discussion is pinned.
"""
isPinned: Boolean!
"""
Whether or not the discussion is only visible to team members and org admins.
"""
isPrivate: Boolean!
"""
The moment the editor made the last edit
"""
lastEditedAt: DateTime
"""
Identifies the discussion within its team.
"""
number: Int!
"""
Identifies when the comment was published at.
"""
publishedAt: DateTime
"""
A list of reactions grouped by content left on the subject.
"""
reactionGroups: [ReactionGroup!]
"""
A list of Reactions left on the Issue.
"""
reactions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Allows filtering Reactions by emoji.
"""
content: ReactionContent
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Allows specifying the order in which reactions are returned.
"""
orderBy: ReactionOrder
): ReactionConnection!
"""
The HTTP path for this discussion
"""
resourcePath: URI!
"""
The team that defines the context of this discussion.
"""
team: Team!
"""
The title of the discussion
"""
title: String!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL for this discussion
"""
url: URI!
"""
A list of edits to this content.
"""
userContentEdits(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserContentEditConnection
"""
Check if the current viewer can delete this object.
"""
viewerCanDelete: Boolean!
"""
Whether or not the current viewer can pin this discussion.
"""
viewerCanPin: Boolean!
"""
Can user react to this subject
"""
viewerCanReact: Boolean!
"""
Check if the viewer is able to change their subscription status for the repository.
"""
viewerCanSubscribe: Boolean!
"""
Check if the current viewer can update this object.
"""
viewerCanUpdate: Boolean!
"""
Reasons why the current viewer can not update this comment.
"""
viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!
"""
Did the viewer author this comment.
"""
viewerDidAuthor: Boolean!
"""
Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.
"""
viewerSubscription: SubscriptionState
}
"""
A comment on a team discussion.
"""
type TeamDiscussionComment implements Comment & Deletable & Node & Reactable & UniformResourceLocatable & Updatable & UpdatableComment @preview(toggledBy: "echo-preview") {
"""
The actor who authored the comment.
"""
author: Actor
"""
Author's association with the comment's team.
"""
authorAssociation: CommentAuthorAssociation!
"""
The body as Markdown.
"""
body: String!
"""
The comment body rendered to HTML.
"""
bodyHTML: HTML!
"""
The body rendered to text.
"""
bodyText: String!
"""
The current version of the body content.
"""
bodyVersion: String!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Check if this comment was created via an email reply.
"""
createdViaEmail: Boolean!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The discussion this comment is about.
"""
discussion: TeamDiscussion!
"""
The actor who edited the comment.
"""
editor: Actor
id: ID!
"""
Check if this comment was edited and includes an edit with the creation data
"""
includesCreatedEdit: Boolean!
"""
The moment the editor made the last edit
"""
lastEditedAt: DateTime
"""
Identifies the comment number.
"""
number: Int!
"""
Identifies when the comment was published at.
"""
publishedAt: DateTime
"""
A list of reactions grouped by content left on the subject.
"""
reactionGroups: [ReactionGroup!]
"""
A list of Reactions left on the Issue.
"""
reactions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Allows filtering Reactions by emoji.
"""
content: ReactionContent
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Allows specifying the order in which reactions are returned.
"""
orderBy: ReactionOrder
): ReactionConnection!
"""
The HTTP path for this comment
"""
resourcePath: URI!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL for this comment
"""
url: URI!
"""
A list of edits to this content.
"""
userContentEdits(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserContentEditConnection
"""
Check if the current viewer can delete this object.
"""
viewerCanDelete: Boolean!
"""
Can user react to this subject
"""
viewerCanReact: Boolean!
"""
Check if the current viewer can update this object.
"""
viewerCanUpdate: Boolean!
"""
Reasons why the current viewer can not update this comment.
"""
viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!
"""
Did the viewer author this comment.
"""
viewerDidAuthor: Boolean!
}
"""
The connection type for TeamDiscussionComment.
"""
type TeamDiscussionCommentConnection @preview(toggledBy: "echo-preview") {
"""
A list of edges.
"""
edges: [TeamDiscussionCommentEdge]
"""
A list of nodes.
"""
nodes: [TeamDiscussionComment]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type TeamDiscussionCommentEdge @preview(toggledBy: "echo-preview") {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: TeamDiscussionComment
}
"""
Ways in which team discussion comment connections can be ordered.
"""
input TeamDiscussionCommentOrder @preview(toggledBy: "echo-preview") {
"""
The direction in which to order nodes.
"""
direction: OrderDirection!
"""
The field by which to order nodes.
"""
field: TeamDiscussionCommentOrderField!
}
"""
Properties by which team discussion comment connections can be ordered.
"""
enum TeamDiscussionCommentOrderField @preview(toggledBy: "echo-preview") {
"""
Allows sequential ordering of team discussion comments (which is equivalent to chronological ordering).
"""
NUMBER
}
"""
The connection type for TeamDiscussion.
"""
type TeamDiscussionConnection @preview(toggledBy: "echo-preview") {
"""
A list of edges.
"""
edges: [TeamDiscussionEdge]
"""
A list of nodes.
"""
nodes: [TeamDiscussion]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type TeamDiscussionEdge @preview(toggledBy: "echo-preview") {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: TeamDiscussion
}
"""
Ways in which team discussion connections can be ordered.
"""
input TeamDiscussionOrder @preview(toggledBy: "echo-preview") {
"""
The direction in which to order nodes.
"""
direction: OrderDirection!
"""
The field by which to order nodes.
"""
field: TeamDiscussionOrderField!
}
"""
Properties by which team discussion connections can be ordered.
"""
enum TeamDiscussionOrderField @preview(toggledBy: "echo-preview") {
"""
Allows chronological ordering of team discussions.
"""
CREATED_AT
}
"""
An edge in a connection.
"""
type TeamEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Team
}
"""
The connection type for User.
"""
type TeamMemberConnection {
"""
A list of edges.
"""
edges: [TeamMemberEdge]
"""
A list of nodes.
"""
nodes: [User]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
Represents a user who is a member of a team.
"""
type TeamMemberEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The HTTP path to the organization's member access page.
"""
memberAccessResourcePath: URI!
"""
The HTTP URL to the organization's member access page.
"""
memberAccessUrl: URI!
node: User!
"""
The role the member has on the team.
"""
role: TeamMemberRole!
}
"""
Ordering options for team member connections
"""
input TeamMemberOrder {
"""
The ordering direction.
"""
direction: OrderDirection!
"""
The field to order team members by.
"""
field: TeamMemberOrderField!
}
"""
Properties by which team member connections can be ordered.
"""
enum TeamMemberOrderField {
"""
Order team members by creation time
"""
CREATED_AT
"""
Order team members by login
"""
LOGIN
}
"""
The possible team member roles; either 'maintainer' or 'member'.
"""
enum TeamMemberRole {
"""
A team maintainer has permission to add and remove team members.
"""
MAINTAINER
"""
A team member has no administrative permissions on the team.
"""
MEMBER
}
"""
Defines which types of team members are included in the returned list. Can be one of IMMEDIATE, CHILD_TEAM or ALL.
"""
enum TeamMembershipType {
"""
Includes immediate and child team members for the team.
"""
ALL
"""
Includes only child team members for the team.
"""
CHILD_TEAM
"""
Includes only immediate members of the team.
"""
IMMEDIATE
}
"""
Ways in which team connections can be ordered.
"""
input TeamOrder {
"""
The direction in which to order nodes.
"""
direction: OrderDirection!
"""
The field in which to order nodes by.
"""
field: TeamOrderField!
}
"""
Properties by which team connections can be ordered.
"""
enum TeamOrderField {
"""
Allows ordering a list of teams by name.
"""
NAME
}
"""
The possible team privacy values.
"""
enum TeamPrivacy {
"""
A secret team can only be seen by its members.
"""
SECRET
"""
A visible team can be seen and @mentioned by every member of the organization.
"""
VISIBLE
}
"""
The connection type for Repository.
"""
type TeamRepositoryConnection {
"""
A list of edges.
"""
edges: [TeamRepositoryEdge]
"""
A list of nodes.
"""
nodes: [Repository]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
Represents a team repository.
"""
type TeamRepositoryEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
node: Repository!
"""
The permission level the team has on the repository
"""
permission: RepositoryPermission!
}
"""
Ordering options for team repository connections
"""
input TeamRepositoryOrder {
"""
The ordering direction.
"""
direction: OrderDirection!
"""
The field to order repositories by.
"""
field: TeamRepositoryOrderField!
}
"""
Properties by which team repository connections can be ordered.
"""
enum TeamRepositoryOrderField {
"""
Order repositories by creation time
"""
CREATED_AT
"""
Order repositories by name
"""
NAME
"""
Order repositories by permission
"""
PERMISSION
"""
Order repositories by push time
"""
PUSHED_AT
"""
Order repositories by number of stargazers
"""
STARGAZERS
"""
Order repositories by update time
"""
UPDATED_AT
}
"""
The role of a user on a team.
"""
enum TeamRole {
"""
User has admin rights on the team.
"""
ADMIN
"""
User is a member of the team.
"""
MEMBER
}
"""
A text match within a search result.
"""
type TextMatch {
"""
The specific text fragment within the property matched on.
"""
fragment: String!
"""
Highlights within the matched fragment.
"""
highlights: [TextMatchHighlight!]!
"""
The property matched on.
"""
property: String!
}
"""
Represents a single highlight in a search result match.
"""
type TextMatchHighlight {
"""
The indice in the fragment where the matched text begins.
"""
beginIndice: Int!
"""
The indice in the fragment where the matched text ends.
"""
endIndice: Int!
"""
The text matched.
"""
text: String!
}
"""
A topic aggregates entities that are related to a subject.
"""
type Topic implements Node & Starrable {
id: ID!
"""
The topic's name.
"""
name: String!
"""
A list of related topics, including aliases of this topic, sorted with the most relevant
first. Returns up to 10 Topics.
"""
relatedTopics(
"""
How many topics to return.
"""
first: Int = 3
): [Topic!]!
"""
A list of users who have starred this starrable.
"""
stargazers(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Order for connection
"""
orderBy: StarOrder
): StargazerConnection!
"""
Returns a boolean indicating whether the viewing user has starred this starrable.
"""
viewerHasStarred: Boolean!
}
"""
The connection type for Topic.
"""
type TopicConnection {
"""
A list of edges.
"""
edges: [TopicEdge]
"""
A list of nodes.
"""
nodes: [Topic]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type TopicEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Topic
}
"""
Reason that the suggested topic is declined.
"""
enum TopicSuggestionDeclineReason {
"""
The suggested topic is not relevant to the repository.
"""
NOT_RELEVANT
"""
The viewer does not like the suggested topic.
"""
PERSONAL_PREFERENCE
"""
The suggested topic is too general for the repository.
"""
TOO_GENERAL
"""
The suggested topic is too specific for the repository (e.g. #ruby-on-rails-version-4-2-1).
"""
TOO_SPECIFIC
}
"""
Represents a 'transferred' event on a given issue or pull request.
"""
type TransferredEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
The repository this came from
"""
fromRepository: Repository
id: ID!
"""
Identifies the issue associated with the event.
"""
issue: Issue!
}
"""
Represents a Git tree.
"""
type Tree implements GitObject & Node {
"""
An abbreviated version of the Git object ID
"""
abbreviatedOid: String!
"""
The HTTP path for this Git object
"""
commitResourcePath: URI!
"""
The HTTP URL for this Git object
"""
commitUrl: URI!
"""
A list of tree entries.
"""
entries: [TreeEntry!]
id: ID!
"""
The Git object ID
"""
oid: GitObjectID!
"""
The Repository the Git object belongs to
"""
repository: Repository!
}
"""
Represents a Git tree entry.
"""
type TreeEntry {
"""
Entry file mode.
"""
mode: Int!
"""
Entry file name.
"""
name: String!
"""
Entry file object.
"""
object: GitObject
"""
Entry file Git object ID.
"""
oid: GitObjectID!
"""
The Repository the tree entry belongs to
"""
repository: Repository!
"""
Entry file type.
"""
type: String!
}
"""
An RFC 3986, RFC 3987, and RFC 6570 (level 4) compliant URI string.
"""
scalar URI
"""
Represents an 'unassigned' event on any assignable object.
"""
type UnassignedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the assignable associated with the event.
"""
assignable: Assignable!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
Identifies the subject (user) who was unassigned.
"""
user: User
}
"""
Represents a type that can be retrieved by a URL.
"""
interface UniformResourceLocatable {
"""
The HTML path to this resource.
"""
resourcePath: URI!
"""
The URL to this resource.
"""
url: URI!
}
"""
Represents an unknown signature on a Commit or Tag.
"""
type UnknownSignature implements GitSignature {
"""
Email used to sign this object.
"""
email: String!
"""
True if the signature is valid and verified by GitHub.
"""
isValid: Boolean!
"""
Payload for GPG signing object. Raw ODB object without the signature header.
"""
payload: String!
"""
ASCII-armored signature header from object.
"""
signature: String!
"""
GitHub user corresponding to the email signing this commit.
"""
signer: User
"""
The state of this signature. `VALID` if signature is valid and verified by
GitHub, otherwise represents reason why signature is considered invalid.
"""
state: GitSignatureState!
"""
True if the signature was made with GitHub's signing key.
"""
wasSignedByGitHub: Boolean!
}
"""
Represents an 'unlabeled' event on a given issue or pull request.
"""
type UnlabeledEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
Identifies the label associated with the 'unlabeled' event.
"""
label: Label!
"""
Identifies the `Labelable` associated with the event.
"""
labelable: Labelable!
}
"""
Autogenerated input type of UnlockLockable
"""
input UnlockLockableInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
ID of the issue or pull request to be unlocked.
"""
lockableId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "Lockable")
}
"""
Autogenerated return type of UnlockLockable
"""
type UnlockLockablePayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The item that was unlocked.
"""
unlockedRecord: Lockable
}
"""
Represents an 'unlocked' event on a given issue or pull request.
"""
type UnlockedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
Object that was unlocked.
"""
lockable: Lockable!
}
"""
Autogenerated input type of UnmarkIssueAsDuplicate
"""
input UnmarkIssueAsDuplicateInput @preview(toggledBy: "starfire-preview") {
"""
ID of the issue or pull request currently considered canonical/authoritative/original.
"""
canonicalId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "IssueOrPullRequest")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
ID of the issue or pull request currently marked as a duplicate.
"""
duplicateId: ID! @possibleTypes(concreteTypes: ["Issue", "PullRequest"], abstractType: "IssueOrPullRequest")
}
"""
Autogenerated return type of UnmarkIssueAsDuplicate
"""
type UnmarkIssueAsDuplicatePayload @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The issue or pull request that was marked as a duplicate.
"""
duplicate: IssueOrPullRequest
}
"""
Autogenerated input type of UnminimizeComment
"""
input UnminimizeCommentInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Node ID of the subject to modify.
"""
subjectId: ID! @possibleTypes(concreteTypes: ["CommitComment", "GistComment", "IssueComment", "PullRequestReviewComment"], abstractType: "Minimizable")
}
"""
Autogenerated return type of UnminimizeComment
"""
type UnminimizeCommentPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The comment that was unminimized.
"""
unminimizedComment: Minimizable
}
"""
Autogenerated input type of UnpinIssue
"""
input UnpinIssueInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ID of the issue to be unpinned
"""
issueId: ID! @possibleTypes(concreteTypes: ["Issue"])
}
"""
Autogenerated return type of UnpinIssue
"""
type UnpinIssuePayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The issue that was unpinned
"""
issue: Issue
}
"""
Represents an 'unpinned' event on a given issue or pull request.
"""
type UnpinnedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
Identifies the issue associated with the event.
"""
issue: Issue!
}
"""
Autogenerated input type of UnresolveReviewThread
"""
input UnresolveReviewThreadInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ID of the thread to unresolve
"""
threadId: ID! @possibleTypes(concreteTypes: ["PullRequestReviewThread"])
}
"""
Autogenerated return type of UnresolveReviewThread
"""
type UnresolveReviewThreadPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The thread to resolve.
"""
thread: PullRequestReviewThread
}
"""
Represents an 'unsubscribed' event on a given `Subscribable`.
"""
type UnsubscribedEvent implements Node {
"""
Identifies the actor who performed the event.
"""
actor: Actor
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
id: ID!
"""
Object referenced by event.
"""
subscribable: Subscribable!
}
"""
Entities that can be updated.
"""
interface Updatable {
"""
Check if the current viewer can update this object.
"""
viewerCanUpdate: Boolean!
}
"""
Comments that can be updated.
"""
interface UpdatableComment {
"""
Reasons why the current viewer can not update this comment.
"""
viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!
}
"""
Autogenerated input type of UpdateBranchProtectionRule
"""
input UpdateBranchProtectionRuleInput {
"""
The global relay id of the branch protection rule to be updated.
"""
branchProtectionRuleId: ID! @possibleTypes(concreteTypes: ["BranchProtectionRule"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Will new commits pushed to matching branches dismiss pull request review approvals.
"""
dismissesStaleReviews: Boolean
"""
Can admins overwrite branch protection.
"""
isAdminEnforced: Boolean
"""
The glob-like pattern used to determine matching branches.
"""
pattern: String
"""
A list of User or Team IDs allowed to push to matching branches.
"""
pushActorIds: [ID!]
"""
Number of approving reviews required to update matching branches.
"""
requiredApprovingReviewCount: Int
"""
List of required status check contexts that must pass for commits to be accepted to matching branches.
"""
requiredStatusCheckContexts: [String!]
"""
Are approving reviews required to update matching branches.
"""
requiresApprovingReviews: Boolean
"""
Are reviews from code owners required to update matching branches.
"""
requiresCodeOwnerReviews: Boolean
"""
Are commits required to be signed.
"""
requiresCommitSignatures: Boolean
"""
Are status checks required to update matching branches.
"""
requiresStatusChecks: Boolean
"""
Are branches required to be up to date before merging.
"""
requiresStrictStatusChecks: Boolean
"""
Is pushing to matching branches restricted.
"""
restrictsPushes: Boolean
"""
Is dismissal of pull request reviews restricted.
"""
restrictsReviewDismissals: Boolean
"""
A list of User or Team IDs allowed to dismiss reviews on pull requests targeting matching branches.
"""
reviewDismissalActorIds: [ID!]
}
"""
Autogenerated return type of UpdateBranchProtectionRule
"""
type UpdateBranchProtectionRulePayload {
"""
The newly created BranchProtectionRule.
"""
branchProtectionRule: BranchProtectionRule
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated input type of UpdateBusinessAllowPrivateRepositoryForkingSetting
"""
input UpdateBusinessAllowPrivateRepositoryForkingSettingInput {
"""
The ID of the business on which to set the allow private repository forking setting.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The value for the allow private repository forking setting on the business.
"""
settingValue: BusinessEnabledDisabledSettingValue!
}
"""
Autogenerated return type of UpdateBusinessAllowPrivateRepositoryForkingSetting
"""
type UpdateBusinessAllowPrivateRepositoryForkingSettingPayload {
"""
The business with the updated allow private repository forking setting.
"""
business: Business @preview(toggledBy: "gwenpool-preview")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
A message confirming the result of updating the allow private repository forking setting.
"""
message: String
}
"""
Autogenerated input type of UpdateBusinessDefaultRepositoryPermissionSetting
"""
input UpdateBusinessDefaultRepositoryPermissionSettingInput {
"""
The ID of the business on which to set the default repository permission setting.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The value for the default repository permission setting on the business.
"""
settingValue: BusinessDefaultRepositoryPermissionSettingValue!
}
"""
Autogenerated return type of UpdateBusinessDefaultRepositoryPermissionSetting
"""
type UpdateBusinessDefaultRepositoryPermissionSettingPayload {
"""
The business with the updated default repository permission setting.
"""
business: Business @preview(toggledBy: "gwenpool-preview")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
A message confirming the result of updating the default repository permission setting.
"""
message: String
}
"""
Autogenerated input type of UpdateBusinessMembersCanChangeRepositoryVisibilitySetting
"""
input UpdateBusinessMembersCanChangeRepositoryVisibilitySettingInput {
"""
The ID of the business on which to set the members can change repository visibility setting.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The value for the members can change repository visibility setting on the business.
"""
settingValue: BusinessEnabledDisabledSettingValue!
}
"""
Autogenerated return type of UpdateBusinessMembersCanChangeRepositoryVisibilitySetting
"""
type UpdateBusinessMembersCanChangeRepositoryVisibilitySettingPayload {
"""
The business with the updated members can change repository visibility setting.
"""
business: Business @preview(toggledBy: "gwenpool-preview")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
A message confirming the result of updating the members can change repository visibility setting.
"""
message: String
}
"""
Autogenerated input type of UpdateBusinessMembersCanCreateRepositoriesSetting
"""
input UpdateBusinessMembersCanCreateRepositoriesSettingInput {
"""
The ID of the business on which to set the members can create repositories setting.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The value for the members can create repositories setting on the business.
"""
settingValue: BusinessMembersCanCreateRepositoriesSettingValue!
}
"""
Autogenerated return type of UpdateBusinessMembersCanCreateRepositoriesSetting
"""
type UpdateBusinessMembersCanCreateRepositoriesSettingPayload {
"""
The business with the updated members can create repositories setting.
"""
business: Business @preview(toggledBy: "gwenpool-preview")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
A message confirming the result of updating the members can create repositories setting.
"""
message: String
}
"""
Autogenerated input type of UpdateBusinessMembersCanDeleteIssuesSetting
"""
input UpdateBusinessMembersCanDeleteIssuesSettingInput {
"""
The ID of the business on which to set the members can delete issues setting.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The value for the members can delete issues setting on the business.
"""
settingValue: BusinessEnabledDisabledSettingValue!
}
"""
Autogenerated return type of UpdateBusinessMembersCanDeleteIssuesSetting
"""
type UpdateBusinessMembersCanDeleteIssuesSettingPayload {
"""
The business with the updated members can delete issues setting.
"""
business: Business @preview(toggledBy: "gwenpool-preview")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
A message confirming the result of updating the members can delete issues setting.
"""
message: String
}
"""
Autogenerated input type of UpdateBusinessMembersCanDeleteRepositoriesSetting
"""
input UpdateBusinessMembersCanDeleteRepositoriesSettingInput {
"""
The ID of the business on which to set the members can delete repositories setting.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The value for the members can delete repositories setting on the business.
"""
settingValue: BusinessEnabledDisabledSettingValue!
}
"""
Autogenerated return type of UpdateBusinessMembersCanDeleteRepositoriesSetting
"""
type UpdateBusinessMembersCanDeleteRepositoriesSettingPayload {
"""
The business with the updated members can delete repositories setting.
"""
business: Business @preview(toggledBy: "gwenpool-preview")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
A message confirming the result of updating the members can delete repositories setting.
"""
message: String
}
"""
Autogenerated input type of UpdateBusinessMembersCanInviteCollaboratorsSetting
"""
input UpdateBusinessMembersCanInviteCollaboratorsSettingInput {
"""
The ID of the business on which to set the members can invite collaborators setting.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The value for the members can invite collaborators setting on the business.
"""
settingValue: BusinessEnabledDisabledSettingValue!
}
"""
Autogenerated return type of UpdateBusinessMembersCanInviteCollaboratorsSetting
"""
type UpdateBusinessMembersCanInviteCollaboratorsSettingPayload {
"""
The business with the updated members can invite collaborators setting.
"""
business: Business @preview(toggledBy: "gwenpool-preview")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
A message confirming the result of updating the members can invite collaborators setting.
"""
message: String
}
"""
Autogenerated input type of UpdateBusinessMembersCanUpdateProtectedBranchesSetting
"""
input UpdateBusinessMembersCanUpdateProtectedBranchesSettingInput {
"""
The ID of the business on which to set the members can update protected branches setting.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The value for the members can update protected branches setting on the business.
"""
settingValue: BusinessEnabledDisabledSettingValue!
}
"""
Autogenerated return type of UpdateBusinessMembersCanUpdateProtectedBranchesSetting
"""
type UpdateBusinessMembersCanUpdateProtectedBranchesSettingPayload {
"""
The business with the updated members can update protected branches setting.
"""
business: Business @preview(toggledBy: "gwenpool-preview")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
A message confirming the result of updating the members can update protected branches setting.
"""
message: String
}
"""
Autogenerated input type of UpdateBusinessOrganizationProjectsSetting
"""
input UpdateBusinessOrganizationProjectsSettingInput {
"""
The ID of the business on which to set the organization projects setting.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The value for the organization projects setting on the business.
"""
settingValue: BusinessEnabledDisabledSettingValue!
}
"""
Autogenerated return type of UpdateBusinessOrganizationProjectsSetting
"""
type UpdateBusinessOrganizationProjectsSettingPayload {
"""
The business with the updated organization projects setting.
"""
business: Business @preview(toggledBy: "gwenpool-preview")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
A message confirming the result of updating the organization projects setting.
"""
message: String
}
"""
Autogenerated input type of UpdateBusinessProfile
"""
input UpdateBusinessProfileInput {
"""
The Business ID to update.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The description of the business.
"""
description: String
"""
The location of the business
"""
location: String
"""
The name of business.
"""
name: String
"""
The URL of the business's website
"""
websiteUrl: String
}
"""
Autogenerated return type of UpdateBusinessProfile
"""
type UpdateBusinessProfilePayload {
"""
The updated business.
"""
business: Business @preview(toggledBy: "gwenpool-preview")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated input type of UpdateBusinessRepositoryProjectsSetting
"""
input UpdateBusinessRepositoryProjectsSettingInput {
"""
The ID of the business on which to set the repository projects setting.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The value for the repository projects setting on the business.
"""
settingValue: BusinessEnabledDisabledSettingValue!
}
"""
Autogenerated return type of UpdateBusinessRepositoryProjectsSetting
"""
type UpdateBusinessRepositoryProjectsSettingPayload {
"""
The business with the updated repository projects setting.
"""
business: Business @preview(toggledBy: "gwenpool-preview")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
A message confirming the result of updating the repository projects setting.
"""
message: String
}
"""
Autogenerated input type of UpdateBusinessTeamDiscussionsSetting
"""
input UpdateBusinessTeamDiscussionsSettingInput {
"""
The ID of the business on which to set the team discussions setting.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The value for the team discussions setting on the business.
"""
settingValue: BusinessEnabledDisabledSettingValue!
}
"""
Autogenerated return type of UpdateBusinessTeamDiscussionsSetting
"""
type UpdateBusinessTeamDiscussionsSettingPayload {
"""
The business with the updated team discussions setting.
"""
business: Business @preview(toggledBy: "gwenpool-preview")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
A message confirming the result of updating the team discussions setting.
"""
message: String
}
"""
Autogenerated input type of UpdateBusinessTwoFactorAuthenticationRequiredSetting
"""
input UpdateBusinessTwoFactorAuthenticationRequiredSettingInput {
"""
The ID of the business on which to set the two factor authentication required setting.
"""
businessId: ID! @possibleTypes(concreteTypes: ["Business"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The value for the two factor authentication required setting on the business.
"""
settingValue: BusinessEnabledSettingValue!
}
"""
Autogenerated return type of UpdateBusinessTwoFactorAuthenticationRequiredSetting
"""
type UpdateBusinessTwoFactorAuthenticationRequiredSettingPayload {
"""
The business with the updated two factor authentication required setting.
"""
business: Business @preview(toggledBy: "gwenpool-preview")
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
A message confirming the result of updating the two factor authentication required setting.
"""
message: String
}
"""
Autogenerated input type of UpdateCheckRun
"""
input UpdateCheckRunInput @preview(toggledBy: "antiope-preview") {
"""
Possible further actions the integrator can perform, which a user may trigger.
"""
actions: [CheckRunAction!]
"""
The node of the check.
"""
checkRunId: ID! @possibleTypes(concreteTypes: ["CheckRun"])
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The time that the check run finished.
"""
completedAt: DateTime
"""
The final conclusion of the check.
"""
conclusion: CheckConclusionState
"""
The URL of the integrator's site that has the full details of the check.
"""
detailsUrl: URI
"""
A reference for the run on the integrator's system.
"""
externalId: String
"""
The name of the check.
"""
name: String
"""
Descriptive details about the run.
"""
output: CheckRunOutput
"""
The node ID of the repository.
"""
repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])
"""
The time that the check run began.
"""
startedAt: DateTime
"""
The current status.
"""
status: RequestableCheckStatusState
}
"""
Autogenerated return type of UpdateCheckRun
"""
type UpdateCheckRunPayload @preview(toggledBy: "antiope-preview") {
"""
The updated check run.
"""
checkRun: CheckRun
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
}
"""
Autogenerated input type of UpdateCheckSuitePreferences
"""
input UpdateCheckSuitePreferencesInput @preview(toggledBy: "antiope-preview") {
"""
The check suite preferences to modify.
"""
autoTriggerPreferences: [CheckSuiteAutoTriggerPreference!]!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Node ID of the repository.
"""
repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])
}
"""
Autogenerated return type of UpdateCheckSuitePreferences
"""
type UpdateCheckSuitePreferencesPayload @preview(toggledBy: "antiope-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The updated repository.
"""
repository: Repository
}
"""
Autogenerated input type of UpdateIssueComment
"""
input UpdateIssueCommentInput @preview(toggledBy: "starfire-preview") {
"""
The updated text of the comment.
"""
body: String!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ID of the IssueComment to modify.
"""
id: ID! @possibleTypes(concreteTypes: ["IssueComment"])
}
"""
Autogenerated return type of UpdateIssueComment
"""
type UpdateIssueCommentPayload @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The updated comment.
"""
issueComment: IssueComment
}
"""
Autogenerated input type of UpdateIssue
"""
input UpdateIssueInput @preview(toggledBy: "starfire-preview") {
"""
An array of Node IDs of users for this issue.
"""
assigneeIds: [ID!] @possibleTypes(concreteTypes: ["User"])
"""
The body for the issue description.
"""
body: String
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ID of the Issue to modify.
"""
id: ID! @possibleTypes(concreteTypes: ["Issue"])
"""
An array of Node IDs of labels for this issue.
"""
labelIds: [ID!] @possibleTypes(concreteTypes: ["Label"])
"""
The Node ID of the milestone for this issue.
"""
milestoneId: ID @possibleTypes(concreteTypes: ["Milestone"])
"""
An array of Node IDs for projects associated with this issue.
"""
projectIds: [ID!]
"""
The desired issue state.
"""
state: IssueState
"""
The title for the issue.
"""
title: String
}
"""
Autogenerated return type of UpdateIssue
"""
type UpdateIssuePayload @preview(toggledBy: "starfire-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The issue.
"""
issue: Issue
}
"""
Autogenerated input type of UpdateProjectCard
"""
input UpdateProjectCardInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Whether or not the ProjectCard should be archived
"""
isArchived: Boolean
"""
The note of ProjectCard.
"""
note: String
"""
The ProjectCard ID to update.
"""
projectCardId: ID! @possibleTypes(concreteTypes: ["ProjectCard"])
}
"""
Autogenerated return type of UpdateProjectCard
"""
type UpdateProjectCardPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The updated ProjectCard.
"""
projectCard: ProjectCard
}
"""
Autogenerated input type of UpdateProjectColumn
"""
input UpdateProjectColumnInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The name of project column.
"""
name: String!
"""
The ProjectColumn ID to update.
"""
projectColumnId: ID! @possibleTypes(concreteTypes: ["ProjectColumn"])
}
"""
Autogenerated return type of UpdateProjectColumn
"""
type UpdateProjectColumnPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The updated project column.
"""
projectColumn: ProjectColumn
}
"""
Autogenerated input type of UpdateProject
"""
input UpdateProjectInput {
"""
The description of project.
"""
body: String
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The name of project.
"""
name: String
"""
The Project ID to update.
"""
projectId: ID! @possibleTypes(concreteTypes: ["Project"])
"""
Whether the project is public or not.
"""
public: Boolean
"""
Whether the project is open or closed.
"""
state: ProjectState
}
"""
Autogenerated return type of UpdateProject
"""
type UpdateProjectPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The updated project.
"""
project: Project
}
"""
Autogenerated input type of UpdatePullRequest
"""
input UpdatePullRequestInput @preview(toggledBy: "ocelot-preview") {
"""
The name of the branch you want your changes pulled into. This should be an existing branch
on the current repository.
"""
baseRefName: String
"""
The contents of the pull request.
"""
body: String
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Indicates whether maintainers can modify the pull request.
"""
maintainerCanModify: Boolean
"""
The Node ID of the pull request.
"""
pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"])
"""
The title of the pull request.
"""
title: String
}
"""
Autogenerated return type of UpdatePullRequest
"""
type UpdatePullRequestPayload @preview(toggledBy: "ocelot-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The updated pull request.
"""
pullRequest: PullRequest
}
"""
Autogenerated input type of UpdatePullRequestReviewComment
"""
input UpdatePullRequestReviewCommentInput {
"""
The text of the comment.
"""
body: String!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Node ID of the comment to modify.
"""
pullRequestReviewCommentId: ID! @possibleTypes(concreteTypes: ["PullRequestReviewComment"])
}
"""
Autogenerated return type of UpdatePullRequestReviewComment
"""
type UpdatePullRequestReviewCommentPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The updated comment.
"""
pullRequestReviewComment: PullRequestReviewComment
}
"""
Autogenerated input type of UpdatePullRequestReview
"""
input UpdatePullRequestReviewInput {
"""
The contents of the pull request review body.
"""
body: String!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Node ID of the pull request review to modify.
"""
pullRequestReviewId: ID! @possibleTypes(concreteTypes: ["PullRequestReview"])
}
"""
Autogenerated return type of UpdatePullRequestReview
"""
type UpdatePullRequestReviewPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The updated pull request review.
"""
pullRequestReview: PullRequestReview
}
"""
Autogenerated input type of UpdateSubscription
"""
input UpdateSubscriptionInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The new state of the subscription.
"""
state: SubscriptionState!
"""
The Node ID of the subscribable object to modify.
"""
subscribableId: ID! @possibleTypes(concreteTypes: ["Commit", "Issue", "PullRequest", "Repository", "Team", "TeamDiscussion"], abstractType: "Subscribable")
}
"""
Autogenerated return type of UpdateSubscription
"""
type UpdateSubscriptionPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The input subscribable entity.
"""
subscribable: Subscribable
}
"""
Autogenerated input type of UpdateTeamDiscussionComment
"""
input UpdateTeamDiscussionCommentInput @preview(toggledBy: "echo-preview") {
"""
The updated text of the comment.
"""
body: String!
"""
The current version of the body content.
"""
bodyVersion: String
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The ID of the comment to modify.
"""
id: ID! @possibleTypes(concreteTypes: ["TeamDiscussionComment"])
}
"""
Autogenerated return type of UpdateTeamDiscussionComment
"""
type UpdateTeamDiscussionCommentPayload @preview(toggledBy: "echo-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The updated comment.
"""
teamDiscussionComment: TeamDiscussionComment
}
"""
Autogenerated input type of UpdateTeamDiscussion
"""
input UpdateTeamDiscussionInput @preview(toggledBy: "echo-preview") {
"""
The updated text of the discussion.
"""
body: String
"""
The current version of the body content. If provided, this update operation
will be rejected if the given version does not match the latest version on the server.
"""
bodyVersion: String
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Node ID of the discussion to modify.
"""
id: ID! @possibleTypes(concreteTypes: ["TeamDiscussion"])
"""
If provided, sets the pinned state of the updated discussion.
"""
pinned: Boolean
"""
The updated title of the discussion.
"""
title: String
}
"""
Autogenerated return type of UpdateTeamDiscussion
"""
type UpdateTeamDiscussionPayload @preview(toggledBy: "echo-preview") {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The updated discussion.
"""
teamDiscussion: TeamDiscussion
}
"""
Autogenerated input type of UpdateTopics
"""
input UpdateTopicsInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The Node ID of the repository.
"""
repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])
"""
An array of topic names.
"""
topicNames: [String!]!
}
"""
Autogenerated return type of UpdateTopics
"""
type UpdateTopicsPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Names of the provided topics that are not valid.
"""
invalidTopicNames: [String!]
"""
The updated repository.
"""
repository: Repository
}
"""
A user is an individual's account on GitHub that owns repositories and can make new content.
"""
type User implements Actor & Node & RegistryPackageOwner & RegistryPackageSearch & RepositoryOwner & UniformResourceLocatable {
"""
A URL pointing to the user's public avatar.
"""
avatarUrl(
"""
The size of the resulting square image.
"""
size: Int
): URI!
"""
The user's public profile bio.
"""
bio: String
"""
The user's public profile bio as HTML.
"""
bioHTML: HTML!
"""
A list of commit comments made by this user.
"""
commitComments(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): CommitCommentConnection!
"""
The user's public profile company.
"""
company: String
"""
The user's public profile company as HTML.
"""
companyHTML: HTML!
"""
The collection of contributions this user has made to different repositories.
"""
contributionsCollection(
"""
Only contributions made at this time or later will be counted. If omitted, defaults to a year ago.
"""
from: DateTime
"""
The ID of the organization used to filter contributions.
"""
organizationID: ID
"""
Only contributions made before and up to and including this time will be
counted. If omitted, defaults to the current time.
"""
to: DateTime
): ContributionsCollection!
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the primary key from the database.
"""
databaseId: Int
"""
The user's publicly visible profile email.
"""
email: String!
"""
A list of users the given user is followed by.
"""
followers(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): FollowerConnection!
"""
A list of users the given user is following.
"""
following(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): FollowingConnection!
"""
Find gist by repo name.
"""
gist(
"""
The gist name to find.
"""
name: String!
): Gist
"""
A list of gist comments made by this user.
"""
gistComments(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): GistCommentConnection!
"""
A list of the Gists the user has created.
"""
gists(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for gists returned from the connection
"""
orderBy: GistOrder
"""
Filters Gists according to privacy.
"""
privacy: GistPrivacy
): GistConnection!
"""
The hovercard information for this user in a given context
"""
hovercard(
"""
The ID of the subject to get the hovercard in the context of
"""
primarySubjectId: ID
): Hovercard! @preview(toggledBy: "hagar-preview")
id: ID!
"""
Whether or not this user is a participant in the GitHub Security Bug Bounty.
"""
isBountyHunter: Boolean!
"""
Whether or not this user is a participant in the GitHub Campus Experts Program.
"""
isCampusExpert: Boolean!
"""
Whether or not this user is a GitHub Developer Program member.
"""
isDeveloperProgramMember: Boolean!
"""
Whether or not this user is a GitHub employee.
"""
isEmployee: Boolean!
"""
Whether or not the user has marked themselves as for hire.
"""
isHireable: Boolean!
"""
Whether or not this user is a site administrator.
"""
isSiteAdmin: Boolean!
"""
Whether or not this user is the viewing user.
"""
isViewer: Boolean!
"""
A list of issue comments made by this user.
"""
issueComments(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): IssueCommentConnection!
"""
A list of issues associated with this user.
"""
issues(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Filtering options for issues returned from the connection.
"""
filterBy: IssueFilters @preview(toggledBy: "starfire-preview")
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
A list of label names to filter the pull requests by.
"""
labels: [String!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for issues returned from the connection.
"""
orderBy: IssueOrder
"""
A list of states to filter the issues by.
"""
states: [IssueState!]
): IssueConnection!
"""
The user's public profile location.
"""
location: String
"""
The username used to login.
"""
login: String!
"""
The user's public profile name.
"""
name: String
"""
Find an organization by its login that the user belongs to.
"""
organization(
"""
The login of the organization to find.
"""
login: String!
): Organization
"""
A list of organizations the user belongs to.
"""
organizations(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): OrganizationConnection!
"""
A list of repositories this user has pinned to their profile
"""
pinnedRepositories(
"""
Array of viewer's affiliation options for repositories returned from the
connection. For example, OWNER will include only repositories that the
current viewer owns.
"""
affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
If non-null, filters repositories according to whether they have been locked
"""
isLocked: Boolean
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for repositories returned from the connection
"""
orderBy: RepositoryOrder
"""
Array of owner's affiliation options for repositories returned from the
connection. For example, OWNER will include only repositories that the
organization or user being viewed owns.
"""
ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]
"""
If non-null, filters repositories according to privacy
"""
privacy: RepositoryPrivacy
): RepositoryConnection!
"""
A list of public keys associated with this user.
"""
publicKeys(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): PublicKeyConnection!
"""
A list of pull requests associated with this user.
"""
pullRequests(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
The base ref name to filter the pull requests by.
"""
baseRefName: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
The head ref name to filter the pull requests by.
"""
headRefName: String
"""
A list of label names to filter the pull requests by.
"""
labels: [String!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for pull requests returned from the connection.
"""
orderBy: IssueOrder
"""
A list of states to filter the pull requests by.
"""
states: [PullRequestState!]
): PullRequestConnection!
"""
A list of repositories that the user owns.
"""
repositories(
"""
Array of viewer's affiliation options for repositories returned from the
connection. For example, OWNER will include only repositories that the
current viewer owns.
"""
affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
If non-null, filters repositories according to whether they are forks of another repository
"""
isFork: Boolean
"""
If non-null, filters repositories according to whether they have been locked
"""
isLocked: Boolean
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for repositories returned from the connection
"""
orderBy: RepositoryOrder
"""
Array of owner's affiliation options for repositories returned from the
connection. For example, OWNER will include only repositories that the
organization or user being viewed owns.
"""
ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]
"""
If non-null, filters repositories according to privacy
"""
privacy: RepositoryPrivacy
): RepositoryConnection!
"""
A list of repositories that the user recently contributed to.
"""
repositoriesContributedTo(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
If non-null, include only the specified types of contributions. The
GitHub.com UI uses [COMMIT, ISSUE, PULL_REQUEST, REPOSITORY]
"""
contributionTypes: [RepositoryContributionType]
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
If true, include user repositories
"""
includeUserRepositories: Boolean
"""
If non-null, filters repositories according to whether they have been locked
"""
isLocked: Boolean
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for repositories returned from the connection
"""
orderBy: RepositoryOrder
"""
If non-null, filters repositories according to privacy
"""
privacy: RepositoryPrivacy
): RepositoryConnection!
"""
Find Repository.
"""
repository(
"""
Name of Repository to find.
"""
name: String!
): Repository
"""
The HTTP path for this user
"""
resourcePath: URI!
"""
Repositories the user has starred.
"""
starredRepositories(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Order for connection
"""
orderBy: StarOrder
"""
Filters starred repositories to only return repositories owned by the viewer.
"""
ownedByViewer: Boolean
): StarredRepositoryConnection!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
"""
The HTTP URL for this user
"""
url: URI!
"""
Whether or not the viewer is able to follow the user.
"""
viewerCanFollow: Boolean!
"""
Whether or not this user is followed by the viewer.
"""
viewerIsFollowing: Boolean!
"""
A list of repositories the given user is watching.
"""
watching(
"""
Affiliation options for repositories returned from the connection
"""
affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR, ORGANIZATION_MEMBER]
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
If non-null, filters repositories according to whether they have been locked
"""
isLocked: Boolean
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Ordering options for repositories returned from the connection
"""
orderBy: RepositoryOrder
"""
Array of owner's affiliation options for repositories returned from the
connection. For example, OWNER will include only repositories that the
organization or user being viewed owns.
"""
ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]
"""
If non-null, filters repositories according to privacy
"""
privacy: RepositoryPrivacy
): RepositoryConnection!
"""
A URL pointing to the user's public website/blog.
"""
websiteUrl: URI
}
"""
The connection type for User.
"""
type UserConnection {
"""
A list of edges.
"""
edges: [UserEdge]
"""
A list of nodes.
"""
nodes: [User]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edit on user content
"""
type UserContentEdit implements Node {
"""
Identifies the date and time when the object was created.
"""
createdAt: DateTime!
"""
Identifies the date and time when the object was deleted.
"""
deletedAt: DateTime
"""
The actor who deleted this content
"""
deletedBy: Actor
"""
A summary of the changes for this edit
"""
diff: String
"""
When this content was edited
"""
editedAt: DateTime!
"""
The actor who edited this content
"""
editor: Actor
id: ID!
"""
Identifies the date and time when the object was last updated.
"""
updatedAt: DateTime!
}
"""
A list of edits to content.
"""
type UserContentEditConnection {
"""
A list of edges.
"""
edges: [UserContentEditEdge]
"""
A list of nodes.
"""
nodes: [UserContentEdit]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
"""
Identifies the total count of items in the connection.
"""
totalCount: Int!
}
"""
An edge in a connection.
"""
type UserContentEditEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: UserContentEdit
}
"""
Represents a user.
"""
type UserEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: User
}
"""
A hovercard context with a message describing how the viewer is related.
"""
type ViewerHovercardContext implements HovercardContext @preview(toggledBy: "hagar-preview") {
"""
A string describing this context
"""
message: String!
"""
An octicon to accompany this context
"""
octicon: String!
"""
Identifies the user who is related to this context.
"""
viewer: User!
}
"""
A valid x509 certificate string
"""
scalar X509Certificate
================================================
FILE: 4-api/4_swagger/docs/docs.go
================================================
// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
// This file was generated by swaggo/swag at
// 2019-09-25 15:54:20.870705 +0300 MSK m=+0.021560440
package docs
import (
"bytes"
"encoding/json"
"strings"
"github.com/alecthomas/template"
"github.com/swaggo/swag"
)
var doc = `{
"schemes": {{ marshal .Schemes }},
"swagger": "2.0",
"info": {
"description": "{{.Description}}",
"title": "{{.Title}}",
"termsOfService": "http://swagger.io/terms/",
"contact": {
"name": "API Support",
"url": "http://www.swagger.io/support",
"email": "support@swagger.io"
},
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
},
"version": "{{.Version}}"
},
"host": "{{.Host}}",
"basePath": "{{.BasePath}}",
"paths": {
"/user/{id}": {
"get": {
"description": "get user by ID",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"summary": "Show a account",
"operationId": "get-user-by-int",
"parameters": [
{
"type": "integer",
"description": "User ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/model.User"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/model.Error"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/model.Error"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/main.myError"
}
}
}
}
}
},
"definitions": {
"main.myError": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"status": {
"type": "integer"
}
}
},
"model.Error": {
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
},
"model.User": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
}
}
}`
type swaggerInfo struct {
Version string
Host string
BasePath string
Schemes []string
Title string
Description string
}
// SwaggerInfo holds exported Swagger Info so clients can modify it
var SwaggerInfo = swaggerInfo{
Version: "1.0",
Host: "petstore.swagger.io",
BasePath: "/api/v1",
Schemes: []string{},
Title: "Sample Project API",
Description: "This is a sample server Petstore server.",
}
type s struct{}
func (s *s) ReadDoc() string {
sInfo := SwaggerInfo
sInfo.Description = strings.Replace(sInfo.Description, "\n", "\\n", -1)
t, err := template.New("swagger_info").Funcs(template.FuncMap{
"marshal": func(v interface{}) string {
a, _ := json.Marshal(v)
return string(a)
},
}).Parse(doc)
if err != nil {
return doc
}
var tpl bytes.Buffer
if err := t.Execute(&tpl, sInfo); err != nil {
return doc
}
return tpl.String()
}
func init() {
swag.Register(swag.Name, &s{})
}
================================================
FILE: 4-api/4_swagger/docs/swagger/swagger.json
================================================
{
"swagger": "2.0",
"info": {
"description": "This is a sample server Petstore server.",
"title": "Sample Project API",
"termsOfService": "http://swagger.io/terms/",
"contact": {
"name": "API Support",
"url": "http://www.swagger.io/support",
"email": "support@swagger.io"
},
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
},
"version": "1.0"
},
"host": "petstore.swagger.io",
"basePath": "/api/v1",
"paths": {
"/user/{id}": {
"get": {
"description": "get user by ID",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"summary": "Show a account",
"operationId": "get-user-by-int",
"parameters": [
{
"type": "integer",
"description": "User ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"$ref": "#/definitions/model.User"
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"$ref": "#/definitions/model.Error"
}
},
"404": {
"description": "Not Found",
"schema": {
"type": "object",
"$ref": "#/definitions/model.Error"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"$ref": "#/definitions/model.Error"
}
}
}
}
}
},
"definitions": {
"model.Error": {
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
},
"model.User": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
}
}
}
================================================
FILE: 4-api/4_swagger/docs/swagger/swagger.yaml
================================================
basePath: /api/v1
definitions:
model.Error:
properties:
message:
type: string
type: object
model.User:
properties:
email:
type: string
id:
type: integer
name:
type: string
type: object
host: petstore.swagger.io
info:
contact:
email: support@swagger.io
name: API Support
url: http://www.swagger.io/support
description: This is a sample server Petstore server.
license:
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0.html
termsOfService: http://swagger.io/terms/
title: Sample Project API
version: "1.0"
paths:
/user/{id}:
get:
consumes:
- application/json
description: get user by ID
operationId: get-user-by-int
parameters:
- description: User ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/model.User'
type: object
"400":
description: Bad Request
schema:
$ref: '#/definitions/model.Error'
type: object
"404":
description: Not Found
schema:
$ref: '#/definitions/model.Error'
type: object
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/model.Error'
type: object
summary: Show a account
swagger: "2.0"
================================================
FILE: 4-api/4_swagger/docs/swagger.json
================================================
{
"swagger": "2.0",
"info": {
"description": "This is a sample server Petstore server.",
"title": "Sample Project API",
"termsOfService": "http://swagger.io/terms/",
"contact": {
"name": "API Support",
"url": "http://www.swagger.io/support",
"email": "support@swagger.io"
},
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
},
"version": "1.0"
},
"host": "petstore.swagger.io",
"basePath": "/api/v1",
"paths": {
"/user/{id}": {
"get": {
"description": "get user by ID",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"summary": "Show a account",
"operationId": "get-user-by-int",
"parameters": [
{
"type": "integer",
"description": "User ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/model.User"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/model.Error"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/model.Error"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/main.myError"
}
}
}
}
}
},
"definitions": {
"main.myError": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"status": {
"type": "integer"
}
}
},
"model.Error": {
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
},
"model.User": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
}
}
}
================================================
FILE: 4-api/4_swagger/docs/swagger.yaml
================================================
basePath: /api/v1
definitions:
main.myError:
properties:
error:
type: string
status:
type: integer
type: object
model.Error:
properties:
message:
type: string
type: object
model.User:
properties:
email:
type: string
id:
type: integer
name:
type: string
type: object
host: petstore.swagger.io
info:
contact:
email: support@swagger.io
name: API Support
url: http://www.swagger.io/support
description: This is a sample server Petstore server.
license:
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0.html
termsOfService: http://swagger.io/terms/
title: Sample Project API
version: "1.0"
paths:
/user/{id}:
get:
consumes:
- application/json
description: get user by ID
operationId: get-user-by-int
parameters:
- description: User ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/model.User'
"400":
description: Bad Request
schema:
$ref: '#/definitions/model.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/model.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/main.myError'
summary: Show a account
swagger: "2.0"
================================================
FILE: 4-api/4_swagger/main.go
================================================
package main
import (
"net/http"
_ "github.com/go-park-mail-ru/lectures/4-api/4_swagger/docs"
httpSwagger "github.com/swaggo/http-swagger"
)
// swag init
type myError struct {
Status int
Error string
}
// ShowAccount godoc
// @Summary Show a account
// @Description get user by ID
// @ID get-user-by-int
// @Accept json
// @Produce json
// @Param id path int true "User ID"
// @Success 200 {object} model.User
// @Failure 400 {object} model.Error
// @Failure 404 {object} model.Error
// @Failure 500 {object} myError
// @Router /user/{id} [get]
func handleUsers(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`{"status": "ok"}`))
}
// @title Sample Project API
// @version 1.0
// @description This is a sample server Petstore server.
// @termsOfService http://swagger.io/terms/
// @contact.name API Support
// @contact.url http://www.swagger.io/support
// @contact.email support@swagger.io
// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
// @host petstore.swagger.io
// @BasePath /api/v1
func main() {
http.HandleFunc("/docs/", httpSwagger.WrapHandler)
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("url: " + r.URL.String()))
})
http.ListenAndServe(":8080", nil)
}
================================================
FILE: 4-api/4_swagger/model/user.go
================================================
package model
type User struct {
ID int
Name string
Email string
}
type Error struct {
Message string
}
================================================
FILE: 4-api/5_sessions/main.go
================================================
package main
import (
"math/rand"
"net/http"
"time"
"github.com/gorilla/mux"
)
type User struct {
ID uint `json:"id"`
Username string `json:"username"`
Password string `json:"password"`
}
var (
letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
)
func RandStringRunes(n int) string {
b := make([]rune, n)
for i := range b {
b[i] = letterRunes[rand.Intn(len(letterRunes))]
}
return string(b)
}
type MyHandler struct {
sessions map[string]uint
users map[string]*User
}
func NewMyHandler() *MyHandler {
return &MyHandler{
sessions: make(map[string]uint, 10),
users: map[string]*User{
"rvasily": {1, "rvasily", "love"},
},
}
}
// http://127.0.0.1:8080/login?login=rvsily&password=love
func (api *MyHandler) Login(w http.ResponseWriter, r *http.Request) {
user, ok := api.users[r.FormValue("login")]
if !ok {
http.Error(w, `no user`, 404)
return
}
if user.Password != r.FormValue("password") {
http.Error(w, `bad pass`, 400)
return
}
SID := RandStringRunes(32)
api.sessions[SID] = user.ID
cookie := &http.Cookie{
Name: "session_id",
Value: SID,
Expires: time.Now().Add(10 * time.Hour),
}
http.SetCookie(w, cookie)
w.Write([]byte(SID))
}
func (api *MyHandler) Logout(w http.ResponseWriter, r *http.Request) {
session, err := r.Cookie("session_id")
if err == http.ErrNoCookie {
http.Error(w, `no sess`, 401)
return
}
if _, ok := api.sessions[session.Value]; !ok {
http.Error(w, `no sess`, 401)
return
}
delete(api.sessions, session.Value)
session.Expires = time.Now().AddDate(0, 0, -1)
http.SetCookie(w, session)
}
func (api *MyHandler) Root(w http.ResponseWriter, r *http.Request) {
authorized := false
session, err := r.Cookie("session_id")
if err == nil && session != nil {
_, authorized = api.sessions[session.Value]
}
if authorized {
w.Write([]byte("autrorized"))
} else {
w.Write([]byte("not autrorized"))
}
}
func main() {
r := mux.NewRouter()
api := NewMyHandler()
r.HandleFunc("/", api.Root)
r.HandleFunc("/login", api.Login)
r.HandleFunc("/logout", api.Logout)
http.ListenAndServe(":8080", r)
}
================================================
FILE: 4-api/6_jwt/main.go
================================================
package main
import (
"fmt"
"net/http"
jwt "github.com/dgrijalva/jwt-go"
)
var SECRET = []byte("myawesomesecret")
// http://127.0.0.1:8080/login?username=rvasily
func main() {
http.HandleFunc("/login", func(w http.ResponseWriter, r *http.Request) {
// if r.Method != http.MethodPost {
// w.WriteHeader(http.StatusBadRequest)
// return
// }
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"username": r.FormValue("username"),
})
str, err := token.SignedString(SECRET)
if err != nil {
w.Write([]byte("=(" + err.Error()))
return
}
cookie := &http.Cookie{
Name: "session_id",
Value: str,
}
http.SetCookie(w, cookie)
w.Write([]byte(str))
})
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
cookie, err := r.Cookie("session_id")
if err != nil {
w.Write([]byte("=("))
return
}
token, err := jwt.Parse(cookie.Value, func(token *jwt.Token) (interface{}, error) {
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
}
return SECRET, nil
})
if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
w.Write([]byte("hello " + claims["username"].(string)))
return
}
w.Write([]byte("not authorized"))
fmt.Println(err)
})
http.ListenAndServe(":8080", nil)
}
================================================
FILE: 4-api/7_oauth/main.go
================================================
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"golang.org/x/oauth2"
"golang.org/x/oauth2/vk"
)
const (
APP_ID = "7065390"
APP_KEY = "cQZe3Vvo4mHotmetUdXK"
APP_SECRET = "1bbf49951bbf49951bbf49953b1bd486bb11bbf1bbf4995468b3d76e2cb2114610654e0"
API_URL = "https://api.vk.com/method/users.get?fields=email,photo_50&access_token=%s&v=5.131"
)
type Response struct {
Response []struct {
FirstName string `json:"first_name"`
Photo string `json:"photo_50"`
}
}
// https://oauth.vk.com/authorize?client_id=7065390&redirect_uri=http://localhost:8080/&response_type=code&scope=email
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
code := r.FormValue("code")
conf := oauth2.Config{
ClientID: APP_ID,
ClientSecret: APP_KEY,
RedirectURL: "http://localhost:8080/",
Endpoint: vk.Endpoint,
}
token, err := conf.Exchange(ctx, code)
if err != nil {
log.Println("cannot exchange", err)
w.Write([]byte("=("))
return
}
client := conf.Client(ctx, token)
resp, err := client.Get(fmt.Sprintf(API_URL, token.AccessToken))
if err != nil {
log.Println("cannot request data", err)
w.Write([]byte("=("))
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println("cannot read buffer", err)
w.Write([]byte("=("))
return
}
data := &Response{}
json.Unmarshal(body, data)
w.Write([]byte(`
================================================
FILE: 6-databases/readings_6.md
================================================
* http://www.vividcortex.com/hubfs/eBooks/The_Ultimate_Guide_To_Building_Database-Driven_Apps_with_Go.pdf - в удобной форме информация по основным аспектам работы с database/sql
* https://golang.org/pkg/database/sql/ - собственно сам интерфейс к базе
* https://github.com/golang/go/wiki/SQLDrivers - список поддерживаемых баз
* https://github.com/golang/go/wiki/SQLInterface
* https://github.com/DATA-DOG/go-sqlmock
* http://www.alexedwards.net/blog/configuring-sqldb
* http://go-database-sql.org/
* https://astaxie.gitbooks.io/build-web-application-with-golang/
* https://github.com/thewhitetulip/web-dev-golang-anti-textbook/
* https://codegangsta.gitbooks.io/building-web-apps-with-go/content/
* https://godoc.org/github.com/go-sql-driver/mysql
* https://godoc.org/github.com/lib/pq
* https://godoc.org/github.com/bradfitz/gomemcache/memcache
* https://godoc.org/github.com/garyburd/redigo/redis
* https://godoc.org/gopkg.in/mgo.v2
* http://goinbigdata.com/how-to-build-microservice-with-mongodb-in-golang/
* http://gorm.io/
* http://motion-express.com/blog/gorm:-a-simple-guide-on-crud
* https://godoc.org/github.com/jinzhu/gorm
* https://habrahabr.ru/company/mailru/blog/266811/ - архи-полезная статья про устройство базы внутри
* https://hackernoon.com/communicating-go-applications-through-redis-pub-sub-messaging-paradigm-df7317897b13
* https://medium.com/@shijuvar/introducing-nats-to-go-developers-3cfcb98c21d0
* https://medium.com/@shijuvar/building-distributed-systems-and-microservices-in-go-with-nats-streaming-d8b4baa633a2
================================================
FILE: 6-databases/readme.md
================================================
docker run -p 3306:3306 --name some-mysql -e MYSQL_ROOT_PASSWORD=1234 -d mysql:5
docker run -p 6379:6379 --name some-redis -d redis
docker run -p 11211:11211 --name my-memcache -d memcached
docker run -p 5672:5672 -d --hostname my-rabbit --name some-rabbit rabbitmq:3
docker run -p 27017:27017 --name some-mongo -d mongo
docker build --tag=mytnt .
docker run --name mytnt-inst -p 3301:3301 -d mytnt
docker exec -t -i mytnt-inst console
================================================
FILE: 6-databases/tcache/cache.go
================================================
package main
import (
"encoding/json"
"fmt"
"reflect"
"strconv"
"time"
"github.com/bradfitz/gomemcache/memcache"
)
type CacheItem struct {
Data json.RawMessage
Tags map[string]int
}
type CacheItemStore struct {
Data interface{}
Tags map[string]int
}
type RebuildFunc func() (interface{}, []string, error)
type TCache struct {
*memcache.Client
}
func (tc *TCache) TGet(
mkey string,
ttl int32,
in interface{},
rebuildCb RebuildFunc,
) (err error) {
inKind := reflect.ValueOf(in).Kind()
if inKind != reflect.Ptr {
return fmt.Errorf("in must be ptr, got %s", inKind)
}
tc.checkLock(mkey)
itemRaw, err := tc.Get(mkey)
if err == memcache.ErrCacheMiss {
fmt.Println("Record not found in memcache")
return tc.rebuild(mkey, ttl, in, rebuildCb)
} else if err != nil {
return err
}
item := &CacheItem{}
err = json.Unmarshal(itemRaw.Value, &item)
if err != nil {
return err
}
tagsValid, err := tc.isTagsValid(item.Tags)
if err != nil {
return fmt.Errorf("isTagsValid error %s", err)
}
if tagsValid {
err = json.Unmarshal(item.Data, &in)
return err
}
return tc.rebuild(mkey, ttl, in, rebuildCb)
}
func (tc *TCache) isTagsValid(itemTags map[string]int) (bool, error) {
tags := make([]string, 0, len(itemTags))
for tagKey := range itemTags {
tags = append(tags, tagKey)
}
curr, err := tc.GetMulti(tags)
if err != nil {
return false, err
}
currentTagsMap := make(map[string]int, len(curr))
for tagKey, tagItem := range curr {
i, err := strconv.Atoi(string(tagItem.Value))
if err != nil {
return false, err
}
currentTagsMap[tagKey] = i
}
return reflect.DeepEqual(itemTags, currentTagsMap), nil
}
func (tc *TCache) rebuild(
mkey string,
ttl int32,
in interface{},
rebuildCb RebuildFunc,
) error {
tc.lockRebuild(mkey)
defer tc.unlockRebuild(mkey)
result, tags, err := rebuildCb()
// ожидаем и возвращаем одинаковые типы
if reflect.TypeOf(result) != reflect.TypeOf(in) {
return fmt.Errorf(
"data type mismatch, expected %s, got %s", reflect.TypeOf(in),
reflect.TypeOf(result),
)
}
currTags, err := tc.getCurrentItemTags(tags, ttl)
if err != nil {
return err
}
cacheData := CacheItemStore{result, currTags}
rawData, err := json.Marshal(cacheData)
if err != nil {
return err
}
err = tc.Set(&memcache.Item{
Key: mkey,
Value: rawData,
Expiration: int32(ttl),
})
inVal := reflect.ValueOf(in)
resultVal := reflect.ValueOf(result)
rv := reflect.Indirect(inVal)
rvpresult := reflect.Indirect(resultVal)
rv.Set(rvpresult) // *in = *result
return nil
}
func (tc *TCache) checkLock(mkey string) error {
for i := 0; i < 4; i++ {
_, err := tc.Get("lock_" + mkey)
if err == memcache.ErrCacheMiss {
return nil
}
if err != nil {
return err
}
time.Sleep(10 * time.Millisecond)
}
return nil
}
func (tc *TCache) lockRebuild(mkey string) (bool, error) {
// пытаемся взять лок на перестроение кеша
// чтобы все не ломанулись его перестраивать
// параметры надо тюнить
lockKey := "lock_" + mkey
lockAccuired := false
for i := 0; i < 4; i++ {
// add добавляет запись если её ещё нету
err := tc.Add(&memcache.Item{
Key: lockKey,
Value: []byte("1"),
Expiration: int32(3),
})
if err == memcache.ErrNotStored {
fmt.Println("get lock try", i)
time.Sleep(time.Millisecond * 10)
continue
} else if err != nil {
return false, err
}
lockAccuired = true
break
}
if !lockAccuired {
return false, fmt.Errorf("Can't get lock")
}
return true, nil
}
func (tc *TCache) unlockRebuild(mkey string) {
tc.Delete("lock_" + mkey)
}
func (tc *TCache) getCurrentItemTags(tags []string, ttl int32) (map[string]int, error) {
currTags, err := tc.GetMulti(tags)
if err != nil {
return nil, err
}
resultTags := make(map[string]int, len(tags))
now := int(time.Now().Unix())
nowBytes := []byte(fmt.Sprint(now))
for _, tagKey := range tags {
tagItem, tagExist := currTags[tagKey]
if !tagExist {
err := tc.Set(&memcache.Item{
Key: tagKey,
Value: nowBytes,
Expiration: int32(ttl),
})
if err != nil {
return nil, err
}
resultTags[tagKey] = now
} else {
i, err := strconv.Atoi(string(tagItem.Value))
if err != nil {
return nil, err
}
resultTags[tagKey] = i
}
}
return resultTags, nil
}
================================================
FILE: 6-databases/tcache/main.go
================================================
package main
import (
"fmt"
"github.com/bradfitz/gomemcache/memcache"
)
/*
type TCache struct {
*memcache.Client
}
*/
func main() {
MemcachedAddresses := []string{"127.0.0.1:11211"}
memcacheClient := memcache.New(MemcachedAddresses...)
tc := &TCache{memcacheClient}
mkey := "habrposts"
tc.Delete(mkey)
rebuild := func() (interface{}, []string, error) {
habrPosts, err := GetHabrPosts()
if err != nil {
return nil, nil, err
}
return habrPosts, []string{"habrTag", "geektimes"}, nil
}
fmt.Println("\nTGet call #1")
posts := RSS{}
err := tc.TGet(mkey, 30, &posts, rebuild)
fmt.Println("#1", len(posts.Items), "err:", err)
fmt.Println("\nTGet call #2")
posts = RSS{}
err = tc.TGet(mkey, 30, &posts, rebuild)
fmt.Println("#2", len(posts.Items), "err:", err)
fmt.Println("\ninc tag habrTag")
tc.Increment("habrTag", 1)
go func() {
// time.Sleep(time.Millisecond)
fmt.Println("\nTGet call #async")
posts = RSS{}
err = tc.TGet(mkey, 30, &posts, rebuild)
fmt.Println("#async", len(posts.Items), "err:", err)
}()
fmt.Println("\nTGet call #3")
posts = RSS{}
err = tc.TGet(mkey, 30, &posts, rebuild)
fmt.Println("#3", len(posts.Items), "err:", err)
}
================================================
FILE: 6-databases/tcache/posts.go
================================================
package main
import (
"encoding/xml"
"fmt"
"io/ioutil"
"net/http"
)
type RSS struct {
Items []Item `xml:"channel>item"`
}
type Item struct {
URL string `xml:"guid"`
Title string `xml:"title"`
}
func GetHabrPosts() (*RSS, error) {
fmt.Println("fetching https://habrahabr.ru/rss/best/")
resp, err := http.Get("https://habrahabr.ru/rss/best/")
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
rss := new(RSS)
err = xml.Unmarshal(body, rss)
if err != nil {
return nil, err
}
return rss, nil
}
================================================
FILE: 7-security/1_passwords/0_password.txt
================================================
john 1234
bob 12345
john 81dc9bdb52d04dc20036dbd8313ed055
bob 827ccb0eea8a706c4c34a16891f84e7b
alice 81dc9bdb52d04dc20036dbd8313ed055
john 123_ad90103a6daa2d46f6ca32753f5bd8cd
bob 234_876b13777d05743fca744018f8c82ef7
alice 789_0c01c17a759578ba5a956a18acd54c9b
md5(salt + _ + password)
-> reg password
-> md5(salt + _ + password)
-> db
-> login password
-> md5(salt + _ + password)
<- db hash + salt
? ==
email - pass:
k.kitsuragi@mail.ru - e10adc3949ba59abbe56e057f20f883e
h.dubois@mail.ru - d8578edf8458ce06fbc5bb76a58c5ca4
...
================================================
FILE: 7-security/1_passwords/1_salt.go
================================================
package main
import (
"bytes"
"crypto/rand"
"fmt"
"golang.org/x/crypto/argon2"
)
func hashPass(salt []byte, plainPassword string) []byte {
hashedPass := argon2.IDKey([]byte(plainPassword), []byte(salt), 1, 64*1024, 4, 32)
return append(salt, hashedPass...)
// [salt] + [pass_hash]
}
func checkPass(passHash []byte, plainPassword string) bool {
salt := make([]byte, 8)
copy(salt, passHash[:8])
userPassHash := hashPass(salt, plainPassword)
return bytes.Equal(userPassHash, passHash)
}
func passExample() {
pass := "love"
// reg
salt := make([]byte, 8)
rand.Read(salt)
fmt.Printf("salt: %x\n", salt)
hashedPass := hashPass(salt, pass)
fmt.Printf("hashedPass: %x\n", hashedPass)
// login
passValid := checkPass(hashedPass, pass)
fmt.Printf("passValid: %v\n", passValid)
}
// func main() {
// for i := 0; i < 3; i++ {
// fmt.Println("\titeration", i)
// passExample()
// }
// }
================================================
FILE: 7-security/1_passwords/2_pass.go
================================================
package main
import (
"crypto/md5"
"crypto/sha1"
"fmt"
"golang.org/x/crypto/argon2"
"golang.org/x/crypto/bcrypt"
"golang.org/x/crypto/pbkdf2"
"golang.org/x/crypto/scrypt"
)
var (
plainPassword = []byte("qwerty123456")
// соль должна быть для каждого юзера своя, не используте в таком виде
salt = []byte{0xd7, 0xc2, 0xf2, 0x51, 0xaa, 0x6a, 0x4e, 0x7b}
)
// md5 - плохой вариант, подвержен брутфорс-атаке
func PasswordMD5(plainPassword []byte) []byte {
return md5.New().Sum(plainPassword)
}
// bcrypt where PBKDF2 or scrypt support is not available.
func PasswordBcrypt(plainPassword []byte) []byte {
passBcrypt, _ := bcrypt.GenerateFromPassword(plainPassword, 7)
return passBcrypt
}
// PBKDF2 when FIPS certification or enterprise support on many platforms is required;
func PasswordPBKDF2(plainPassword []byte) []byte {
return pbkdf2.Key(plainPassword, salt, 4096, 32, sha1.New)
}
// scrypt where resisting any/all hardware accelerated attacks is necessary but support isn’t.
func PasswordScrypt(plainPassword []byte) []byte {
passScrypt, _ := scrypt.Key(plainPassword, salt, 1<<15, 8, 1, 32)
return passScrypt
}
// Argon2 is the winner of the password hashing competition and should be considered as your first choice for new applications;
func PasswordArgon2(plainPassword []byte) []byte {
return argon2.IDKey(plainPassword, salt, 1, 64*1024, 4, 32)
}
// https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Password_Storage_Cheat_Sheet.md
// https://cheatsheetseries.owasp.org
func main() {
fmt.Printf("PasswordMD5: %x\n", PasswordMD5(plainPassword))
fmt.Printf("PasswordBcrypt: %x\n", PasswordBcrypt(plainPassword))
fmt.Printf("PasswordBcrypt2: %x\n", PasswordBcrypt(plainPassword))
fmt.Printf("PasswordPBKDF2: %x\n", PasswordPBKDF2(plainPassword))
fmt.Printf("PasswordScrypt: %x\n", PasswordScrypt(plainPassword))
fmt.Printf("PasswordArgon2: %x\n", PasswordArgon2(plainPassword))
}
================================================
FILE: 7-security/1_passwords/2_pass_bench_test.go
================================================
package main
import (
"testing"
)
// go test -bench . -benchmem pass.go pass_bench_test.go
func BenchmarkMD5(b *testing.B) {
for i := 0; i < b.N; i++ {
PasswordMD5(plainPassword)
}
}
func BenchmarkBcrypt(b *testing.B) {
for i := 0; i < b.N; i++ {
PasswordBcrypt(plainPassword)
}
}
func BenchmarkPBKDF2(b *testing.B) {
for i := 0; i < b.N; i++ {
PasswordPBKDF2(plainPassword)
}
}
func BenchmarkScrypt(b *testing.B) {
for i := 0; i < b.N; i++ {
PasswordScrypt(plainPassword)
}
}
func BenchmarkArgon2(b *testing.B) {
for i := 0; i < b.N; i++ {
PasswordArgon2(plainPassword)
}
}
================================================
FILE: 7-security/2_csrf/csrf.go
================================================
// CSRF - это выполнение какие-то действий на сайте от имени другого пользователя
// данный пример ИСКУССТВЕННЫЙ, чтобы показать как проявляется CSRF
// используйте пакет html/template
// он автоматичски экранирует все входящие данные с учетом контекста
// подрбонее https://golang.org/pkg/html/template/
package main
import (
"net/http"
// "html/template"
"fmt"
"math/rand"
"strconv"
"text/template" // надо заменить text/template на html/template чтобы по-умоллчанию было правильное экранирование
"time"
)
var sessions = map[string]string{}
var cnt = 1
type Msg struct {
ID int
Message string
Rating int
}
var messages = map[int]*Msg{}
var loginFormTmplRaw = `
`
var messagesTmpl = `
<img src="/rate?id=1&vote=up">
{{range $idx, $var := .Messages}}
{{$var.Rating}}
{{$var.Message}}
{{end}}
`
// https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html
func main() {
tmpl := template.New("main")
tmpl, _ = tmpl.Parse(messagesTmpl)
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if !checkSession(r) {
w.Write([]byte(loginFormTmplRaw))
return
}
//выводим комментарии + форму отправки
tmpl.Execute(w, struct {
Messages map[int]*Msg
}{
Messages: messages,
})
})
// добавление комментария
// добавим комментарий c текстом
/*
*/
// это выведет на экран куки сайта. дальше с ними можно сделать всё что угодно - например отправить ан внешний сервис, который с сессией этого юзера будет слать спам пока может
http.HandleFunc("/comment", func(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
commentText := r.FormValue("comment")
id := cnt
messages[id] = &Msg{
ID: id,
Message: commentText,
Rating: 0,
}
cnt++
http.Redirect(w, r, "/", http.StatusFound)
})
// функция для изменения рейтинга
// тут происхрдит CSRF т.к. api.myproj.com/csrf
-> referrer? -> jwt token
front -> POST api.myproj.com/pay + token
//--
front -> GET api.myproj.com/api/user
-> Set-Cookie: csrf=kldjflckdhsfbilehroiw4hrkj34btf domain=.myproj.com expires=in 15 min
-> POST api.myproj.com/pay X-CSRF-Token: getCookie('csrf')
header == cookie
================================================
FILE: 7-security/3_csrf_token/csrf.go
================================================
// CSRF - это выполнение какие-то действий на сайте от имени другого пользователя
// данный пример ИСКУССТВЕННЫЙ, чтобы показать как проявляется CSRF
// используйте пакет html/template
// он автоматичски экранирует все входящие данные с учетом контекста
// подрбонее https://golang.org/pkg/html/template/
package main
import (
"net/http"
// "html/template"
"fmt"
"log"
"math/rand"
"strconv"
"text/template" // надо заменить text/template на html/template чтобы по-умоллчанию было правильное экранирование
"time"
)
var sessions = map[string]*Session{}
var cnt = 1
type Msg struct {
ID int
Message string
Rating int
}
type Session struct {
UserID uint32
ID string
}
var messages = map[int]*Msg{}
var loginFormTmplRaw = `
`
var messagesTmpl = `
<img src="/rate?id=1&vote=up">
{{range $idx, $var := .Messages}}
{{$var.Rating}}
{{$var.Message}}
{{end}}
`
func main() {
tmpl := template.New("main")
tmpl, _ = tmpl.Parse(messagesTmpl)
// tokens, _ := NewHMACHashToken("golangcourse") //только хеш фиксированных данных
// tokens, _ := NewAesCryptHashToken("qsRY2e4hcM5T7X984E9WQ5uZ8Nty7fxB") // можно еще че-то хранить и шифровать. без расшифровки не видно
tokens, _ := NewJwtToken("qsRY2e4hcM5T7X984E9WQ5uZ8Nty7fxB") // можно так же че-то хранить и подписывать. видно, но нельзя подделать
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
sess, err := checkSession(r)
if err != nil {
w.Write([]byte(loginFormTmplRaw))
return
}
token, err := tokens.Create(sess, time.Now().Add(24*time.Hour).Unix())
if err != nil {
log.Println("csrf token creation error:", err)
http.Error(w, "internal error", http.StatusInternalServerError)
return
}
//выводим комментарии + форму отправки
tmpl.Execute(w, struct {
Messages map[int]*Msg
CSRFToken string
}{
Messages: messages,
CSRFToken: token,
})
})
// добавление комментария
// добавим комментарий c текстом
/*
*/
// это выведет на экран куки сайта. дальше с ними можно сделать всё что угодно - например отправить ан внешний сервис, который с сессией этого юзера будет слать спам пока может
http.HandleFunc("/comment", func(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
sess, err := checkSession(r)
if err != nil || r.Method == http.MethodGet {
w.Write([]byte(loginFormTmplRaw))
return
}
CSRFToken := r.FormValue("csrf-token")
_, err = tokens.Check(sess, CSRFToken)
if err != nil {
w.Write([]byte("{}"))
return
}
commentText := r.FormValue("comment")
id := cnt
messages[id] = &Msg{
ID: id,
Message: commentText,
Rating: 0,
}
cnt++
http.Redirect(w, r, "/", http.StatusFound)
})
// функция для изменения рейтинга
// тут происхрдит CSRF т.к. payload.Exp {
secret = key.Secret
break
}
}
if secret == "" {
return nil, fmt.Errrof("no secret found")
}
return secret, nil
}
*/
// https://specialistoff.net/page/902
================================================
FILE: 7-security/3_csrf_token/tokjen_hash.go
================================================
package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"fmt"
"strconv"
"strings"
"time"
)
// fbc1fd86ab53d52c3ffeb6529aea9676e14bc52b792414c32f5612b4eb2c9745:1567618546
// JSv5M7FZ5iPHnHiLXR1QbhnMcdoY/wvEae4a76KrGBxeHruFb1S90d4GkwsoQQU4R1zqEdSa0KMGflriF2dHj5XWm4Zp6OBxLp6BJFUhqpQxEBEr5yl4sxEHadgssvVWfWtDKe0bENU=
// JSv5M7FZ5iPHnHiLXR1QbhnMcDAU/wvEae4a76KrGBxeHruFb1S90d4GkwsoQQU4R1zqEdSa0KMGflriF2dHj5XWm4Zp6OBxLp6BJFUhqpQxEBEr5yl4sxEHadgssvVWfWtDKe0bENU=
// JSv5M7FZ5iPHnHiLXR1QbhnMcNEF/wvEae4a76KrGBxeHruFb1S90d4GkwsoQQU4R1zqEdSa0KMGflriF2dHj5XWm4Zp6OBxLp6BJFUhqpQxEBEr5yl4sxEHadgssvVWfWtDKe0bENU=
type HashToken struct {
Secret []byte
}
func NewHMACHashToken(secret string) (*HashToken, error) {
return &HashToken{Secret: []byte(secret)}, nil
}
func (tk *HashToken) Create(s *Session, tokenExpTime int64) (string, error) {
h := hmac.New(sha256.New, []byte(tk.Secret))
data := fmt.Sprintf("%s:%d:%d", s.ID, s.UserID, tokenExpTime)
h.Write([]byte(data))
token := hex.EncodeToString(h.Sum(nil)) + ":" + strconv.FormatInt(tokenExpTime, 10)
return token, nil
}
func (tk *HashToken) Check(s *Session, inputToken string) (bool, error) {
tokenData := strings.Split(inputToken, ":")
if len(tokenData) != 2 {
return false, fmt.Errorf("bad token data")
}
tokenExp, err := strconv.ParseInt(tokenData[1], 10, 64)
if err != nil {
return false, fmt.Errorf("bad token time")
}
if tokenExp < time.Now().Unix() {
return false, fmt.Errorf("token expired")
}
h := hmac.New(sha256.New, []byte(tk.Secret))
data := fmt.Sprintf("%s:%d:%d", s.ID, s.UserID, tokenExp)
h.Write([]byte(data))
expectedMAC := h.Sum(nil)
messageMAC, err := hex.DecodeString(tokenData[0])
if err != nil {
return false, fmt.Errorf("cand hex decode token")
}
return hmac.Equal(messageMAC, expectedMAC), nil
}
================================================
FILE: 7-security/4_xss/xss.go
================================================
// XSS - это внедрение вредоносного кода там где мы не ожидаем
// например в комменте пишем JS, который будет выполняться для всех пользователей, читающих его
// опасность заключается в том, что злоумышленник может вызывать от имени юзера какие-то методы
// например отправка спама от его имени или кража сессии
// лечится правильным экранированием всех внешних входных данных по отношению к сайту (в первую очередь - пользовательского ввода)
// данный пример ИСКУССТВЕННЫЙ, чтобы показать как проявляется XSS
// используйте пакет html/template
// он автоматичски экранирует все входящие данные с учетом контекста
// подрбонее https://golang.org/pkg/html/template/
package main
import (
"fmt"
"html/template"
"math/rand"
"net/http"
// "text/template"
"time"
)
var sessions = map[string]string{}
var messages = []string{"Hello World"}
var loginFormTmplRaw = `
`
var messagesTmpl = `
<script>alert(document.cookie)</script>