AdGuardHome/internal/next/configmgr/error.go

36 lines
1.0 KiB
Go
Raw Normal View History

package configmgr
import (
"fmt"
2024-11-08 16:20:02 +00:00
"github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/timeutil"
"golang.org/x/exp/constraints"
)
2024-11-08 16:20:02 +00:00
// validator is the interface for configuration entities that can validate
// themselves.
type validator interface {
// validate returns an error if the entity isn't valid.
validate() (err error)
}
// numberOrDuration is the constraint for integer types along with
// timeutil.Duration.
type numberOrDuration interface {
constraints.Integer | timeutil.Duration
}
// newMustBePositiveError returns an error about the value that must be positive
// but isn't. prop is the name of the property to mention in the error message.
//
// TODO(a.garipov): Consider moving such helpers to golibs and use in AdGuardDNS
// as well.
func newMustBePositiveError[T numberOrDuration](prop string, v T) (err error) {
if s, ok := any(v).(fmt.Stringer); ok {
2024-11-08 16:20:02 +00:00
return fmt.Errorf("%s: %w, got %s", prop, errors.ErrNotPositive, s)
}
2024-11-08 16:20:02 +00:00
return fmt.Errorf("%s: %w, got %d", prop, errors.ErrNotPositive, v)
}