Documentation
¶
Overview ¶
Tools to manipulate string config key-values
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func EnumProcessor ¶ added in v0.14.1
func EnumProcessor(enums []string) *enumProcessor
func IntProcessor ¶
func StringProcessor ¶
func StringProcessor(minLength, maxLength int) *stringProcessor
Types ¶
type Interface ¶
type Interface interface {
// register config key
//
// duplicated key not allowed
//
// default string value must be valid to ValueProcessor
RegisterKey(key string, defaultValue string, v ValueProcessor) error
// deregister config key, noop if key doesn't exist
DeregisterKey(key string)
// batch update config key-values
//
// key must be registered before
BatchUpdate(kvStrs []*KVStr) []*KVError
// update config key-value and persist.
// ValueProcessor will handle string value
Update(key string, value string) *KVError
// update config key-value but do not persist.
// ValueProcessor will handle string value
UpdateNoPersist(key string, value string) *KVError
// batch get config key-values
//
// if key doesn't exist, no error will return
BatchGetValues(keys []string) []*KV
// batch get config key-value strings
//
// if key doesn't exist, no error will return
BatchGetValueString(keys []string) []*KVStr
// get config key-value
//
// panic if key doesn't exist
MustGetValue(key string) interface{}
// get config key-value string
//
// panic if key doesn't exist
MustGetValueString(key string) string
// get config key-value
//
// if key doesn't exist, return nil, false
GetValue(key string) (v interface{}, hit bool)
// get config key-value string
//
// if key doesn't exist, return nil, false
GetValueString(key string) (v string, hit bool)
// reset key's current value to default value
ResetKey(key string)
}
TODO write examples A interface to manage config key-values
func NewStore ¶
func NewStore(persister Persister, policy LoadPolicy) Interface
type KVError ¶
type LoadPolicy ¶
type LoadPolicy interface {
// decide how to load config key-values from Persister into Interface
DoLoad(s Interface, p Persister) error
}
var ( NoopLoadPolicy LoadPolicy = &noopLoadPolicy{} // Never load config key-values from Persister to Interface SimpleLoadPolicy = NewSimpleLoadPolicy() // Load config key-values from Persister immediately )
func NewLoadPolicy ¶
func NewLoadPolicy(minInterval time.Duration) LoadPolicy
Create a default load policy that load config key-values from Persister only when last load timestamp is `minInterval` before current time.
This implementation protect underlying Persister from being queried too often
func NewSimpleLoadPolicy ¶
func NewSimpleLoadPolicy() LoadPolicy
type Persister ¶
type Persister interface {
// load config key-values from underlying persistence layer into Interface
Load(s Interface) error
// persist config key-value
Save(key, value string) error
// batch persist config key-values
BatchSave([]*KVStr) error
// delete config key from underlying persistence layer
Delete(key string) error
}
config key persistence layer
var (
NoopPersister Persister = &noopPersister{} // Never persist config key-values
)
type ValueProcessor ¶
type ValueProcessor interface {
Validate(value string) (ok bool, err string)
Convert(value string) interface{}
}
used to validate string value and convert string value to specific type
var ( String ValueProcessor = StringProcessor(0, math.MaxInt32) Bool ValueProcessor = &boolProcessor{} Int ValueProcessor = IntProcessor(math.MinInt32, true, math.MaxInt32, true) IntGtZero ValueProcessor = IntProcessor(0, false, math.MaxInt32, true) IntGtEqZero ValueProcessor = IntProcessor(0, true, math.MaxInt32, true) Duration ValueProcessor = &durationProcessor{} Url ValueProcessor = &urlProcessor{} UrlString ValueProcessor = &urlStringProcessor{} CssColorHex ValueProcessor = &cssColorHex{} RsaPrivateKeyPkcs1 ValueProcessor = &rsaPrivateKeyPkcs1{} RsaPublicKey ValueProcessor = &rsaPublicKey{} )
Click to show internal directories.
Click to hide internal directories.