aboutsummaryrefslogtreecommitdiff
path: root/model/value.go
diff options
context:
space:
mode:
author2026-02-17 21:33:24 +0300
committer2026-02-21 16:23:10 +0300
commitba06314d59e55945b103ead2c7a9e01f58c6a93c (patch)
tree34ab8ac19307da60bd5caf76d844a6dc2e730361 /model/value.go
parentinit (diff)
downloadconf-ba06314d59e55945b103ead2c7a9e01f58c6a93c.tar.gz
conf-ba06314d59e55945b103ead2c7a9e01f58c6a93c.tar.bz2
conf-ba06314d59e55945b103ead2c7a9e01f58c6a93c.tar.xz
conf-ba06314d59e55945b103ead2c7a9e01f58c6a93c.zip
v0.0.1v0.0.1
Diffstat (limited to 'model/value.go')
-rw-r--r--model/value.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/model/value.go b/model/value.go
new file mode 100644
index 0000000..4ec7344
--- /dev/null
+++ b/model/value.go
@@ -0,0 +1,42 @@
+package model
+
+import (
+ "strconv"
+ "strings"
+)
+
+type Value any
+
+type Values []Value
+
+// BuildString собирает из значений Value цельную строку, при этом приводя все
+// значения к типу string. Так же принимает функции типа WordLookup, которые
+// последовательно будут пытаться привести значения типа Word к
+// контекстозависимым значениям. Например, пытаться находить по имени переменную
+// окружения ОС.
+func (v Values) BuildString(lookups ...WordLookup) string {
+ sw := strings.Builder{}
+
+ for _, v := range v {
+ switch v := v.(type) {
+ case string:
+ sw.WriteString(v)
+ case float64:
+ sw.WriteString(strconv.FormatFloat(v, 'f', 5, 64))
+ case int:
+ sw.WriteString(strconv.Itoa(v))
+ case bool:
+ if v {
+ sw.WriteString("true")
+ continue
+ }
+ sw.WriteString("false")
+ case Word:
+ sw.WriteString(chainLookup(lookups...)(v))
+ }
+ }
+
+ return sw.String()
+}
+
+type Word string