All checks were successful
Tests and linters / Run gofumpt (pull_request) Successful in 28s
DCO action / DCO (pull_request) Successful in 42s
Vulncheck / Vulncheck (pull_request) Successful in 1m0s
Pre-commit hooks / Pre-commit (pull_request) Successful in 1m33s
Build / Build Components (pull_request) Successful in 1m46s
Tests and linters / Staticcheck (pull_request) Successful in 2m0s
Tests and linters / Lint (pull_request) Successful in 2m55s
Tests and linters / Tests (pull_request) Successful in 4m17s
Tests and linters / Tests with -race (pull_request) Successful in 5m14s
Tests and linters / gopls check (pull_request) Successful in 5m17s
Tests and linters / Run gofumpt (push) Successful in 27s
Vulncheck / Vulncheck (push) Successful in 51s
Pre-commit hooks / Pre-commit (push) Successful in 1m25s
Build / Build Components (push) Successful in 2m10s
Tests and linters / Staticcheck (push) Successful in 2m25s
Tests and linters / Lint (push) Successful in 3m24s
Tests and linters / Tests (push) Successful in 4m4s
OCI image / Build container images (push) Successful in 4m21s
Tests and linters / Tests with -race (push) Successful in 4m25s
Tests and linters / gopls check (push) Successful in 4m49s
gopatch: ``` @@ var from, to expression @@ +import "bytes" -to := make([]byte, len(from)) -copy(to, from) +to := bytes.Clone(from) @@ var from, to expression @@ +import "bytes" -to = make([]byte, len(from)) -copy(to, from) +to = bytes.Clone(from) @@ var from, to, typ expression @@ +import "slices" -to := make([]typ, len(from)) -copy(to, from) +to := slices.Clone(from) @@ var from, to, typ expression @@ +import "slices" -to = make([]typ, len(from)) -copy(to, from) +to = slices.Clone(from) ``` Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package config
|
|
|
|
import (
|
|
"slices"
|
|
"strings"
|
|
|
|
configViper "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/internal/common/config"
|
|
)
|
|
|
|
// Sub returns a subsection of the Config by name.
|
|
//
|
|
// Returns nil if subsection is missing.
|
|
func (x *Config) Sub(name string) *Config {
|
|
// copy path in order to prevent consequent violations
|
|
ln := len(x.path)
|
|
|
|
path := make([]string, ln, ln+1)
|
|
|
|
copy(path, x.path)
|
|
|
|
var defaultPath []string
|
|
if x.defaultPath != nil {
|
|
ln := len(x.defaultPath)
|
|
defaultPath = make([]string, ln, ln+1)
|
|
copy(defaultPath, x.defaultPath)
|
|
}
|
|
|
|
return &Config{
|
|
v: x.v,
|
|
path: append(path, name),
|
|
defaultPath: append(defaultPath, name),
|
|
}
|
|
}
|
|
|
|
// Value returns the configuration value by name.
|
|
//
|
|
// Result can be casted to a particular type
|
|
// via corresponding function (e.g. StringSlice).
|
|
// Note: casting via Go `.()` operator is not
|
|
// recommended.
|
|
//
|
|
// Returns nil if config is nil.
|
|
func (x *Config) Value(name string) any {
|
|
value := x.v.Get(strings.Join(append(x.path, name), configViper.Separator))
|
|
if value != nil || x.defaultPath == nil {
|
|
return value
|
|
}
|
|
return x.v.Get(strings.Join(append(x.defaultPath, name), configViper.Separator))
|
|
}
|
|
|
|
// SetDefault sets fallback config for missing values.
|
|
//
|
|
// It supports only one level of nesting and is intended to be used
|
|
// to provide default values.
|
|
func (x *Config) SetDefault(from *Config) {
|
|
x.defaultPath = slices.Clone(from.path)
|
|
}
|