Skip to content

AllSettings()['flagname'] returns string for DurationSlice #1497

@UrbanskiDawid

Description

@UrbanskiDawid

Preflight Checklist

  • I have searched the issue tracker for an issue that matches the one I want to file, without success.
  • I am not looking for support or already pursued the available support channels without success.
  • I have checked the troubleshooting guide for my problem, without success.

Viper Version

1.15

Go Version

1.18

Config Source

Manual set

Format

No response

Repl.it link

No response

Code reproducing the issue

package main

import (
	"fmt"
	"time"
	"github.com/spf13/pflag"
	"github.com/spf13/viper"
)

func f1() {
	v := viper.New()

	flagSet := pflag.NewFlagSet("test", pflag.ContinueOnError)
	flagSet.String("name", "", "test")

	v.BindPFlags(flagSet)
	flagSet.VisitAll(func(flag *pflag.Flag) {
		flag.Value.Set("set")
		flag.Changed = true
	})
	fmt.Print(v.Get("name"))
}

func main() {

	flagSet := pflag.NewFlagSet("test", pflag.ContinueOnError)
	flagSet.IntSlice("ok2", []int{1, 2}, "")
	flagSet.StringSlice("ok1", []string{"s1", "s2"}, "")
	flagSet.DurationSlice("fail", []time.Duration{time.Second, time.Hour}, "")

	v := viper.New()
	v.BindPFlags(flagSet)

	ok1 := v.AllSettings()["ok1"]
	fmt.Printf("%v %T\n", ok1, ok1) //[s1 s2] []string

	ok2 := v.AllSettings()["ok2"]
	fmt.Printf("%v %T\n", ok2, ok2) //[1 2] []int

	fail := v.AllSettings()["fail"]
	fmt.Printf("%v %T\n", fail, fail) //[1s,1h0m0s] string
}

Expected Behavior

DurationSlice in AllSettings()["fail"] should return set of time.Duration in similar fashion as IntSlice and StringSlice

AllSettings()["fail"] returns:
[]time.Duration{time.Second, time.Hour}

Actual Behavior

AllSettings()["fail"] returns string
"[1s,1h0m0s]"

Steps To Reproduce

run example from this issue

Additional Information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions