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 resolvers
6
7import (
8 "fmt"
9
10 "github.com/MichaelMure/git-bug/bug"
11)
12
13type BugCommentEdger func(value bug.Comment, offset int) Edge
14
15func BugCommentPaginate(source []bug.Comment, edger BugCommentEdger, input ConnectionInput) ([]CommentEdge, PageInfo, error) {
16 var result []CommentEdge
17 var pageInfo PageInfo
18
19 offset := 0
20
21 if input.After != nil {
22 for i, value := range source {
23 edge := edger(value, i)
24 if edge.GetCursor() == *input.After {
25 // remove all previous element including the "after" one
26 source = source[i+1:]
27 offset = i + 1
28 break
29 }
30 }
31 }
32
33 if input.Before != nil {
34 for i, value := range source {
35 edge := edger(value, i+offset)
36
37 if edge.GetCursor() == *input.Before {
38 // remove all after element including the "before" one
39 break
40 }
41
42 result = append(result, edge.(CommentEdge))
43 }
44 } else {
45 result = make([]CommentEdge, len(source))
46
47 for i, value := range source {
48 result[i] = edger(value, i+offset).(CommentEdge)
49 }
50 }
51
52 if input.First != nil {
53 if *input.First < 0 {
54 return nil, PageInfo{}, fmt.Errorf("first less than zero")
55 }
56
57 if len(result) > *input.First {
58 // Slice result to be of length first by removing edges from the end
59 result = result[:*input.First]
60 pageInfo.HasNextPage = true
61 }
62 }
63
64 if input.Last != nil {
65 if *input.Last < 0 {
66 return nil, PageInfo{}, fmt.Errorf("last less than zero")
67 }
68
69 if len(result) > *input.Last {
70 // Slice result to be of length last by removing edges from the start
71 result = result[len(result)-*input.Last:]
72 pageInfo.HasPreviousPage = true
73 }
74 }
75
76 return result, pageInfo, nil
77}
78
79// Apply the before/after cursor params to the source and return an array of edges
80//func ApplyCursorToEdges(source []interface{}, edger Edger, input ConnectionInput) []Edge {
81// var result []Edge
82//
83// if input.After != nil {
84// for i, value := range source {
85// edge := edger(value)
86// if edge.Cursor() == *input.After {
87// // remove all previous element including the "after" one
88// source = source[i+1:]
89// break
90// }
91// }
92// }
93//
94// if input.Before != nil {
95// for _, value := range source {
96// edge := edger(value)
97//
98// if edge.Cursor() == *input.Before {
99// // remove all after element including the "before" one
100// break
101// }
102//
103// result = append(result, edge)
104// }
105// } else {
106// result = make([]Edge, len(source))
107//
108// for i, value := range source {
109// result[i] = edger(value)
110// }
111// }
112//
113// return result
114//}
115
116// Apply the first/last cursor params to the edges
117//func EdgesToReturn(edges []Edge, input ConnectionInput) ([]Edge, PageInfo, error) {
118// hasPreviousPage := false
119// hasNextPage := false
120//
121// if input.First != nil {
122// if *input.First < 0 {
123// return nil, nil, fmt.Errorf("first less than zero")
124// }
125//
126// if len(edges) > *input.First {
127// // Slice result to be of length first by removing edges from the end
128// edges = edges[:*input.First]
129// hasNextPage = true
130// }
131// }
132//
133// if input.Last != nil {
134// if *input.Last < 0 {
135// return nil, nil, fmt.Errorf("last less than zero")
136// }
137//
138// if len(edges) > *input.Last {
139// // Slice result to be of length last by removing edges from the start
140// edges = edges[len(edges)-*input.Last:]
141// hasPreviousPage = true
142// }
143// }
144//
145// pageInfo := PageInfo{
146// HasNextPage: hasNextPage,
147// HasPreviousPage: hasPreviousPage,
148// }
149//
150// return edges, pageInfo, nil
151//}
152
153//func EdgesToReturn(allEdges []Edge, before *cursor, after *cursor, first *int, last *int) ([]Edge, error) {
154// result := ApplyCursorToEdges(allEdges, before, after)
155//
156// if first != nil {
157// if *first < 0 {
158// return nil, fmt.Errorf("first less than zero")
159// }
160//
161// if len(result) > *first {
162// // Slice result to be of length first by removing edges from the end
163// result = result[:*first]
164// }
165// }
166//
167// if last != nil {
168// if *last < 0 {
169// return nil, fmt.Errorf("last less than zero")
170// }
171//
172// if len(result) > *last {
173// // Slice result to be of length last by removing edges from the start
174// result = result[len(result)-*last:]
175// }
176// }
177//
178// return result, nil
179//}
180
181//func ApplyCursorToEdges(allEdges []Edge, before *cursor, after *cursor) []Edge {
182// result := allEdges
183//
184// if after != nil {
185// for i, edge := range result {
186// if edge.Cursor() == *after {
187// // remove all previous element including the "after" one
188// result = result[i+1:]
189// break
190// }
191// }
192// }
193//
194// if before != nil {
195// for i, edge := range result {
196// if edge.Cursor() == *before {
197// // remove all after element including the "before" one
198// result = result[:i]
199// }
200// }
201// }
202//
203// return result
204//}
205
206//func HasPreviousPage(allEdges []Edge, before *cursor, after *cursor, last *int) bool {
207// if last != nil {
208// edges := ApplyCursorToEdges(allEdges, before, after)
209// return len(edges) > *last
210// }
211//
212// // TODO: handle "after", but according to the spec it's ok to return false
213//
214// return false
215//}
216//
217//func HasNextPage(allEdges []Edge, before *cursor, after *cursor, first *int) bool {
218// if first != nil {
219// edges := ApplyCursorToEdges(allEdges, before, after)
220// return len(edges) > *first
221// }
222//
223// // TODO: handle "before", but according to the spec it's ok to return false
224//
225// return false