in ucfg.go [205:243]
func (c *Config) FlattenedKeys(opts ...Option) []string {
var keys []string
normalizedOptions := makeOptions(opts)
if normalizedOptions.pathSep == "" {
normalizedOptions.pathSep = "."
}
if c.IsDict() {
for _, v := range c.fields.dict() {
subcfg, err := v.toConfig(normalizedOptions)
if err != nil {
ctx := v.Context()
p := ctx.path(normalizedOptions.pathSep)
keys = append(keys, p)
} else {
newKeys := subcfg.FlattenedKeys(opts...)
keys = append(keys, newKeys...)
}
}
} else if c.IsArray() {
for _, a := range c.fields.array() {
scfg, err := a.toConfig(normalizedOptions)
if err != nil {
ctx := a.Context()
p := ctx.path(normalizedOptions.pathSep)
keys = append(keys, p)
} else {
newKeys := scfg.FlattenedKeys(opts...)
keys = append(keys, newKeys...)
}
}
}
sort.Strings(keys)
return keys
}