mirror of https://github.com/perkeep/perkeep.git
jsonconfig: allow registration of other expander funcs
Change-Id: I50a1212bb0fd553336851b5f98cefcf9daa57236
This commit is contained in:
parent
7d7eb4d28e
commit
23f153da5b
|
@ -137,16 +137,32 @@ func (c *ConfigParser) recursiveReadJSON(configPath string) (decodedObject map[s
|
||||||
return decodedObject, nil
|
return decodedObject, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var regFunc = map[string]expanderFunc{}
|
||||||
|
|
||||||
|
// RegisterFunc registers a new function that may be called from JSON
|
||||||
|
// configs using an array of the form ["_name", arg0, argN...].
|
||||||
|
// The provided name must begin with an underscore.
|
||||||
|
func RegisterFunc(name string, fn func(c *ConfigParser, v []interface{}) (interface{}, error)) {
|
||||||
|
if len(name) < 2 || !strings.HasPrefix(name, "_") {
|
||||||
|
panic("illegal name")
|
||||||
|
}
|
||||||
|
if _, dup := regFunc[name]; dup {
|
||||||
|
panic("duplicate registration of " + name)
|
||||||
|
}
|
||||||
|
regFunc[name] = fn
|
||||||
|
}
|
||||||
|
|
||||||
type expanderFunc func(c *ConfigParser, v []interface{}) (interface{}, error)
|
type expanderFunc func(c *ConfigParser, v []interface{}) (interface{}, error)
|
||||||
|
|
||||||
func namedExpander(name string) (expanderFunc, bool) {
|
func namedExpander(name string) (fn expanderFunc, ok bool) {
|
||||||
switch name {
|
switch name {
|
||||||
case "_env":
|
case "_env":
|
||||||
return expanderFunc((*ConfigParser).expandEnv), true
|
return (*ConfigParser).expandEnv, true
|
||||||
case "_fileobj":
|
case "_fileobj":
|
||||||
return expanderFunc((*ConfigParser).expandFile), true
|
return (*ConfigParser).expandFile, true
|
||||||
}
|
}
|
||||||
return nil, false
|
fn, ok = regFunc[name]
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigParser) evalValue(v interface{}) (interface{}, error) {
|
func (c *ConfigParser) evalValue(v interface{}) (interface{}, error) {
|
||||||
|
|
Loading…
Reference in New Issue