Select Git revision
doc.go 3.26 KiB
package config
import (
"fmt"
"os"
"reflect"
"sort"
"strings"
"gitlab.com/uafrica/go-utils/logger"
"gitlab.com/uafrica/go-utils/struct_utils"
)
func Doc(f *os.File, showValues bool, format int) {
if f == nil {
return
}
entries := []docEntry{}
for prefix, structPtr := range prefixStructs {
prefixEntries := docStruct(prefix, reflect.TypeOf(structPtr).Elem(), reflect.ValueOf(structPtr).Elem())
if showValues {
nv := struct_utils.NamedValuesFromEnv(prefix)
for i, e := range prefixEntries {
name := strings.ToLower(e.Env[len(prefix)+1:])
if values, ok := nv[name]; ok {
e.Current = values
prefixEntries[i] = e
delete(nv, name)
}
}
}
entries = append(entries, prefixEntries...)
}
sort.Slice(entries, func(i, j int) bool { return entries[i].Env < entries[j].Env })
switch format {
case 1: //Mark Down
fmt.Fprintf(f, "# Configuration from Environment\n")
fmt.Fprintf(f, "\n")
if !showValues {
fmt.Fprintf(f, "|Environment|Type|Default|Description & Rules|\n")
fmt.Fprintf(f, "|---|---|---|---|\n")
} else {
fmt.Fprintf(f, "|Environment|Type|Default|Description & Rules|Values|\n")
fmt.Fprintf(f, "|---|---|---|---|---|\n")
}
for _, e := range entries {
text := e.Text
if text != "" && e.Rules != "" {
text += "; " + e.Rules
}
fmt.Fprintf(f, "|%s|%s|%s|%s|",
e.Env,
e.Type,
e.Default,
text)
if showValues {
if len(e.Current) == 0 {
fmt.Fprintf(f, "(Not Defined)|") //no values
} else {
if len(e.Current) == 1 {
fmt.Fprintf(f, "%s|", e.Current[0]) //only one value
} else {
fmt.Fprintf(f, "%s|", strings.Join(e.Current, ", ")) //multiple values
}
}
}
fmt.Fprintf(f, "\n")