gitech
1// Copyright 2021 The Gitea Authors. All rights reserved.
2// SPDX-License-Identifier: MIT
3
4package util
5
6import "reflect"
7
8// PaginateSlice cut a slice as per pagination options
9// if page = 0 it do not paginate
10func PaginateSlice(list any, page, pageSize int) any {
11if page <= 0 || pageSize <= 0 {
12return list
13}
14if reflect.TypeOf(list).Kind() != reflect.Slice {
15return list
16}
17
18listValue := reflect.ValueOf(list)
19
20page--
21
22if page*pageSize >= listValue.Len() {
23return listValue.Slice(listValue.Len(), listValue.Len()).Interface()
24}
25
26listValue = listValue.Slice(page*pageSize, listValue.Len())
27
28if listValue.Len() > pageSize {
29return listValue.Slice(0, pageSize).Interface()
30}
31
32return listValue.Interface()
33}
34