chore(repo): renamed gonf subfolder to something more traditional in go land
This commit is contained in:
parent
3b9af43738
commit
560becfd32
14 changed files with 2 additions and 2 deletions
85
pkg/variables.go
Normal file
85
pkg/variables.go
Normal file
|
@ -0,0 +1,85 @@
|
|||
package gonf
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
)
|
||||
|
||||
// ----- Globals ---------------------------------------------------------------
|
||||
var variables map[string]*VariablePromise
|
||||
|
||||
// ----- Init ------------------------------------------------------------------
|
||||
func init() {
|
||||
variables = make(map[string]*VariablePromise)
|
||||
}
|
||||
|
||||
// ----- 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 {
|
||||
slog.Debug("default would overwrite a variable, ignoring", "name", name, "old_value", v.value, "new_value", value)
|
||||
return nil
|
||||
}
|
||||
slog.Error("default is being overwritten", "name", name, "old_value", v.value, "new_value", value)
|
||||
}
|
||||
v := &VariablePromise{
|
||||
isDefault: true,
|
||||
name: name,
|
||||
value: interfaceToTemplateValue(value),
|
||||
}
|
||||
variables[name] = v
|
||||
return v
|
||||
}
|
||||
|
||||
func Variable(name string, value string) *VariablePromise {
|
||||
if v, ok := variables[name]; ok && !v.isDefault {
|
||||
slog.Error("variable is being overwritten", "name", name, "old_value", v, "new_value", value)
|
||||
}
|
||||
v := &VariablePromise{
|
||||
isDefault: false,
|
||||
name: name,
|
||||
value: interfaceToTemplateValue(value),
|
||||
}
|
||||
variables[name] = v
|
||||
return v
|
||||
}
|
||||
|
||||
type VariablePromise struct {
|
||||
isDefault bool
|
||||
name string
|
||||
value Value
|
||||
}
|
||||
|
||||
// We want VariablePromise to satisfy the Value interface
|
||||
func (s VariablePromise) Bytes() []byte {
|
||||
return s.value.Bytes()
|
||||
}
|
||||
func (s VariablePromise) String() string {
|
||||
return s.value.String()
|
||||
}
|
||||
|
||||
// ----- Internal --------------------------------------------------------------
|
||||
func getVariable(name string) string {
|
||||
if v, ok := variables[name]; ok {
|
||||
return v.value.String()
|
||||
} else {
|
||||
slog.Error("undefined variable or default", "name", name)
|
||||
panic(fmt.Sprintf("undefined variable or default %s", name))
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue