...
1 package examplelibrary
2
3 import (
4 "context"
5
6 "google.golang.org/genproto/googleapis/example/library/v1"
7 )
8
9 type Storage struct {
10 Shelves []*library.Shelf
11 }
12
13 type ListShelvesQuery struct {
14 Offset int64
15 PageSize int32
16 }
17
18 type ListShelvesResult struct {
19 Shelves []*library.Shelf
20 HasNextPage bool
21 }
22
23 func (s *Storage) ListShelves(_ context.Context, query *ListShelvesQuery) (*ListShelvesResult, error) {
24 pageStart := int(query.Offset)
25 pageEnd := pageStart + int(query.PageSize)
26 switch {
27 case pageStart >= len(s.Shelves):
28 return &ListShelvesResult{
29 Shelves: nil,
30 HasNextPage: false,
31 }, nil
32 case pageEnd > len(s.Shelves):
33 return &ListShelvesResult{
34 Shelves: s.Shelves[pageStart:],
35 HasNextPage: false,
36 }, nil
37 default:
38 return &ListShelvesResult{
39 Shelves: s.Shelves[pageStart:pageEnd],
40 HasNextPage: true,
41 }, nil
42 }
43 }
44
View as plain text