From 58824d8cc3b33d71eef23aeb950befc02a25be1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20M=C3=BCller?= Date: Tue, 22 Nov 2022 14:27:06 +0100 Subject: [PATCH] Fix: Connection settings route and address data types --- Connection.go | 51 ++++++++++++++++++++++++++-------------------- Connection_test.go | 16 +++++++-------- 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/Connection.go b/Connection.go index 7d255ce..8687703 100644 --- a/Connection.go +++ b/Connection.go @@ -125,32 +125,39 @@ func decodeSettings(input map[string]map[string]dbus.Variant) (settings Connecti func decode(input interface{}) (value interface{}) { if variant, isVariant := input.(dbus.Variant); isVariant { return decode(variant.Value()) + } else if inputMap, isMap := input.(map[string]dbus.Variant); isMap { + return decodeMap(inputMap) + } else if inputArray, isArray := input.([]dbus.Variant); isArray { + return decodeArray(inputArray) + } else if inputArray, isArray := input.([]map[string]dbus.Variant); isArray { + return decodeMapArray(inputArray) } else { - - if inputMap, isMap := input.(map[string]dbus.Variant); isMap { - valueMap := map[string]interface{}{} - for key, data := range inputMap { - valueMap[key] = decode(data) - } - return valueMap - } else if inputArray, isArray := input.([]interface{}); isArray { - var valueArray []interface{} - for _, data := range inputArray { - valueArray = append(valueArray, decode(data)) - } - return valueArray - } else if inputArray, isArray := input.([]map[string]dbus.Variant); isArray { - var valueArray []interface{} - for _, data := range inputArray { - valueArray = append(valueArray, decode(data)) - } - return valueArray - } else { - return input - } + return input } } +func decodeArray(input []dbus.Variant) (value []interface{}) { + for _, data := range input { + value = append(value, decode(data)) + } + return +} + +func decodeMapArray(input []map[string]dbus.Variant) (value []map[string]interface{}) { + for _, data := range input { + value = append(value, decodeMap(data)) + } + return +} + +func decodeMap(input map[string]dbus.Variant) (value map[string]interface{}) { + value = map[string]interface{}{} + for key, data := range input { + value[key] = decode(data) + } + return +} + func (c *connection) ClearSecrets() error { return c.call(ConnectionClearSecrets) } diff --git a/Connection_test.go b/Connection_test.go index f782969..45ac0f0 100644 --- a/Connection_test.go +++ b/Connection_test.go @@ -63,15 +63,15 @@ func TestDecodeSettings(t *testing.T) { expected := ConnectionSettings{ "ipv4": { - "address-data": []interface{}{ - map[string]interface{}{ + "address-data": []map[string]interface{}{ + { "address": "192.168.1.156", "prefix": 24, }, }, "dns-search": []string{}, "method": "manual", - "route-data": []interface{}(nil), + "route-data": []map[string]interface{}(nil), "routes": [][]uint32{}, "addresses": [][]uint32{ { @@ -86,11 +86,11 @@ func TestDecodeSettings(t *testing.T) { }, "ipv6": { "addr-gen-mode": 3, - "address-data": []interface{}(nil), + "address-data": []map[string]interface{}(nil), "routes": [][]interface{}{}, "dns-search": []string{}, "method": "auto", - "route-data": []interface{}(nil), + "route-data": []map[string]interface{}(nil), "dhcp-timeout": 45, "route-metric": 100, "addresses": [][]interface{}{}, @@ -145,15 +145,15 @@ func TestDecode(t *testing.T) { result := decode(ipSettings) expected := map[string]interface{}{ - "address-data": []interface{}{ - map[string]interface{}{ + "address-data": []map[string]interface{}{ + { "address": "192.168.1.156", "prefix": 24, }, }, "dns-search": []string{}, "method": "manual", - "route-data": []interface{}(nil), + "route-data": []map[string]interface{}(nil), "routes": [][]uint32{}, "addresses": [][]uint32{ {