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