lncfg/interface: define Validator iface + variadic Validate

This commit introduces the Validator interface, which
is intended to be implemented by any sub configs. It
specifies a Validate() error method that should fail
if a sub configuration contains any invalid or insane
parameters.

In addition, a package-level Validate method can be
used to check a variadic number of sub configs
implementing the Validator interface. This allows the
primary config struct to be extended via targeted
and/or specialized sub configs, and validate all of
them in sequence without bloating the main package
with the actual validation logic.
This commit is contained in:
Conner Fromknecht 2019-04-01 16:33:50 -07:00
parent 6d3e081f7b
commit 5c8ba59790
No known key found for this signature in database
GPG Key ID: E7D737B67FA592C7
2 changed files with 24 additions and 0 deletions

21
lncfg/interface.go Normal file

@ -0,0 +1,21 @@
package lncfg
// Validator is a generic interface for validating sub configurations.
type Validator interface {
// Validate returns an error if a particular configuration is invalid or
// insane.
Validate() error
}
// Validate accepts a variadic list of Validators and checks that each one
// passes its Validate method. An error is returned from the first Validator
// that fails.
func Validate(validators ...Validator) error {
for _, validator := range validators {
if err := validator.Validate(); err != nil {
return err
}
}
return nil
}

@ -47,3 +47,6 @@ func (w *Workers) Validate() error {
return nil return nil
} }
// Compile-time constraint to ensure Workers implements the Validator interface.
var _ Validator = (*Workers)(nil)