From db2f217f25cf4a18b2a3e22870277bab40f90e42 Mon Sep 17 00:00:00 2001 From: Sean Chittenden Date: Thu, 9 Feb 2017 02:11:59 -0800 Subject: [PATCH] Change the signature of map writer to take a map that isn't a pointer. Force the use of `ToMap()` to retrieve the created `map[string]interface{}`. --- builtin/providers/consul/attr_writer_map.go | 16 +++++++++++----- builtin/providers/consul/utils.go | 5 ++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/builtin/providers/consul/attr_writer_map.go b/builtin/providers/consul/attr_writer_map.go index 82bab5234..1a46e54bc 100644 --- a/builtin/providers/consul/attr_writer_map.go +++ b/builtin/providers/consul/attr_writer_map.go @@ -8,10 +8,10 @@ import ( ) type _AttrWriterMap struct { - m *map[string]interface{} + m map[string]interface{} } -func _NewMapWriter(m *map[string]interface{}) *_AttrWriterMap { +func _NewMapWriter(m map[string]interface{}) *_AttrWriterMap { return &_AttrWriterMap{ m: m, } @@ -37,12 +37,12 @@ func (w *_AttrWriterMap) Set(name _SchemaAttr, v interface{}) error { } func (w *_AttrWriterMap) SetBool(name _SchemaAttr, b bool) error { - (*w.m)[string(name)] = fmt.Sprintf("%t", b) + w.m[string(name)] = fmt.Sprintf("%t", b) return nil } func (w *_AttrWriterMap) SetFloat64(name _SchemaAttr, f float64) error { - (*w.m)[string(name)] = strconv.FormatFloat(f, 'g', -1, 64) + w.m[string(name)] = strconv.FormatFloat(f, 'g', -1, 64) return nil } @@ -51,6 +51,8 @@ func (w *_AttrWriterMap) SetList(name _SchemaAttr, l []interface{}) error { } func (w *_AttrWriterMap) SetMap(name _SchemaAttr, m map[string]interface{}) error { + w.m[string(name)] = m + return nil panic(fmt.Sprintf("PROVIDER BUG: Cat set a map within a map for %s", name)) } @@ -59,6 +61,10 @@ func (w *_AttrWriterMap) SetSet(name _SchemaAttr, s *schema.Set) error { } func (w *_AttrWriterMap) SetString(name _SchemaAttr, s string) error { - (*w.m)[string(name)] = s + w.m[string(name)] = s return nil } + +func (w *_AttrWriterMap) ToMap() map[string]interface{} { + return w.m +} diff --git a/builtin/providers/consul/utils.go b/builtin/providers/consul/utils.go index d3594a50e..4cb9533df 100644 --- a/builtin/providers/consul/utils.go +++ b/builtin/providers/consul/utils.go @@ -242,8 +242,7 @@ func _APIToStateMap(e *_TypeEntry, v interface{}, w _AttrWriter) error { return fmt.Errorf("PROVIDER BUG: unable to cast %s to a map", e.SchemaName) } - m := make(map[string]interface{}, len(rawMap)) - mWriter := _NewMapWriter(&m) + mWriter := _NewMapWriter(make(map[string]interface{}, len(rawMap))) // Make a lookup map by API Schema Name var setMembersLen int @@ -271,7 +270,7 @@ func _APIToStateMap(e *_TypeEntry, v interface{}, w _AttrWriter) error { } } - return w.SetMap(e.SchemaName, m) + return w.SetMap(e.SchemaName, mWriter.ToMap()) } func _APIToStateSet(e *_TypeEntry, v interface{}, w _AttrWriter) error {