summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gonf/values.go18
-rw-r--r--gonf/variables.go16
2 files changed, 32 insertions, 2 deletions
diff --git a/gonf/values.go b/gonf/values.go
index 56743e2..509b6bf 100644
--- a/gonf/values.go
+++ b/gonf/values.go
@@ -3,6 +3,7 @@ package gonf
import (
"fmt"
"log/slog"
+ "strings"
)
type Value interface {
@@ -71,6 +72,21 @@ func (i IntValue) String() string {
return string(i.value)
}
+// ----- StringsListValue ------------------------------------------------------
+type StringsListValue struct {
+ value []string
+}
+
+func (s *StringsListValue) Append(v ...string) {
+ s.value = append(s.value, v...)
+}
+func (s StringsListValue) Bytes() []byte {
+ return []byte(s.String())
+}
+func (s StringsListValue) String() string {
+ return strings.Join(s.value, "\n")
+}
+
// ----- StringValue -----------------------------------------------------------
type StringValue struct {
value string
@@ -83,8 +99,6 @@ func (s StringValue) String() string {
return s.value
}
-// TODO lists
-
// TODO maps
// TODO what else?
diff --git a/gonf/variables.go b/gonf/variables.go
index 17f8eb9..ed09d31 100644
--- a/gonf/variables.go
+++ b/gonf/variables.go
@@ -14,6 +14,22 @@ func init() {
}
// ----- Public ----------------------------------------------------------------
+func AppendVariable(name string, values ...string) *VariablePromise {
+ if v, ok := variables[name]; ok {
+ if l, ok := v.value.(*StringsListValue); ok {
+ l.Append(values...)
+ }
+ return v
+ }
+ v := &VariablePromise{
+ isDefault: false,
+ name: name,
+ value: &StringsListValue{values},
+ }
+ variables[name] = v
+ return v
+}
+
func Default(name string, value string) *VariablePromise {
if v, ok := variables[name]; ok {
if !v.isDefault {