package interpolation import "reflect" // String values in maps are not addressable and therefore not settable // through Go's reflection mechanism. This interface solves this limitation // by wrapping the setter differently for addressable values and map values. type setter interface { Set(string) } type nilSetter struct{} func (nilSetter) Set(_ string) { panic("nil setter") } type anySetter struct { rv reflect.Value } func (s anySetter) Set(str string) { s.rv.SetString(str) } type mapSetter struct { // map[string]string m reflect.Value // key k reflect.Value } func (s mapSetter) Set(str string) { s.m.SetMapIndex(s.k, reflect.ValueOf(str)) } type getter interface { Get() string } type anyGetter struct { rv reflect.Value } func (g anyGetter) Get() string { return g.rv.String() }