From 8577f2510d8be4e86fb7321131d6ad070128df84 Mon Sep 17 00:00:00 2001 From: Jan Semmelink <jan@uafrica.com> Date: Thu, 11 Nov 2021 10:43:15 +0200 Subject: [PATCH] Added key_reader to string_utils --- string_utils/key_reader.go | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 string_utils/key_reader.go diff --git a/string_utils/key_reader.go b/string_utils/key_reader.go new file mode 100644 index 0000000..5d2bf30 --- /dev/null +++ b/string_utils/key_reader.go @@ -0,0 +1,39 @@ +package string_utils + +import ( + "os" + "strings" +) + +//KeyReader is an interface to read string "<key>":"<value>" pairs +//which is common to read from the environment +//it is abstracted so the same interface can be implemented for +//reading for example from REDIS and other sources +type KeyReader interface { + Keys(prefix string) []string + GetString(key string) (value string, ok bool) +} + +func EnvironmentKeyReader() KeyReader { + return envKeyReader{} +} + +type envKeyReader struct{} + +func (envKeyReader) GetString(key string) (value string, ok bool) { + value = os.Getenv(key) + if value == "" { + return "", false + } + return value, true +} + +func (envKeyReader) Keys(prefix string) []string { + keys := []string{} + for _, env := range os.Environ() { + if strings.HasPrefix(env, prefix) { + keys = append(keys, strings.SplitN(env, "=", 2)[0]) + } + } + return keys +} -- GitLab