gen_bug.go

 1// This file was automatically generated by genny.
 2// Any changes will be lost if this file is regenerated.
 3// see https://github.com/cheekybits/genny
 4
 5package connections
 6
 7import (
 8	"fmt"
 9
10	"github.com/MichaelMure/git-bug/graphql/models"
11)
12
13type StringEdger func(value string, offset int) Edge
14
15type StringConMaker func(
16	edges []LazyBugEdge,
17	nodes []string,
18	info models.PageInfo,
19	totalCount int) (models.BugConnection, error)
20
21func StringCon(source []string, edger StringEdger, conMaker StringConMaker, input models.ConnectionInput) (models.BugConnection, error) {
22	var nodes []string
23	var edges []LazyBugEdge
24	var pageInfo models.PageInfo
25
26	emptyCon, _ := conMaker(edges, nodes, pageInfo, 0)
27
28	offset := 0
29
30	if input.After != nil {
31		for i, value := range source {
32			edge := edger(value, i)
33			if edge.GetCursor() == *input.After {
34				// remove all previous element including the "after" one
35				source = source[i+1:]
36				offset = i + 1
37				break
38			}
39		}
40	}
41
42	if input.Before != nil {
43		for i, value := range source {
44			edge := edger(value, i+offset)
45
46			if edge.GetCursor() == *input.Before {
47				// remove all after element including the "before" one
48				break
49			}
50
51			edges = append(edges, edge.(LazyBugEdge))
52			nodes = append(nodes, value)
53		}
54	} else {
55		edges = make([]LazyBugEdge, len(source))
56		nodes = source
57
58		for i, value := range source {
59			edges[i] = edger(value, i+offset).(LazyBugEdge)
60		}
61	}
62
63	if input.First != nil {
64		if *input.First < 0 {
65			return emptyCon, fmt.Errorf("first less than zero")
66		}
67
68		if len(edges) > *input.First {
69			// Slice result to be of length first by removing edges from the end
70			edges = edges[:*input.First]
71			nodes = nodes[:*input.First]
72			pageInfo.HasNextPage = true
73		}
74	}
75
76	if input.Last != nil {
77		if *input.Last < 0 {
78			return emptyCon, fmt.Errorf("last less than zero")
79		}
80
81		if len(edges) > *input.Last {
82			// Slice result to be of length last by removing edges from the start
83			edges = edges[len(edges)-*input.Last:]
84			nodes = nodes[len(nodes)-*input.Last:]
85			pageInfo.HasPreviousPage = true
86		}
87	}
88
89	return conMaker(edges, nodes, pageInfo, len(source))
90}