Skip to content
Snippets Groups Projects
Select Git revision
  • 076807d78d7e26425229805083733cbb2f9b7693
  • main default protected
  • v1.298.0
  • v1.297.0
  • v1.296.0
  • v1.295.0
  • v1.294.0
  • v1.293.0
  • v1.292.0
  • v1.291.0
  • v1.290.0
  • v1.289.0
  • v1.288.0
  • v1.287.0
  • v1.286.0
  • v1.285.0
  • v1.284.0
  • v1.283.0
  • v1.282.0
  • v1.281.0
  • v1.280.0
  • v1.279.0
22 results

doc.go

Blame
  • 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")