Config to string, JSON and YAML methods added and updated print methods to use new methods

This commit is contained in:
bwilliams committed 2026-09-29 11:55:11 +01:00
1 parent e715024cbd
commit a0fad30e99
3 files changed
+32 -33

No files matched your search

+2 -20
View File
@@ -27,26 +27,8 @@ import (
func commandGet() *cobra.Command { func commandGet() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "get [config_key]", Use: "get [config_key]",
Args: cobra.ExactArgs(1), Args: cobra.ExactArgs(1),
// Args: func(cmd *cobra.Command, args []string) error {
// // Optionally run one of the validators provided by cobra
// if err := cobra.ExactArgs(1)(cmd, args); err != nil {
// return err
// }
// conf, ok := cli.ConfigFromContext(cmd.Context())
// if !ok {
// return errors.New("no configuration loaded")
// }
// flatConf := config.FlattenConfig(conf)
// if !util.HasKey(flatConf, args[0]) {
// return fmt.Errorf("invalid config key specified: %s", args[0])
// }
// return nil
// },
Short: "Get a value from configuration", Short: "Get a value from configuration",
PersistentPreRun: func(cmd *cobra.Command, args []string) { PersistentPreRun: func(cmd *cobra.Command, args []string) {
slog.Debug("config.get.PersistentPreRun") slog.Debug("config.get.PersistentPreRun")
+27
View File
@@ -17,12 +17,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package config package config
import ( import (
"encoding/json"
"errors" "errors"
"fmt"
"maps" "maps"
"reflect" "reflect"
"strings" "strings"
"github.com/spf13/viper" "github.com/spf13/viper"
"go.yaml.in/yaml/v3"
) )
const EnvPrefix string = "JOBSEARCH" const EnvPrefix string = "JOBSEARCH"
@@ -112,3 +115,27 @@ func LoadToViper(conf JobSearchConfig) {
viper.SetDefault(key, flatMap[key]) viper.SetDefault(key, flatMap[key])
} }
} }
// Converts configuration to a string in flat dotted format
func (conf JobSearchConfig) String() string {
var sb strings.Builder
for k, v := range conf.Flatten() {
typ, _ := conf.TypeOf(k)
sb.WriteString(fmt.Sprint(k, " = ", v, " <", typ, ">"))
}
return sb.String()
}
// Converts configuration to JSON
func (conf JobSearchConfig) JSON() string {
confMap := conf.Map()
jbytes, _ := json.MarshalIndent(confMap, "", " ")
return string(jbytes)
}
// Converts configuration to YAML
func (conf JobSearchConfig) YAML() string {
confMap := conf.Map()
ybytes, _ := yaml.Marshal(confMap)
return string(ybytes)
}
+3 -13
View File
@@ -17,33 +17,23 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package config package config
import ( import (
"encoding/json"
"fmt" "fmt"
"log/slog" "log/slog"
"go.yaml.in/yaml/v3"
) )
// Prints configuration to stdout in flat dotted format // Prints configuration to stdout in flat dotted format
func (conf JobSearchConfig) PrintTerminal() { func (conf JobSearchConfig) PrintTerminal() {
for k, v := range conf.Flatten() { fmt.Print(conf.String() + "\n")
typ, _ := conf.TypeOf(k)
fmt.Print(k, " = ", v, " <", typ, ">\n")
}
} }
// Prints configuration to stdout as JSON // Prints configuration to stdout as JSON
func (conf JobSearchConfig) PrintJson() { func (conf JobSearchConfig) PrintJson() {
confMap := conf.Map() fmt.Print(conf.JSON() + "\n")
jbytes, _ := json.MarshalIndent(confMap, "", " ")
fmt.Print(string(jbytes) + "\n")
} }
// Prints configuration to stdout as YAML // Prints configuration to stdout as YAML
func (conf JobSearchConfig) PrintYaml() { func (conf JobSearchConfig) PrintYaml() {
confMap := conf.Map() fmt.Print(conf.YAML() + "\n")
jbytes, _ := yaml.Marshal(confMap)
fmt.Print(string(jbytes) + "\n")
} }
// Prints configuration to logrus log at debug, info (default) or error level // Prints configuration to logrus log at debug, info (default) or error level