mirror of
https://github.com/rclone/rclone.git
synced 2024-12-26 08:58:58 +01:00
87 lines
2.0 KiB
Go
87 lines
2.0 KiB
Go
|
// Package configmap provides an abstraction for reading and writing config
|
||
|
package configmap
|
||
|
|
||
|
// Getter provides an interface to get config items
|
||
|
type Getter interface {
|
||
|
// Get should get an item with the key passed in and return
|
||
|
// the value. If the item is found then it should return true,
|
||
|
// otherwise false.
|
||
|
Get(key string) (value string, ok bool)
|
||
|
}
|
||
|
|
||
|
// Setter provides an interface to set config items
|
||
|
type Setter interface {
|
||
|
// Set should set an item into persistent config store.
|
||
|
Set(key, value string)
|
||
|
}
|
||
|
|
||
|
// Mapper provides an interface to read and write config
|
||
|
type Mapper interface {
|
||
|
Getter
|
||
|
Setter
|
||
|
}
|
||
|
|
||
|
// Map provides a wrapper around multiple Setter and
|
||
|
// Getter interfaces.
|
||
|
type Map struct {
|
||
|
setters []Setter
|
||
|
getters []Getter
|
||
|
}
|
||
|
|
||
|
// New returns an empty Map
|
||
|
func New() *Map {
|
||
|
return &Map{}
|
||
|
}
|
||
|
|
||
|
// AddGetter appends a getter onto the end of the getters
|
||
|
func (c *Map) AddGetter(getter Getter) *Map {
|
||
|
c.getters = append(c.getters, getter)
|
||
|
return c
|
||
|
}
|
||
|
|
||
|
// AddGetters appends multiple getters onto the end of the getters
|
||
|
func (c *Map) AddGetters(getters ...Getter) *Map {
|
||
|
c.getters = append(c.getters, getters...)
|
||
|
return c
|
||
|
}
|
||
|
|
||
|
// AddSetter appends a setter onto the end of the setters
|
||
|
func (c *Map) AddSetter(setter Setter) *Map {
|
||
|
c.setters = append(c.setters, setter)
|
||
|
return c
|
||
|
}
|
||
|
|
||
|
// Get gets an item with the key passed in and return the value from
|
||
|
// the first getter. If the item is found then it returns true,
|
||
|
// otherwise false.
|
||
|
func (c *Map) Get(key string) (value string, ok bool) {
|
||
|
for _, do := range c.getters {
|
||
|
value, ok = do.Get(key)
|
||
|
if ok {
|
||
|
return value, ok
|
||
|
}
|
||
|
}
|
||
|
return "", false
|
||
|
}
|
||
|
|
||
|
// Set sets an item into all the stored setters.
|
||
|
func (c *Map) Set(key, value string) {
|
||
|
for _, do := range c.setters {
|
||
|
do.Set(key, value)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Simple is a simple Mapper for testing
|
||
|
type Simple map[string]string
|
||
|
|
||
|
// Get the value
|
||
|
func (c Simple) Get(key string) (value string, ok bool) {
|
||
|
value, ok = c[key]
|
||
|
return value, ok
|
||
|
}
|
||
|
|
||
|
// Set the value
|
||
|
func (c Simple) Set(key, value string) {
|
||
|
c[key] = value
|
||
|
}
|