Commit c0a0cde9 authored by rht's avatar rht

Config: allow to set maps on null value

Also, now, if ipfs config foo.bar has value of anything that is not map (0, "0", 0.1),
then ipfs config foo.bar.baz now returns an error instead of a panic

License: MIT
Signed-off-by: default avatarrht <rhtbot@gmail.com>
parent afbdedb4
......@@ -7,12 +7,20 @@ import (
func MapGetKV(v map[string]interface{}, key string) (interface{}, error) {
var ok bool
var mcursor map[string]interface{}
var cursor interface{} = v
parts := strings.Split(key, ".")
for i, part := range parts {
cursor, ok = cursor.(map[string]interface{})[part]
sofar := strings.Join(parts[:i], ".")
mcursor, ok = cursor.(map[string]interface{})
if !ok {
return nil, fmt.Errorf("%s key is not a map", sofar)
}
cursor, ok = mcursor[part]
if !ok {
sofar := strings.Join(parts[:i], ".")
return nil, fmt.Errorf("%s key has no attributes", sofar)
}
}
......@@ -39,7 +47,7 @@ func MapSetKV(v map[string]interface{}, key string, value interface{}) error {
}
cursor, ok = mcursor[part]
if !ok { // create map if this is empty
if !ok || cursor == nil { // create map if this is empty or is null
mcursor[part] = map[string]interface{}{}
cursor = mcursor[part]
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment