From 8a7428e508d9a6b6275ed1df5315acc7aa9890ea Mon Sep 17 00:00:00 2001 From: James Phillips Date: Thu, 12 May 2016 16:10:06 -0700 Subject: [PATCH] Hoists KV processing helper functions up as static functions. --- command/agent/txn_endpoint.go | 100 +++++++++++++++++----------------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/command/agent/txn_endpoint.go b/command/agent/txn_endpoint.go index 11198f5c8f..902f1bf692 100644 --- a/command/agent/txn_endpoint.go +++ b/command/agent/txn_endpoint.go @@ -10,59 +10,59 @@ import ( "github.com/hashicorp/consul/consul/structs" ) +// decodeValue decodes the value member of the given operation. +func decodeValue(rawKV interface{}) error { + rawMap, ok := rawKV.(map[string]interface{}) + if !ok { + return fmt.Errorf("unexpected raw KV type: %T", rawKV) + } + for k, v := range rawMap { + switch strings.ToLower(k) { + case "value": + // Leave the byte slice nil if we have a nil + // value. + if v == nil { + return nil + } + + // Otherwise, base64 decode it. + s, ok := v.(string) + if !ok { + return fmt.Errorf("unexpected value type: %T", v) + } + decoded, err := base64.StdEncoding.DecodeString(s) + if err != nil { + return fmt.Errorf("failed to decode value: %v", err) + } + rawMap[k] = decoded + return nil + } + } + return nil +} + +// fixupKVOp looks for non-nil KV operations and passes them on for +// value conversion. +func fixupKVOp(rawOp interface{}) error { + rawMap, ok := rawOp.(map[string]interface{}) + if !ok { + return fmt.Errorf("unexpected raw op type: %T", rawOp) + } + for k, v := range rawMap { + switch strings.ToLower(k) { + case "kv": + if v == nil { + return nil + } + return decodeValue(v) + } + } + return nil +} + // fixupKVOps takes the raw decoded JSON and base64 decodes values in KV ops, // replacing them with byte arrays. func fixupKVOps(raw interface{}) error { - // decodeValue decodes the value member of the given operation. - decodeValue := func(rawKV interface{}) error { - rawMap, ok := rawKV.(map[string]interface{}) - if !ok { - return fmt.Errorf("unexpected raw KV type: %T", rawKV) - } - for k, v := range rawMap { - switch strings.ToLower(k) { - case "value": - // Leave the byte slice nil if we have a nil - // value. - if v == nil { - return nil - } - - // Otherwise, base64 decode it. - s, ok := v.(string) - if !ok { - return fmt.Errorf("unexpected value type: %T", v) - } - decoded, err := base64.StdEncoding.DecodeString(s) - if err != nil { - return fmt.Errorf("failed to decode value: %v", err) - } - rawMap[k] = decoded - return nil - } - } - return nil - } - - // fixupKVOp looks for non-nil KV operations and passes them on for - // value conversion. - fixupKVOp := func(rawOp interface{}) error { - rawMap, ok := rawOp.(map[string]interface{}) - if !ok { - return fmt.Errorf("unexpected raw op type: %T", rawOp) - } - for k, v := range rawMap { - switch strings.ToLower(k) { - case "kv": - if v == nil { - return nil - } - return decodeValue(v) - } - } - return nil - } - rawSlice, ok := raw.([]interface{}) if !ok { return fmt.Errorf("unexpected raw type: %t", raw)