Skip to content Search Apps Documentation Source Content File Folder Download Copy Actions State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

Community realm. Read the code first. Community realm, deployed by its author. Read the code before you interact or send coins.

query_options.gno

1.24 Kb · 55 lines
 1package datastore
 2
 3import (
 4	"errors"
 5	"strings"
 6)
 7
 8var (
 9	ErrEmptyQueryIndexName = errors.New("query index name is empty")
10	ErrInvalidQueryOffset  = errors.New("minimum allowed query offset is 0")
11	ErrInvalidQuerySize    = errors.New("minimum allowed query size is 1")
12)
13
14// QueryOption configures queries.
15type QueryOption func(*Query) error
16
17// WithOffset assigns the offset or position of the first record that query must return.
18// The minimum allowed offset is 0.
19func WithOffset(offset int) QueryOption {
20	return func(q *Query) error {
21		if offset < 0 {
22			return ErrInvalidQueryOffset
23		}
24
25		q.offset = offset
26		return nil
27	}
28}
29
30// WithSize assigns the maximum number of records that query can return.
31// The minimum allowed size is 1.
32func WithSize(size int) QueryOption {
33	return func(q *Query) error {
34		if size < 1 {
35			return ErrInvalidQuerySize
36		}
37
38		q.size = size
39		return nil
40	}
41}
42
43// UseIndex assigns the index that the query must use to get the records.
44// Using an index requires a key value to locate the records within the index.
45func UseIndex(name, key string) QueryOption {
46	return func(q *Query) error {
47		q.indexName = strings.TrimSpace(name)
48		if q.indexName == "" {
49			return ErrEmptyQueryIndexName
50		}
51
52		q.indexKey = key
53		return nil
54	}
55}