cosmos-sdk/orm/internal/listinternal/options.go

41 lines
725 B
Go

package listinternal
import (
"fmt"
"google.golang.org/protobuf/proto"
)
// Options is the internal list options struct.
type Options struct {
Reverse, CountTotal bool
Offset, Limit, DefaultLimit uint64
Cursor []byte
Filter func(proto.Message) bool
}
func (o Options) Validate() error {
if len(o.Cursor) != 0 {
if o.Offset > 0 {
return fmt.Errorf("can only specify one of cursor or offset")
}
}
return nil
}
type Option interface {
apply(*Options)
}
type FuncOption func(*Options)
func (f FuncOption) apply(options *Options) {
f(options)
}
func ApplyOptions(opts *Options, funcOpts []Option) {
for _, opt := range funcOpts {
opt.apply(opts)
}
}