diff options
Diffstat (limited to 'model/value.go')
| -rw-r--r-- | model/value.go | 42 |
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 |
