blob: 2e311f53cb03fc78cb53eff84ec02ff6799b59f7 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package datasource
import (
"time"
)
const DefaultTimeout = 60 * time.Second
type Config struct {
}
// NewDefaultFindOpts return default options
func NewDefaultFindOpts() FindOptions {
return FindOptions{
Timeout: DefaultTimeout,
}
}
// NewDefaultWriteOptions return default options
func NewDefaultWriteOptions() WriteOptions {
return WriteOptions{
SyncEnable: false,
}
}
// NewWriteOptions return options with write option
func NewWriteOptions(option ...WriteOption) WriteOptions {
opt := WriteOptions{
SyncEnable: false,
}
for _, op := range option {
op(&opt)
}
return opt
}
// WriteOptions is option for create ,update and delete kv
type WriteOptions struct {
SyncEnable bool
}
// FindOptions is option to find key value
type FindOptions struct {
ExactLabels bool
Status string
Depth int
ID string
Key string
Labels map[string]string
LabelFormat string
ClearLabel bool
Timeout time.Duration
// Offset the offset of the response, start at 0
Offset int64
// Limit the page size of the response, dot not paging if limit=0
Limit int64
CaseSensitive bool
}
// WriteOption is functional option to create, update and delete kv
type WriteOption func(*WriteOptions)
// FindOption is functional option to find key value
type FindOption func(*FindOptions)
// WithSync indicates that the synchronization function is on
func WithSync(enabled bool) WriteOption {
return func(o *WriteOptions) {
o.SyncEnable = enabled
}
}
// WithCaseSensitive tell model service whether to match case of letters or not.
func WithCaseSensitive() FindOption {
return func(o *FindOptions) {
o.CaseSensitive = true
}
}
// WithExactLabels tell model service to return only one kv matches the labels
func WithExactLabels() FindOption {
return func(o *FindOptions) {
o.ExactLabels = true
}
}
// WithID find by kvID
func WithID(id string) FindOption {
return func(o *FindOptions) {
o.ID = id
}
}
// WithKey find by key
func WithKey(key string) FindOption {
return func(o *FindOptions) {
o.Key = key
}
}
// WithStatus enabled/disabled
func WithStatus(status string) FindOption {
return func(o *FindOptions) {
o.Status = status
}
}
// WithTimeout will return err if execution take too long
func WithTimeout(d time.Duration) FindOption {
return func(o *FindOptions) {
o.Timeout = d
}
}
// WithLabels find kv by labels
func WithLabels(labels map[string]string) FindOption {
return func(o *FindOptions) {
o.Labels = labels
}
}
// WithLabelFormat find kv by label string
func WithLabelFormat(label string) FindOption {
return func(o *FindOptions) {
o.LabelFormat = label
}
}
// WithLimit tells service paging limit
func WithLimit(l int64) FindOption {
return func(o *FindOptions) {
o.Limit = l
}
}
// WithOffset tells service paging offset
func WithOffset(os int64) FindOption {
return func(o *FindOptions) {
o.Offset = os
}
}