From ba06314d59e55945b103ead2c7a9e01f58c6a93c Mon Sep 17 00:00:00 2001 From: Alexander Neonxp Kiryukhin Date: Tue, 17 Feb 2026 21:33:24 +0300 Subject: v0.0.1 --- model/value.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 model/value.go (limited to 'model/value.go') 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 -- cgit v1.2.3