blob: 2e4ba56268ad58861f85ab4ded36719a590c71a8 [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 kvstore
import (
"fmt"
"time"
"github.com/apache/servicecomb-service-center/datasource/etcd/state/parser"
)
type Options struct {
// Key is the prefix to unique specify resource type
Key string
InitSize int
Timeout time.Duration
Period time.Duration
DeferHandler DeferHandler
OnEvent EventFunc
Parser parser.Parser
}
func (opts *Options) String() string {
return fmt.Sprintf("{key: %s, timeout: %s, period: %s}",
opts.Key, opts.Timeout, opts.Period)
}
func (opts *Options) WithPrefix(key string) *Options {
opts.Key = key
return opts
}
func (opts *Options) WithInitSize(size int) *Options {
opts.InitSize = size
return opts
}
func (opts *Options) WithTimeout(ot time.Duration) *Options {
opts.Timeout = ot
return opts
}
func (opts *Options) WithPeriod(ot time.Duration) *Options {
opts.Period = ot
return opts
}
func (opts *Options) WithDeferHandler(h DeferHandler) *Options {
opts.DeferHandler = h
return opts
}
func (opts *Options) WithEventFunc(f EventFunc) *Options {
opts.OnEvent = f
return opts
}
func (opts *Options) AppendEventFunc(f EventFunc) *Options {
if prev := opts.OnEvent; prev != nil {
next := f
f = func(evt Event) {
prev(evt)
next(evt)
}
}
opts.OnEvent = f
return opts
}
func (opts *Options) WithParser(parser parser.Parser) *Options {
opts.Parser = parser
return opts
}
func NewOptions() *Options {
return &Options{
Key: "/",
Timeout: DefaultTimeout,
Period: time.Second,
InitSize: DefaultCacheInitSize,
Parser: parser.BytesParser,
}
}